Musterlösungen
Musterlösungen (Lokal gespeichert unter homepage_rainer_ch/informatik_1_klaessler)
Springe zur Musterlösung ...- ... Teil 1: Einführung
- ... Teil 2: Unterprogramme
- ... Teil 3: Variablen und Kreise
- ... Teil 4: Selektion und Zufallszahlen
- ... Teil 5: Ein Glüksspiel programmieren
- ... Teil 6: Rekursion
- ... Teil /: Zwischendurch ...
Die Musterlösungen werden noch aufgeschaltet. Und wer Source-Code lesen kann soll belohnt werden.
_____________________________________________________________________________________________
Hausaufgaben, 1. Doppelstunde:
- Aufgabe 1.1: Schreibe ein Programm unter Verwendung des Befehls repeat, welches
folgende Treppe zeichnet.
Lösung:
Häufigster Fehler: nach der repeat-Anweisung müssen die zu wiederholenden Befehle eindeutig eingerückt sein.
- Aufgabe 1.2: Welche Figur wird von folgendem Programm gezeichnet?
Lösung:
- Zum Anfang der Seite
_____________________________________________________________________________________________
Hausaufgaben, 2. Doppellektion: Unterprogramme, Repetition diverse Befehle inklusive repeat
- Aufgabe 2.1:
Lösung:
- Aufgabe 2.2:
Lösung:
- Zum Anfang der Seite
_____________________________________________________________________________________________
Hausaufgaben, 3. Doppellektion: Repetition, Variablen, Kreis zeichnen
- Aufgabe 3.1: Was zeichnet folgendes Programm?
Lösung:
- Aufgabe 3.2: Welchen Wert hat die Variable s am Schluss?
Lösung: s hat den Schlusswert 15
- Aufgabe 3.3: Finde die Fehler.
Lösung:
- Zum Anfang der Seite
_____________________________________________________________________________________________
Hausaufgaben, 4. Doppellektion: Selektion und Zufall
- Häufige Fehler 4.1:
- '=' anstelle '=='
- wenn '!=' verwendet wird, so müssen alle auszuschliessenden Zahlen mit 'AND' verknüpft werden
- beim Konstrukt if zahl in .... folgen geschweifte Klammern '{}' und nicht runde Klammern '()'
- mehrere Lösungen für das gleiche Problem, z.B. Strich links unten nach links mitte:
- if zahl in {0,2.6,8} oder
- if zahl == 0 or zahl == 2 or zahl == 6 or zahl == 8 oder
- if zahl != 1 and zahl != 3 and zahl != 4 and zahl != 5 and zahl != 7 and zahl != 9 - Aufgabe 4.2:
- random()*2 ............. liefert Zahlen zwischen 0 und 2
- random()*2 + 1 ............. liefert Zahlen zwischen 1 und 3
- (random()+1)*3 ............. liefert Zahlen zwischen 3 und 6
- random()*2-1 ............. liefert Zahlen zwischen -1 ('0-1') und 1 ('2-1')
- random()*50 + 50 sowie (random()+1)*50 ......... liefert Zahlen zwischen 50 und 100
- random()*(b-a)+a ......... liefert Zahlen zwischen a und b
- Hinweis: raindint(a,b) .... liefert ganze Zahlen !
- Hinweis: random(-1,1) ... liefert nicht das erwünschte Resultat (Zufallszahlen zwischen -1 und + 1). Die Angabe der Argumente an die Funktion selbst geht nur bei randint(), z.B. randint(1,6)
- Zum Anfang der Seite
_____________________________________________________________________________________________
Hausaufgaben, 5. Doppellektion: Glücksspiel
- a) 200+150+100+50 = 500
- b) 150 + 100 + 50 = 300
- c) bleibt in der zweiten while-Schleifen für immer (oder zumindest bis zum nächsten Stromunterbruch) hängen, die Länge des Striches wird somit immer grösser, strebt gegen Unendlich
- d) auch hier ... die Bedingung in der zweiten while-Schleife ist immer wahr ... gleich wie c, die Länge des Striches wird somit immer grösser, strebt gegen Unendlich
- Zum Anfang der Seite
_____________________________________________________________________________________________
Hausaufgaben, 6. Doppellektion: Rekursion
- Lösung:
- Zum Anfang der Seite
_____________________________________________________________________________________________
_____________________________________________________________________________________________
für Zwischendurch ...
from gturtle import * from random import randint makeTurtle() # Idee: Gegeben ist ein gleichseitiges Dreieck. # Ecke oben : A, links B, rechts C. Aktuell so, dass C im Ursprung 0/0 # 1. Es wird nun eine der drei Ecken zufällig gewählt und # die halbe Strecke von P bis zur gewählten Ecke gezeichnet. # 2. Der Endpunkt der 'gezeichneten' Strecke heisse nun wieder P. Dort einen Dot machen # 3. Wiederhole ab 1., bis die gewählte Anzahl Strecken 'gezeichnet' sind. hideTurtle() seite=300 lt(30) a_x = 0 ; a_y = 0 ; b_x = 0 ; b_y = 0 ; c_x = 0 ; c_y = 0 # # zeichnet Dreieck, speichert die Position der Ecken. ACHTUNG: diese # Variabeln müssen global sein ! 'In Python hat jeder Befehl seine lokalen Variabeln' # def zeichne_dreieck(seite): global a_x ; global a_y; global b_x ; global b_y; global c_x ; global c_y fd(seite) lt(120) a_x = getX() ; a_y = getY() fd(seite) ; lt(120) b_x = getX() ; b_y = getY() fd(seite) ; lt(120) c_x = getX() ; c_y = getY() zeichne_dreieck(seite) # print "a_x = ", a_x, " a_y = ", a_y # print "b_x = ", b_x, " b_y = ", b_y # print "c_x = ", c_x, " c_y = ", c_y penUp() ## nur Punkte machen !! print " ich beginne nun mal zu zeichnen ... " repeat 12345: # aktuelle Position speichern ... könnte auch direkt gemacht werden, 'übersichtlicher' aktuell_x = getX() # ; print "aktuell_x = ", aktuell_x aktuell_y = getY() # ; print "aktuell_y = ", aktuell_y # wähle zufällig Zahl 1-3 ... 1: Ecke A, 2: Ecke B, 3: Ecke C z=randint(1,3) if z == 1 : ziel_x = a_x ; ziel_y = a_y if z == 2 : ziel_x = b_x ; ziel_y = b_y if z == 3 : ziel_x = c_x ; ziel_y = c_y # print " ziel ... x = ", ziel_x, " .. y = ", ziel_y # print " " # Bewege dich zum ziel, aber nur Hälfte x, Hälfte y moveTo((ziel_x+aktuell_x)/2, (ziel_y+aktuell_y)/2) dot(3) print " fertig ... cool, gelle ?! "Zum Anfang der Seite