lehrkraefte:blc:informatik:glf20:programmieren:selektion

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
lehrkraefte:blc:informatik:glf20:programmieren:selektion [2020/09/29 08:58]
Ivo Blöchliger created
lehrkraefte:blc:informatik:glf20:programmieren:selektion [2020/10/23 11:35] (current)
Ivo Blöchliger
Line 1: Line 1:
 ====== Selektion: if, if/else, if/elif/else ====== ====== Selektion: if, if/else, if/elif/else ======
  
 +Programme sollen auf unterschiedliche Eingaben oder Zustände unterschiedliche reagieren können. Dies wird mit ''if'' und Konsorten erreicht.
 +
 +<WRAP todo>
 +Kopieren, testen und verstehen Sie folgenden Code:
 +<code python>
 +# Ganze Zahl einlesen
 +zahl = inputInt("Bitte eine Ganzzahl:")
 +
 +# Der Abstand um das '>'-Zeichen ist optional
 +# Der Doppelpunkt am Ende der if-Zeile muss stehen
 +# Danach wird der Code eingerückt.
 +if zahl > 10:
 +  print("Ihre Zahl ist grösser als 10")
 +  print("Wird nur ausgegeben, wenn die Zahl grösser als 10 ist...")
 +print("Das wird immer ausgegeben, weil nicht mehr eingerückt und damit nicht mehr im 'if' drin.")
 +</code>
 +</WRAP>
 +
 +<WRAP info>
 +Nach ''if'' folgt eine **Bedingung**, die ''True'' oder ''False'' ergibt. Bedingungen sind meist Vergleiche:
 +  * ''=='': Gleichheit. //Achtung: Das einfache ''='' ist eine Zuweisung und sollte im ''if'' nicht verwendet werden.//
 +  * ''!=''  Ungleichheit.
 +  * ''<nowiki><</nowiki>'', ''<nowiki><=</nowiki>'', ''>='', ''>'': Kleiner, kleiner gleich, grösser gleich, grösser.
 +Bedingungen können negiert und verknüpft werden:
 +  * ''not'': Negation. Z.B. ist ''if a!=b:'' das Gleiche wie ''if not (a==b):''
 +  * ''and'': Logisch und. Ergibt genau dann ''True'', wenn beide Bedingungen ''True'' sind. Z.B. ''if a==b and b==c:''
 +  * ''or'': Logisch oder. Ergibt genau dann ''True'', wenn eine der beiden oder beide Bedingungen wahr sind. Z.B. ''if a==b or b==c:''
 +</WRAP>
 +
 +<WRAP todo>
 +True oder False? Bei den letzen beiden Aufgaben **nicht rechnen**, sondern überlegen!
 +<quizlib id="quiz" rightanswers="[['a1'], ['a0'], ['a1'], ['a1'], ['a0']]" submit="Check Answers">
 +    <question title="&lt;pre&gt;2>3&lt;/pre&gt;" type="radio">True|False</question>
 +    <question title="&lt;pre&gt;7>9 or 9>7&lt;/pre&gt;" type="radio">True|False</question>
 +    <question title="&lt;pre&gt;not(True and (False or True))&lt;/pre&gt;" type="radio">True|False</question>
 +    <question title="&lt;pre&gt;234*345&lt;321*251 and False&lt;/pre&gt;" type="radio">True|False</question>
 +    <question title="&lt;pre&gt;1234*4321&lt;2468*2160 or True&lt;/pre&gt;" type="radio">True|False</question>
 +</quizlib>
 +</WRAP>
 +
 +<WRAP info>
 +Mit ''else'' kann ein Code-Block begonnen werden, der ausgeführt wird, wenn das vorhergehende Code-Block im ''if'' nicht ausgeführt wurde. 
 +<code python>
 +a = 4
 +if a<3:
 +  print("a ist kleiner als 3")
 +else:
 +  print("a ist nicht kleiner als 3")  
 +</code>
 +Es ist auch möglich, mit ''elif'' noch weitere Bedingungen zu testen und ein ''else'' am Schluss anzufügen, das ausgeführt wird, wenn alle vorhergehenden Bedingungen falsch waren.
 +<code python>
 +name = "Python"
 +if name=="Python":
 +  print("Hallo Schlange!")
 +elif name=="Monty":
 +  print("Da fehlt doch Python!")
 +else:
 +  print("No comment")
 +</code>
 +</WRAP>
 +
 +
 +<WRAP todo>
 +Schreiben Sie ein Programm, das eine Aussentemperatur einliest und dann die Temperatur in Worten ausgibt, z.B. "kalt", "warm", "heiss" oder mehr Abstufungen.
 +
 +Beispiel einer Ausgabe
 +<code text>
 +-8°C ist kalt.
 +</code>
 +</WRAP>
 +
 +
 +<WRAP todo>
 +Schreiben die ein Programm, das die allgemeine lineare Gleichung $ax + b = 0$ löst. Das Programm soll die Koeffizienten $a$ und $b$ einlesen und die Lösung ausgeben. Behandeln Sie auch den Spezialfall, wenn $a=0$ ist.
 +</WRAP>
 +
 +<hidden Aufgabe, wenn die Lösung der quadratischen Gleichung schon behandelt wurde>
 +<WRAP todo>
 +Schreiben Sie ein Programm, das die quadratische Gleichung $ax^2+bx+c=0$ löst. Die Koeffizienten $a$, $b$ und $c$ sollen am Anfang direkt im Programmcode definiert werden.
 +
 +Unterscheiden Sie dazu die unterschiedlichen Fälle, die auftreten können und melden Sie die Anzahl der Lösungen und die Lösungen selbst.
 +
 +Starten Sie Ihr Programm wie folgt:
 +<code python>
 +# Definition der Koeffizienten in einer Zeile, durch Kommas getrennt.
 +a,b,c = 4,2,-3
 +print("Gleichung %.2fx^2%+.2fx%+.2f = 0" % (a,b,c))  # %+f fügt auf jeden Fall ein Vorzeichen hinzu (+ oder -).
 +</code>
 +Beispiel-Ausgaben:
 +<code text>
 +Gleichung 4.00x^2+2.00x-3.00 = 0
 +Zwei Lösungen x1=-1.151388 und x2=0.651388
 +
 +Gleichung 1.00x^2+2.00x+1.00 = 0
 +Genau eine Lösung x=-1.000000
 +
 +Gleichung 1.00x^2+2.00x+3.00 = 0
 +Keine reelle Lösung
 +
 +Gleichung 0.00x^2+1.00x+2.00 = 0
 +Lineare Gleichung, eine Lösung: x=-2.000000
 +
 +Gleichung 0.00x^2+0.00x+1.00 = 0
 +Falsche Aussage, keine Lösung
 +
 +Gleichung 0.00x^2+0.00x+0.00 = 0
 +Wahre Aussage, L=R, jedes x ist Lösung
 +</code>
 +</WRAP>
 +</hidden>
 +
 +<WRAP info>
 +Der **Modulo-Operator** ''%'' haben wir bereits bei Strings für die formatierte Ausgabe angetroffen.
 +
 +Werden Zahlen mit ''%'' verknüpft, erhält man den Rest der Division. Z.B.
 +  * ''12 % 5'' ergibt 2 (weil der Rest 2 bei der Division von 10 durch 5 bleibt).
 +  * ''14 % 2'' ergibt 0 (weil die Division von 14 durch 2 aufgeht).
 +  * ''if a % 7 == 0:''  Überprüft, ob a durch 7 teilbar ist (d.h. den Rest 0 ergibt).
 +</WRAP>
 +
 +<WRAP todo>
 +**FIZZ BUZZ!** Programmieren Sie ein Programm, das alle Zahlen von 1 bis 100 ausgibt, aber alle jene, die durch 3 teilbar sind durch ''fizz'' ersetzt, jene, die durch 5 teilbar sind durch ''buzz'' ersetzt und jene, die sowohl durch 3 als auch durch 5 teilbar sind durch ''fizz buzz'' ersetzt.
 +<hidden Verlangte Ausgabe bis 30>
 +<code text>
 +1
 +2
 +fizz
 +4
 +buzz
 +fizz
 +7
 +8
 +fizz
 +buzz
 +11
 +fizz
 +13
 +14
 +fizz buzz
 +16
 +17
 +fizz
 +19
 +buzz
 +fizz
 +22
 +23
 +fizz
 +buzz
 +26
 +fizz
 +28
 +29
 +fizz buzz
 +</code>
 +</hidden>
 +</WRAP>
 +
 +===== Optionale, weitere Aufgaben =====
 +  * Geben Sie alle Teiler einer Zahl aus.
 +  * Geben Sie die Primfaktorzerlegung einer Zahl aus.
 +  * Bestimmen Sie, ob eine gegebene Zahl eine Primazahl ist oder nicht.
 +  * Geben Sie die Primzahlen der Reihe nach aufsteigend aus.
 +
 +===== Lösungsvorschläge =====
 +<hidden Lösungvorschläge>
 +<code python>
 +for i in range(1,101):
 +    if i % 3 == 0  and  i % 5 == 0:
 +        print("fizz buzz")
 +    elif i % 3 == 0:
 +        print("fizz")
 +    elif i % 5 == 0:
 +        print("buzz")
 +    else:
 +        print(i)
 +</code>
 +
 +<code python>
 +t = inputInt("Temperatur in Grad Celsius")
 +text  =  "%d°C ist " % t
 +if (t<15):    
 +    text += "kalt"   # eine Abkürzung für text = text + "kalt"
 +elif t<25:
 +    text += "warm"
 +else:
 +    text += "heiss"
 +
 +print(text+".")
 +</code>
 +
 +<code python>
 +# Definition der Koeffizienten
 +a,b,c = 0,0,0
 +print("Gleichung %.2fx^2%+.2fx%+.2f = 0" % (a,b,c))
 +
 +if a==0:  # Lineare Gleichung
 +    if b==0:  # Gleichung ohne x
 +        if c==0:
 +            print("Wahre Aussage, L=R, jedes x ist Lösung")
 +        else:
 +            print("Falsche Aussage, keine Lösung")
 +    else:
 +        print("Lineare Gleichung, eine Lösung: x=%f" % (-c/b))
 +else: # Quadratische Gleichung
 +    d = b*b-4*a*c  # Diskriminante
 +    if (d<0):
 +        print("Keine reelle Lösung")
 +    elif d==0:
 +        print("Genau eine Lösung x=%f" % (-b/(2*a)))
 +    else:
 +        d = d**0.5 # Wurzel aus der Diskriminante
 +        x1 = (-b-d)/(2*a)
 +        x2 = (-b+d)/(2*a)
 +        print("Zwei Lösungen x1=%f und x2=%f" % (x1, x2))
 +</code>
 +</hidden>
  • lehrkraefte/blc/informatik/glf20/programmieren/selektion.1601362685.txt.gz
  • Last modified: 2020/09/29 08:58
  • by Ivo Blöchliger