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