lehrkraefte:snr:informatik:glf23:python:rekursion

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:snr:informatik:glf23:python:rekursion [2023/12/05 13:39]
Olaf Schnürer
lehrkraefte:snr:informatik:glf23:python:rekursion [2023/12/10 22:49] (current)
Olaf Schnürer [Link zur Kursseite]
Line 9: Line 9:
  
 <hidden Anweisung für Lehrer:> <hidden Anweisung für Lehrer:>
-Sukzessive die Funktionen ''baum0'', ''baum1'', ''baum2'', ''baum3'', ... schreiben und mit Skizzen erklären (wie setzt sich die Zeichnung von ''baum3'' aus den anderen "Bäumen" zusammen?). Idee, um das Schreiben "unendlich vieler" Funktionen zu vermeiden: Ersetze die Zahl im Funktionsnamen durch einen Parameter (etwa namens ''level'' oder ''jahr'') in einer neuen Funktion ''baum''.+Sukzessive die Funktionen ''baum0'', ''baum1'', ''baum2'', ''baum3'', ... schreiben und mit Skizzen erklären: Am Anfang Skizze eines "Baum3" und erklären, wie er sich aus drei "Baum2"en zusammensetzt etcetera (Selbstähnlichkeit erwähnen).  
 + 
 +Bei konzentrationsschwachen Klassen: Bevor die rekursive Funktion ''baum'' erklärt wird, die S in neuem Programm ''koch0'', ''koch1'', etcetera schreiben lassen. Dann ''baum'' erklären und die S ''koch'' schreiben lassen. 
 + 
 +Idee, um das Schreiben "unendlich vieler" Funktionen zu vermeiden: Ersetze die Zahl im Funktionsnamen durch einen Parameter (etwa namens ''level'') in einer neuen Funktion ''baum''Beim rekursiven Aufruf als Kommentar etwas dahinterschreiben wie ''# Selbstaufruf = rekursiver Aufruf der Funktion''
 + 
 Alle Funktionen haben die aktuelle Streckenlänge als Parameter ''a''. Eventuell zusätzlich den Winkel als Parameter übergeben (bei ''baum0'' wird er nicht verwendet).  Alle Funktionen haben die aktuelle Streckenlänge als Parameter ''a''. Eventuell zusätzlich den Winkel als Parameter übergeben (bei ''baum0'' wird er nicht verwendet). 
 +
 +Beim Programmieren Hotkeys erläutern: Markieren per Shift+Pfeiltasten, Einrücken von markiertem Block per Tab oder "Ausrücken" per Shift+Tab.
 +
 +Einige S schreiben schnell selbst ''baum3'', ''baum4'' etc. und fragen dann, wie man die Turtle schneller zeichnen lassen kann, so dass man ''tracer(0)'' und ''update()'' erklären kann (siehe Programm ganz unten auf dieser Seite; ''hideturtle()'' ist dann wohl unnötig). 
 </hidden> </hidden>
  
Line 66: Line 76:
  
 <WRAP center round todo> <WRAP center round todo>
