We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

01A.4 if-else-Verzweigung

00:00

Formale Metadaten

Titel
01A.4 if-else-Verzweigung
Serientitel
Anzahl der Teile
35
Autor
Lizenz
CC-Namensnennung - keine kommerzielle Nutzung - Weitergabe unter gleichen Bedingungen 3.0 Deutschland:
Sie dürfen das Werk bzw. den Inhalt zu jedem legalen und nicht-kommerziellen Zweck nutzen, verändern und in unveränderter oder veränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen, sofern Sie den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen und das Werk bzw. diesen Inhalt auch in veränderter Form nur unter den Bedingungen dieser Lizenz weitergeben.
Identifikatoren
Herausgeber
Erscheinungsjahr
Sprache
Produzent

Inhaltliche Metadaten

Fachgebiet
Genre
Arithmetischer AusdruckInformationEmulatorDownloadingGebäude <Mathematik>ProgrammierspracheRechnenVariableBildschirmmaskeProgrammiererNegative ZahlSkript <Programm>Dienst <Informatik>KennlinieAusdruck <Logik>Notebook-ComputerRundungIteriertes FunktionensystemDiskrete-Elemente-MethodeComputeranimation
DEBUG <Programm>EmulatorDownloadingVariableNichtlineares GleichungssystemVerschlingungDiagrammComputeranimation
EmulatorVariableOptimierungCompilerGRADETaylor-ReiheStützstelle <Mathematik>Strich <Typographie>GleichungGanze ZahlComputeranimationDiagramm
DownloadingEmulatorArithmetischer AusdruckDebuggingHardwareDEBUG <Programm>RechnenZahlGanze ZahlGleitkommarechnungC++NormalvektorRundungEnergieGleitkommazahlProzessorComputeranimationDiagramm
Transkript: Deutsch(automatisch erzeugt)
Einfach nur rumzurechnen mit Plus, Minus und Mal und geteilt ist nicht der wahre Jakob. Das erste, was man dazu lernt, sind die Verzweigungen und den C und den Nachfolgesprachen nennt sich das dann If und Else, das kam mir schon im Video vor, ich schreibe If und dann in Klammern eine Bedingung, wenn dieses oder jenes gilt und dann in Schweifklammern,
diese C-Sprachen sind voll von diesen Schweifklammern, in Schweifklammern schreibe ich dann, was passieren soll, wenn die Bedingung erfüllt ist und dann kann ich optional, wahlweise noch
ein Else dahinter schreiben, das muss nicht dahinter stehen, ich kann es dahinter schreiben, um dann in weiteren Schweifklammern zu sagen, was passieren soll, wenn die Bedingung nicht erfüllt ist, wie in der ganz normalen Sprache, wenn das, was hier steht, in den runden Klammern erfüllt ist, gehe dahin, führe das aus, wenn das nicht erfüllt
ist, was in den runden Klammern gestanden hat, gehe dahin, führe das aus, dass man auf verschiedene Situationen, auf verschieden reagieren kann, da wollte ich Sie mal was auf Papier oder einiger mit tatsächlicher Laptop dabei, auf Papier oder am Laptop mal programmieren lassen, die erste Anwendung, die man davon machen kann, Kennlinien
umwandeln, ich hätte gerne folgende Kennlinie programmiert, und zwar hätte ich gerne, wenn eine Größe x eingegeben wird, dass eine Größe y ausgegeben wird, und zwar
folgender Art, wenn die Größe x von, sagen wir, was machen wir hier mal, von 15 bis 50 ist, möchte ich gerne, dass sie hier bei y gleich 13 anfängt und hier
bei y gleich 42 aufhört, so, und davor und danach hätte ich gerne, dass diese Größe in der Sättigung ist, wenn ich mit 50 reingehe soll 42 rauskommen, wenn ich mit 100 reingehe soll weiterhin 42 rauskommen, wenn ich mit 200 reingehe, sollen 240 rauskommen, wenn
ich mit 7 reingehe, sollen 13 rauskommen, wenn ich mit negativen Zahlen reingehe, sollen auch 13 rauskommen, so eine Kennlinie hätte ich jetzt gerne, dass man mit dem IF programmiert, also nehmen Sie ich beispielsweise ein Papier oder nehmen Sie ich den Rechner,
dann kriegen Sie das mal hin, in einer Variablen x, in einer Variablen x habe ich die Größe, mit der ich hier reingehe und in einer Variablen y soll nachher übrig bleiben, ein Wert 13, wenn x kleiner war, 15, ein Wert 42, wenn x größer war, als 15 und so eine lineare Verbindung ansonsten. Das müsste mit ein paar IFs gehen, auf
Papier wie auf dem Rechner, probieren Sie das mal. Okay, ich lerne gerade ein paar Sachen, die ich erzählen muss, an dieser Stelle schon. Diese Semikolons sind wirklich blöd. Ein besseres Entwicklungssystem sagt Ihnen auch
sofort, wo ein Semikolon fehlt, wenn Sie es weglassen. Dieses Entwicklungssystem sagt es einem leider nicht. An diesen Stellen, wenn Sie so eine Zuweisung haben, brauchen Sie ein Semikolon. Hier brauchen Sie ein Semikolon. Kein Semikolon steht in diesem IF drin, da steht nur die
Bedingung, da steht kein Semikolon drinnen. Nach dem IF, runde Klammer, steht auch kein Semikolon. Das ist so ein bisschen wie Sprachenlernen, es ist halt ein Programmiersprache, man muss auch die Programmiersprache lernen. Sie sehen hier nach dem Return, das hat man noch nicht, da hinten steht nachher auch ein Semikolon. Aber erst mal, wenn Sie dieses haben, solche Zuweisungen, danach steht ein Semikolon. In dieser Sprache, in JavaScript, braucht man es
nicht, was es dann im Zweifelsfall kaputt macht, aber in dieser Sprache und in den meisten daraus abgeleiteten Sprachen braucht man tatsächlich da ein Semikolon. Nicht in dem IF, in dieser Bedingung, und nicht nach der runden Klammer von dem IF und auch nicht nach dem else. Also ein echtes
Kommando, was hier ausgeführt wird, wenn Sie wollen. So ein Kommando, was da ausgeführt wird, kriegt ein Semikolon dahinter. Das kann man mit den richtigen Begriffen noch schöner sagen, aber an dieser Stelle wollte ich da nicht so in die Tiefe. Punkt eins, Punkt zwei, wenn ich Bedingungen verknüpfe, das muss ich doch schon jetzt erzählen, wenn ich Bedingungen verknüpfe. Ich möchte sagen zum Beispiel x, wenn 13 kleiner gleich
hintereinander schreiben, soll heißen kleiner gleich, wenn 13 kleiner gleich x ist und x ist kleiner als 42. Wäre schön, kann man leider in keiner Programmiersprache, die ich kenne, so schreiben. Geht leider nicht. Sie müssen
das leider zerlegen in zwei. 13 kleiner gleich x und x kleiner 42. Zu diesem Doppelund sage ich nächste Woche nochmal, was so wird es dann aussehen. Ich wollte diese Bedingung eigentlich gar nicht, aber wo ich dich jetzt bei vielen Leuten gesehen habe, muss ich es erzählen. So sieht das dann aus.
Sie können nicht diese beiden kleiner gleich in eins bauen. Sie müssen zwei Bedingungen haben. X soll größer gleich, muss ich ja sagen, 13 soll kleiner gleich x sein und x soll kleiner als 42 sein. Die beiden Bedingungen mit so einem und zusammengebaut. Deshalb war ich im ersten Demester auch immer so
streng bei den logischen Ausdrücken. Sie können nicht hier dieses x jetzt weglassen. Das könnte man ja auch noch nicht so sprachlich. 13 soll kleiner gleich x sein und kleiner 42. Schön wäre es aber, so intelligent ist dieses Programm nicht. Nein, keine Programmiersprache ist so intelligent. Das will jetzt nochmal das x haben. Hier steht eine logische Bedingung. 13
ist kleiner gleich x. Das ist wahr oder es ist falsch. Und hier steht eine logische Bedingung. X ist kleiner als 42. Das ist wahr oder es ist falsch. Und das und bildet daraus eine neue logische Bedingung, nämlich dass beide stimmt oder nicht. Und wenn ich mir mal eine Skizze angeguckt hätte, hätte ich
merkt, dass es 15 und 50 sein müssen und nicht 13 und 42. 15 und 50 wäre natürlich hier sinnvoller. Ich wollte es sowieso ganz anders machen und da können Sie jetzt noch mal gerade ein paar Minuten darüber nachdenken. Ich wollte es sowieso ganz anders machen. Ich wollte nämlich so anfangen, wenn x
kleiner ist als 15 oder von mir aus auch gleich 15 ist, dann tue folgendes. Und dann ein els. Ansonsten zwei Schrägstriche heißt Kommentar. Was ich dahinter schreibe ist egal. Das ist nur für den menschlichen Leser
dann gedacht, wenn Sie zwei Schrägstriche machen. Was weiß ich, wenn ich in diesem els drin bin? Wenn diese Bedingung weiß, x ist kleiner als 15, geht er hier oben rein und macht das. Els heißt ansonsten, nämlich wenn x größer ist
als 15. Ansonsten macht er das, was hier unten steht. Starten Sie da noch mal und überlegen sich, was jetzt hier oben rein müsste und was hier unten in das els rein müsste. Das wird dann etwas übersichtlicher oder üblicher, was man dann da hat. Der obere Teil ist einfach. Hier will ich haben y gleich 13. Wenn mein
x kleiner als 15 ist oder gleich 15 ist, liege ich hier unten und y soll auch exakt gleich 13 sein. Dazu muss er y noch kennen. Sie sehen, das hier gibt Ärger. Er kennt x, er kennt blau und blub, aber er kennt kein y. Ich muss ihm noch sagen,
okay, y sollst du gefälligst auch kennen. Ich weise hier keinen Wert zu. Das ist vielleicht keine gute Idee, sieht man später. Ergibt sich ja nachher der Wert. Ich sage zumindest y ist eine ganzzahlige Variable. Das lässt dich überraschen. Und hier sage ich, okay, wenn ich auf der linken Seite bin, y
gleich 13. Jetzt bin ich auf der rechten Seite, von der 13 zumindest. Ich weiß jetzt, dass ich hier bin, in dem Bereich. Was mache ich nun als Allererstes?
Das Allererste, was ich mache, ist nicht die Gradengleichung hier auszuwerten, sondern das Allererste, was ich nun machen muss, wenn ich weiß, dass ich hier oben bin, das Allererstes festzustellen, ob ich denn da bin und 41 rauskriegen muss oder ob ich hier bin und die Gradengleichung nehmen muss. Das ist das Allererste. Ich muss in dem Else nochmal nachgucken, ob ich
größer bin als 50 oder nicht. Das gehört in das Else hier rein. Also hier gehört rein, if, hier stelle ich nochmal fest, ob x größer gleich 50 ist. Wenn das der
Ergebnis, wenn das nicht der Fall ist, muss ich die Gradengleichung bemühen. So sieht das dann aus, ein verschachteltes if Else. Wenn ich ganz links bin, geschenkt, kommt 13 raus. Wenn ich rechts bin, gucke ich nach, ob ich ganz rechts bin, größer gleich 50 und dann soll 42 rauskommen.
Hier muss also stehen, ob es dann gleich 42, Semikolon, und in dieses Else komme ich nur in den mittleren Bereich. Darf man sogar groß schreiben? Das kann man
natürlich auch andersrum machen. Sie können hier prüfen, ob sie kleiner 50 sind, dann ist es genau andersrum, je nachdem, wie man es gerne hätte. Ich würde den kompliziertesten Fall zum Schluss machen. Andere Leute würden den kompliziertesten Fall vielleicht am Anfang machen, keine Ahnung. Müsste man sich einmal einigen, einmal überlegen, was jetzt die
richtige Philosophie ist. Also ich habe da ein verschachteltes if Else. Er guckt nach, ob x kleiner gleich 15 ist. Wenn ja, Thema erledigt. Wir setzen y auf 13. Wenn nicht, geht er in diese Schweifklammer rein und guckt jetzt nach, ob x größer gleich 50 ist, ob wir ganz rechts liegen. Wenn ja, erledigt, dass sie unten
bleibt, unbetrachtet. Wenn nein, müssen wir in der Mitte liegen. Wir sind nicht unter 15. Wir sind nicht über 50. Wir müssen in der Mitte liegen. Und hier kommt jetzt die Gradengleichung. Ob es dann gleich so und so viel? Denken
Sie an die Taylor-Reihe. Ich kenne den Wert der Funktion an einer Stelle. Ich kenne ihre Steigung. Der Anfang der Taylor-Reihe. Die ersten 13 rauskommen an der Stelle, die ich kenne. 15, 13 plus, das ist so was wie
mein Funktionswert, an meiner Stützstelle. Plus jetzt kommt die Steigung. Ich gehe 25, 35 nach rechts und ich gehe 29 nach oben. Das ist meine Steigung mal x minus x null. So fängt die Taylor-Reihe an. f von x
null plus die Steigung f Strich von x null mal x minus x null. Das ist die Tangentengrade, mit der es anfängt. Und das ist natürlich eine Grade. Insofern die Gleichheit der Tangentengrade. Das wäre die Gradengleichung. Die kann man natürlich vereinfachen. Sie können natürlich hier die 15 und so weiter
ausmultiplizieren. Das wird der Compiler sogar alleine tun. Wenn man es auf Optimierung stellt, wird der Compiler das höchstwahrscheinlich sogar alleine tun. Wäre vielleicht trotzdem netter, wenn man es ausmultipliziert. So, das können wir im Prinzip eingeben. 13 plus 29, 35, dass man merken kann. 13 plus 29, 35 mal x minus 15. Das sieht jetzt so
harmlos aus. Ist aber gar nicht harmlos, weil hier wird in ganzen Zahlen gerechnet. Diese Formel hier wird höchstwahrscheinlich eher Blödsinn ergeben. Ich bin mal gespannt. Wir gucken uns das mal an. Und zwar im mittleren
Bereich. Wir nehmen vielleicht mal hier die 40 im mittleren Bereich und gucken, was passiert. Bla und blub brauchen wir ja nicht mehr. Ich starte mal mit x gleich 40 und gehe in Einzelschritten durch. Auf der Platine anscheinend
gerade und nicht im Simulator. Dauert dann auf der Platine etwas länger, bis er sich mit der verständigt hat. So, hier sind Einzelschritten da durch. Gibt es auch einen Tastaturkürzel dafür, aber ich klicke hier mal, dann ist es sichtbarer. So, x ist gleich 40 und y steht auf Irgendwas.
Das ist ein grundsätzliches Problem bei C und C++. Wenn Sie nicht angeben, auf was es stehen soll, steht es, es muss natürlich auf Irgendwas stehen, also steht es auf Irgendwas. In den moderneren Sprachen wie Java und C-Sharp ist das hier verboten, außer an bestimmten Stellen. Sie müssen es
auf Irgendwas stellen. C sucht sich einfach einen Wert. Beim nächsten Mal ist es vielleicht 98, auf einer anderen Maschine ist es vielleicht 123, was weiß ich. Wenn Sie es nicht angeben, ist das irgendein Wert. Kann einen nachher beißen. Aber lassen wir es erstmal so. x ist 40. So, der erste Test ist x kleiner gleich 15. x ist nicht kleiner gleich 15, denn x ist 40 und das ist größer
als 15. Das heißt, wenn ich jetzt hier sage, den nächsten Schritt, wo muss er hinspringen? Und wenn er jetzt nicht in das Else springt, dann haben wir offensichtlich irgendwas fürchterlich falsch gemacht oder falsch verstanden. Er springt zu dem Else und so gleich sofort in den ersten Befehl von dem
Else rein. So, x größer gleich 50. Ich prüfe, ob x größer gleich 50 ist. Nein, also wird er jetzt auch zu dem Else gehen und wahrscheinlich auch sofort in das Else gleich da rein springen. Zack, da unten rein. Das hier nervt eigentlich. Und jetzt kommt meine grandiose Formel und ich würde jetzt erwarten, dass das irgendein Wert zwischen 13 und 42 ist.
Wenn Sie es angucken, 13, 42, hier bei 40. Na ja, was weiß ich, 35 oder so. Sollte da rauskommen. Spannung? 13. Ups, dabei habe ich doch alles
richtig gemacht und Sie haben alle aufgepasst. Wesentliche Geschichte, die ich noch erzählen muss. Die Rechnung hier, die Rechnung hier ist in ganzen Zahlen. Und dieser Chip hier kann auch nur ganze Zahlen. Die größeren Rechner können auch Gleitkommazahlen, also wenn Sie ja einen BC und so weiter dann aufschrauben, haben Sie einen Prozessor, der tatsächlich auch Gleitkommazahlen arbeiten kann. Solange ich das hier schreibe auf den
großen Rechner nur mit int, alles nur ganze Zahlen, rechnet die in ganzen Zahlen. Und Sie ahnen, was 29 durch 35 in ganzen Zahlen ist? Das ist ein ganz beliebter Fehler bei C und den ganzen Nachvorgesprachen. Ganz
beliebter Fehler, deshalb fühle ich es so weit vorne vor. Sie könnten meinen, dass hier jetzt was Vernünftiges rauskommt, aber das ist eine ganze Zahl. 29, 35 ist eine ganze Zahl. Er rechnet ganze Zahl durch ganze Zahl und das heißt, ohne Nachkommastellen, es kommt Null raus. 29 durch 35 ist nicht aufgerundet, eins für ihn, sondern es ist Null.
Vorsicht, das beißt einem ganz häufig. Sehen Sie eine Chance, das zu retten? Wie kann ich das hier anders rechnen, dass jetzt nicht ständig 13 rauskommt? 13 plus Null mal irgendwas. Wie kann ich das hier retten? Also man fragt sich einfach, wie kann ich das hier jetzt mathematisch umformen? Müsste mit
Gleitkommazahlen, normalen Zahlen, dasselbe rauskriegen, habe aber mehr Luft, dass es hier nicht 29 durch 35 gleich Null gibt. Man muss sich überlegen, ich teile zum Schluss erst, ich rechne erst das große Produkt aus und teile erst zum Schluss. Die 35 ziehe ich nach hinten, teile durch 35 erst später. Es sind immer noch 29, 35 mal x minus 15 aus mathematischer Sicht. Jetzt werde ich
aber durch das Runden nicht mehr so gebissen. 29 mal, das hier ist eine handfeste Zahl. 2, 3, 4, 5, 6, 7, 8 und wenn ich dann durch 35 teile, habe ich nicht mehr so viel Ärger. Das kann man doch ein bisschen weitertreiben. Hier oben müsste ich eigentlich noch die Hälfte von 35 addieren. Ich will es
nicht übertragen. Man kann mit ganzen Zahlen sehr viel machen. Man muss noch ein bisschen nachdenken. Der Vorteil ist, dass ganze Zahlen viel schneller zu verarbeiten sind, viel weniger Energieverbrauch beim Bearbeiten. Man versucht es alles mit ganzen Zahlen hinzukriegen, muss aber dafür einmal das Hirn anschalten. So soll es jetzt funktionieren.
Ich stoppe nochmal und dann gucken wir das Ergebnis an. Das kennen wir alles schon, was er da macht. So, y ist jetzt spannend.
33 und nicht mehr 13. Das sind so die kleinen Überraschungen, wenn man anfängt zu programmieren. Da ist sehr viel historieller drin.