lehrkraefte:blc:informatik:glf20:programmieren:while

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:glf20:programmieren:while [2020/10/28 07:50]
mirco.triner
lehrkraefte:blc:informatik:glf20:programmieren:while [2020/10/30 13:21] (current)
mirco.triner
Line 14: Line 14:
 Kopieren, testen und verstehen Sie folgenden Code: Kopieren, testen und verstehen Sie folgenden Code:
 <code python> <code python>
-# Ganze Zahl einlesen +counter 0 
-zahl inputInt("Bitte eine Ganzzahl:") +while counter < 10: 
- +    print(counter
-# Der Abstand um das '>'-Zeichen ist optional +    counter += 1
-# 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> </code>
 </WRAP> </WRAP>
  
 <WRAP info> <WRAP info>
-Nach ''if'' folgt eine **Bedingung**, die ''True'' oder ''False'' ergibt. Bedingungen sind meist Vergleiche+Die folgenden Codeblöcke führen zum gleichen Ergebnis
-  * ''=='': Gleichheit. //Achtung: Das einfache ''='' ist eine Zuweisung und sollte im ''if'' nicht verwendet werden.// +<code> 
-  * ''!=''  Ungleichheit. +counter +1 
-  * ''<nowiki><</nowiki>'', ''<nowiki><=</nowiki>'', ''>='', ''>'': Kleiner, kleiner gleich, grösser gleich, grösser. +</code> 
-Bedingungen können negiert und verknüpft werden: +<code> 
-  * ''not'': Negation. Z.B. ist ''if a!=b:'' das Gleiche wie ''if not (a==b):'' +counter counter + 1 
-  * ''and'': Logisch und. Ergibt genau dann ''True''wenn beide Bedingungen ''True'' sindZ.B. ''if a==b and b==c:'' +</code> 
-  * ''or'': Logisch oder. Ergibt genau dann ''True''wenn eine der beiden oder beide Bedingungen wahr sindZ.B. ''if a==b or b==c:''+</WRAP
 + 
 +<WRAP alert> 
 +Bei einer While-Schleife kann es leicht passierendass die Schleife endlos weiterläuftIm Gegensatz zu einer For-Schleife muss die Variable bei einer While-Schleife manuell verändert werdenSpeichern Sie deshalb Ihr Programmbevor Sie es ausführen.
 </WRAP> </WRAP>
  
 <WRAP todo> <WRAP todo>
-True oder False? Bei den letzen beiden Aufgaben **nicht rechnen**sondern überlegen! +Schreiben Sie nun ein Programmwelches einen Bankautomat simuliert. Der Bankautomat versucht die Anzahl von Noten möglichst gering zu halten. Möchte der Kunde 250.-dann wird der Automat 1x 200.- und 1x 50.- ausgeben. 
-<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> +*  TIPP: Benutzen Sie <code>//</code> (ganzzahlige Divisionum herauszufinden, wie oft eine Note ausgegeben werden soll. Mit <code>%</code(Modulo) können Sie dann den Rest berechnen, welcher dann mit einer tieferen Note ausgegeben wird.
-    <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>
  
 <WRAP info> <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.  +Zufallszahl - Python kann selbständig eine Zufallszahl generieren 
-<code python+<code> 
-+from random import * 
-if a<3: +randint(1100
-  print("a ist kleiner als 3") +print x
-else: +
-  print("a ist nicht kleiner als 3"  +
-</code> +
-Es ist auch möglichmit ''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> </code>
 +Der oben aufgeführte Code gibt eine ganze Zahl zwischen 1 und 100 aus.
 </WRAP> </WRAP>
- 
  
 <WRAP todo> <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.+Schreiben Sie ein Programm, bei welchem der Benutzer eine zufällige Zahl zwischen 1 und 100 erraten muss.
  
 Beispiel einer Ausgabe Beispiel einer Ausgabe
 <code text> <code text>
--8°C ist kalt.+Neue Zahl: 15 
 +Zahl zu gross 
 +Neue Zahl:
 </code> </code>
 </WRAP> </WRAP>
Line 82: Line 64:
  
 <WRAP todo> <WRAP todo>
-Schreiben die ein Programm, das die allgemeine lineare Gleichung $ax + b = 0$ löstDas Programm soll die Koeffizienten $a$ und $b$ einlesen und die Lösung ausgeben. Behandeln Sie auch den Spezialfall, wenn $a=0$ ist.+Nun drehen wir den Spiess um. Schreiben Sie ein Programm, welches eine zufällige Zahl zu finden versuchtVersuchen Sie einen möglichst effizienten Algorithmus zu finden.
 </WRAP> </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. +===== Lösungsvorschläge ===== 
- +<hidden Lösungvorschläge>
-Starten Sie Ihr Programm wie folgt:+
 <code python> <code python>
-Definition der Koeffizienten in einer Zeile, durch Kommas getrennt. +#Bankautomat
-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 +print("Guten Tag") 
-Genau eine Lösung x=-1.000000+cash inputInt("Welcher Betrag soll ausbezahlt werden?")
  
-Gleichung 1.00x^2+2.00x+3.00 = 0 +while cash > 0: 
-Keine reelle Lösung+    if cash//1000 > 0: 
 +        print("%d x 1000.-" % (cash//1000)) 
 +        cash = cash%1000 
 +    elif cash//200 > 0: 
 +        print("%d x 200.-" % (cash//200)) 
 +        cash = cash%200 
 +    elif cash//100 > 0: 
 +        print("%d x 100.-" % (cash//100)) 
 +        cash cash%100 
 +    elif cash//50 > 0: 
 +        print("%d x 50.-" % (cash//50)) 
 +        cash = cash%50 
 +    elif cash//20 > 0: 
 +        print("%d x 20.-" % (cash//20)) 
 +        cash = cash%20 
 +    elif cash//10 > 0: 
 +        print("%d x 10.-" % (cash//10)) 
 +        cash = cash%10 
 +    else: 
 +        print("und noch ein wenig Münz"
 +        cash = 0
  
-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> </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> <code python>
-for i in range(1,101): +from random import * 
-    if i % 3 == 0  and  i % 5 == 0+to_be_guessed = randint(1, 100
-        print("fizz buzz") +guess = 0 
-    elif i % 3 == 0: +while guess !to_be_guessed
-        print("fizz") +    guess = input("Neue Zahl: ") 
-    elif i % 5 == 0+    if guess > 0: 
-        print("buzz")+        if guess > to_be_guessed: 
 +            print "Zahl zu gross
 +        elif guess < to_be_guessed
 +            print "Zahl zu klein"
     else:     else:
-        print(i) +        print "Schade, Sie geben also auf!
-</code> +        break
- +
-<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: else:
-    text += "heiss" +    print "Glückwunsch! Das war's!"
- +
-print(text+".")+
 </code> </code>
  
 <code python> <code python>
-Definition der Koeffizienten +#Zahl zwischen 1-100 
-a,b,c 0,0,0 +to_be_guessed input("Neue Zahl: ") 
-print("Gleichung %.2fx^2%+.2fx%+.2f = 0% (a,b,c))+guess = 50 
 +counter = 1
  
-if a==0 # Lineare Gleichung +while guess !to_be_guessed
-    if b==0 # Gleichung ohne x +    if(guess > to_be_guessed)
-        if c==0: +        guess //2
-            print("Wahre Aussage, L=R, jedes x ist Lösung"+
-        else: +
-            print("Falsche Aussage, keine Lösung")+
     else:     else:
-        print("Lineare Gleichung, eine Lösung: x=%f" % (-c/b)+        if((to_be_guessed guess% 2 == 1): 
-else: # Quadratische Gleichung +            guess +1 
-    d b*b-4*a*c  # Diskriminante +        else: 
-    if (d<0): +            guess += ((to_be_guessed guess) /2) 
-        print("Keine reelle Lösung"+    print("Round: %d, Guess %d" % (counterguess)) 
-    elif d==0: +    counter += 1 
-        print("Genau eine Lösung x=%f" % (-b/(2*a))) + 
-    else: +print(to_be_guessed) 
-        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" % (x1x2))+
 </code> </code>
 </hidden> </hidden>
  • lehrkraefte/blc/informatik/glf20/programmieren/while.1603867834.txt.gz
  • Last modified: 2020/10/28 07:50
  • by mirco.triner