-Schreibe eine rekursive Funktion ''kochkurve'', die je nach "Level" die folgenden Bilder zeichnet (alle Winkel sind entweder $60^\circ$ oder $120^\circ$; die Turtle soll jeweils links starten und rechts ihren Weg beenden, jeweils mit Blickrichtung nach rechts (und nicht wie beim "Baum" zum Ausgangspunkt zurückkehren); wenn man diese Kurve "unendlich genau" zeichnet, bekommt man die sogenannte [[https://de.wikipedia.org/wiki/Koch-Kurve|Koch-Kurve]]):+Schreibe eine rekursive Funktion ''kochkurve(level, a)'', die je nach "Level" die folgenden Bilder zeichnet (alle Winkel sind entweder $60^\circ$ oder $120^\circ$; die Turtle soll jeweils links starten und rechts ihren Weg beenden, jeweils mit Blickrichtung nach rechts (und nicht wie beim "Baum" zum Ausgangspunkt zurückkehren); ACHTUNG (machen erfahrungsgemäss viele sonst anders): Der Anfangspunkt der Turtle soll vom Endpunkt immer (unabhängig vom Level) dieselbe Distanz haben; wenn man diese Kurve "unendlich genau" zeichnet, bekommt man die sogenannte [[https://de.wikipedia.org/wiki/Koch-Kurve|Koch-Kurve]]):
  
 {{:lehrkraefte:snr:informatik:glf22:python:kochlinie-0.png?200|}} {{:lehrkraefte:snr:informatik:glf22:python:kochlinie-0.png?200|}}
Line 104: Line 114:
 </code> </code>
  
-Mit dieser Vorarbeit ist es nun einfach, eine Funktion ''schneeflocke'' zu definieren, die die sogenannte Kochsche Schneeflocke zeichnet:+Mit dieser Vorarbeit ist es nun einfach, eine Funktion ''schneeflocke'' zu definieren, die die sogenannte Kochsche Schneeflocke zeichnet (ersetze die drei Seiten eines gleichseitigen Dreiecks durch Koch-Kurven):
  
 {{:lehrkraefte:snr:informatik:glf22:python:kochflocke-5.png?400|}} {{:lehrkraefte:snr:informatik:glf22:python:kochflocke-5.png?400|}}
Line 113: Line 123:
  
 <WRAP center round todo> <WRAP center round todo>
-Schreibe eine rekursive Funktion ''pythagoras_baum'', die je nach "Level" die folgenden Bilder zeichnet:+Schreibe eine rekursive Funktion ''pythagoras_baum'', die je nach "Level" die folgenden Bilder zeichnet. Die Turtle startet jeweils links unten mit Blickrichtung nach rechts und endet rechts unten mit Blickrichtung nach rechts.
  
-{{:lehrkraefte:snr:informatik:glf23:python:pythagoras-innere_striche_true-tiefe_0.png?200|}} +{{:lehrkraefte:snr:informatik:glf23:python:pythagoras-innere_striche_true-tiefe_0.png?300|}} 
-{{:lehrkraefte:snr:informatik:glf23:python:pythagoras-innere_striche_true-tiefe_1.png?200|}} +{{:lehrkraefte:snr:informatik:glf23:python:pythagoras-innere_striche_true-tiefe_1.png?300|}} 
-{{:lehrkraefte:snr:informatik:glf23:python:pythagoras-innere_striche_true-tiefe_2.png?200|}} +{{:lehrkraefte:snr:informatik:glf23:python:pythagoras-innere_striche_true-tiefe_2.png?300|}} 
-{{:lehrkraefte:snr:informatik:glf23:python:pythagoras-innere_striche_true-tiefe_3.png?200|}} +{{:lehrkraefte:snr:informatik:glf23:python:pythagoras-innere_striche_true-tiefe_3.png?300|}} 
-{{:lehrkraefte:snr:informatik:glf23:python:pythagoras-innere_striche_true-tiefe_4.png?200|}} +{{:lehrkraefte:snr:informatik:glf23:python:pythagoras-innere_striche_true-tiefe_4.png?300|}} 
-{{:lehrkraefte:snr:informatik:glf23:python:pythagoras-innere_striche_true-tiefe_5.png?200|}} +{{:lehrkraefte:snr:informatik:glf23:python:pythagoras-innere_striche_true-tiefe_5.png?300|}} 
-{{:lehrkraefte:snr:informatik:glf23:python:pythagoras-innere_striche_true-tiefe_14.png?200|}}+{{:lehrkraefte:snr:informatik:glf23:python:pythagoras-innere_striche_true-tiefe_14.png?300|}}
  
 Hinweis: Die Bilder sind mit dem Winkel $\alpha = 35^\circ$ gemalt (übliche Bezeichnungen für rechtwinklige Dreiecke). Hinweis: Die Bilder sind mit dem Winkel $\alpha = 35^\circ$ gemalt (übliche Bezeichnungen für rechtwinklige Dreiecke).
Line 144: Line 154:
  
 $$\frac a{\sin \alpha} = \frac b{\sin \beta} = \frac c{\sin \gamma}$$ $$\frac a{\sin \alpha} = \frac b{\sin \beta} = \frac c{\sin \gamma}$$
 +
 +{{:lehrkraefte:snr:informatik:glf23:python:pseudopythagoras.png?400|}}
 +
 </WRAP> </WRAP>
  
Line 207: Line 220:
  
 </WRAP> </WRAP>
 +
 +===== gif-Datei aus Animation erstellen (zumindest unter Linux geht es so...) =====
 +
 +to be written down
 +
 +===== Weitere Programmierideen =====
  
 Vielleicht ganz nett, falls jemand Spass am Python-Programmieren bekommen hat: [[https://amankharwal.medium.com/130-python-projects-with-source-code-61f498591bb|190 Python projects]] Vielleicht ganz nett, falls jemand Spass am Python-Programmieren bekommen hat: [[https://amankharwal.medium.com/130-python-projects-with-source-code-61f498591bb|190 Python projects]]
 ====== Baum-Programm aus Lektion ====== ====== Baum-Programm aus Lektion ======
  
 +<code python baum.py>
 +from turtle import *
 +
 +def baum0(a):
 +    forward(a)
 +    backward(a)
 +
 +def baum1(a):
 +    forward(a)
 +    left(winkel)
 +    baum0(a/2)
 +    right(winkel)
 +    baum0(a/2)
 +    right(winkel)
 +    baum0(a/2)
 +    left(winkel)
 +    backward(a)
 +
 +def baum2(a):
 +    forward(a)
 +    left(winkel)
 +    baum1(a/2)
 +    right(winkel)
 +    baum1(a/2)
 +    right(winkel)
 +    baum1(a/2)
 +    left(winkel)
 +    backward(a)
 +
 +
 +def baum(level, a):
 +    if level == 0:
 +        forward(a)
 +        backward(a)
 +    else:
 +        forward(a)
 +        left(winkel)
 +        baum(level - 1, a/2)     # Selbstaufruf der Funktion
 +                                 # rekursive Funktion
 +                                 # recurrere = zurücklaufen
 +        right(winkel)
 +        baum(level - 1, a/2)
 +        right(winkel)
 +        baum(level - 1, a/2)
 +        left(winkel)
 +        backward(a)
 +
 +stammlaenge = 250
 +winkel = 30
 +tracer(0)
 +# hideturtle()
 +left(90)
 +backward(stammlaenge)
 +# baum2(stammlaenge)
 +baum(8, stammlaenge)
 +update()
 +exitonclick()
 +</code>
 +
 +<!--
 <code python baum.py> <code python baum.py>
 from turtle import * from turtle import *
Line 279: Line 358:
 # also nach allen Zeichenbefehlen, die Zeile ''update()''. # also nach allen Zeichenbefehlen, die Zeile ''update()''.
 </code> </code>
 +-->
  
 ===== Link zur Kursseite ===== ===== Link zur Kursseite =====
  
-[[lehrkraefte:snr:informatik:glf22|Zur Kursseite]]+[[lehrkraefte:snr:informatik:glf23|Zur Kursseite]]
  
  
  • lehrkraefte/snr/informatik/glf23/python/rekursion.1701779964.txt.gz
  • Last modified: 2023/12/05 13:39
  • by Olaf Schnürer