~~NOTOC~~
====== Algorithmen und erste Schritte in Python (und Tigerjython) ======
Einzel- oder Partnerarbeit:
Bearbeite die Aufgabe **Haus vom Nikolaus** auf dem {{ :lehrkraefte:snr:informatik:bruehl-2022:aufgabe-haus-vom-nikolaus.pdf |Arbeitsblatt (pdf)}}.
===== Algorithmen =====
Der Begriff **Algorithmus** meint einfach eine Folge von Anweisungen, also eine Handlungsvorschrift.
Die Anweisungsfolge zum Zeichnen des Hauses vom Nikolaus ist ein Beispiel eines Algorithmus.
Überlege dir weitere Beispiele, bevor du
* Rezepte: Wie kocht man Spaghetti mit Tomatensosse? Wie bäckt man einen Schokoladenkuchen?
* Bastelanleitungen: Wie baut man einen Schrank? Wie strickt man einen Pullover? Wie näht man ein Kleid?
* Wegbeschreibungen: Wie geht es hier zum Bahnhof?
* Behandlungsanweisungen: Wie operiert man einen Bänderriss im Knie?
* Problemlösungen: Wie löst man Rubiks [[https://de.wikipedia.org/wiki/Zauberw%C3%BCrfel|Zauberwürfel]]?
==== Flussdiagramm ====
Algorithmen kann man durch sogenannte **Flussdiagramme** veranschaulichen:
{{:lehrkraefte:snr:informatik:bruehl-2022:kuchen-flowchart-mit-funktion.png?400|}}
In der Informatik meint man mit Algorithmen Handlungsanweisungen, die man einem Computer beibringen kann.
Der Name //Algorithmus// kommt übrigens von dem persischen Gelehrten [[https://de.wikipedia.org/wiki/Al-Chwarizmi|Al-Chwarizmi]], der um 800 in Bagdad gelehrt hat.
===== Grober Überblick über die Themen bis Ostern =====
Das Diagramm links illustriert grob, womit wir uns beschäftigen: Wir wollen lernen, wie man mit der Programmiersprache Python Computer-Programme schreibt und so dem Computer beibringt, Algorithmen auszuführen.
In den nächsten Lektionen werden wir die farbig hinterlegten Konstrollstrukturen in Python kennenlernen: In unserem Kuchenback-Programm sind die entsprechenden Strukturen farbig markiert und vermitteln so hoffentlich einen ersten Eindruck.
{{:lehrkraefte:snr:informatik:bruehl-2022:advance-organizer-plus-flowchart.png?1400|}}
===== Erste Schritte in Tigerjython =====
Wir lernen die Programmiersprache [[https://de.wikipedia.org/wiki/Python_(Programmiersprache)|Python]]((oder genauer einen Dialekt davon, nämlich Jython, erweitert um die ''repeat''-Struktur, wenn ich es recht verstehe)) bzw. genauer deren Variante Tigerjython kennen.
Programmieren schreiben wir in der IDE **Tigerjython**. Eine IDE ist ein Editor mit Zusatzfunktionen, etwa zum Starten des Programms oder zum Debuggen, d. h. zur Fehlersuche. IDE bedeutet Integrated Development Environment, also Integrierte Entwicklungsumgebung.
* Installiere Tigerjython von [[https://www.tigerjython.ch/de|hier]].
* Öffne Tigerjython.
Ich gebe erste Erklärungen: Editor (kopieren wie üblich), abspeichern.
Nimm deine Lösung der Haus-vom-Nikolaus-Aufgabe.
Übersetze deine Befehle der Reihe nach wie folgt in Python und schreibe sie in den Editor (jeder neue Befehl kommt in eine neue Zeile, ohne Leerzeichen am Zeilenbeginn):
* Der Befehl ''Gehe 100 Meter vorwärts.'' wird zu ''forward(100)'' (und analog für andere Längenangaben). Achtung: Statt 141,1 muss man 141.1 schreiben, also Punkt statt Komma.
* Der Befehl ''Drehe dich um 90 Grad nach rechts.'' wird zu ''right(90)'' (und analog für andere Winkel).
* Der Befehl ''Drehe dich um 135 Grad nach links.'' wird zu ''left(135)'' (und analog für andere Winkel).
Schreibe die folgenden beiden Zeilen ganz am Anfang in deinen Editor:
from gturtle import *
makeTurtle()
Lass das Programm laufen (Button mit dem grünen Dreieck).
Sobald es fehlerfrei läuft, speichere es unter einem geeigneten Namen ab. (Erläuterungen zur Fehlersuche gebe ich gleich.)
* Wähle vernünftige Fensteranordnung auf Bildschirm: Etwa Tigerjython-Editor rechte Bildschirmhälfte, wenn das Zeichenfenster links aufgeht.
* Ihr dürft euch gerne gegenseitig helfen. Mein Tipp: **Selbst tippen bzw. Maus verwenden** - dann lernt man deutlich mehr, als wenn jemand anderes alles erledigt.
* Erklärung, wie man ein Programm schrittweise ablaufen lassen kann.
{{ :lehrkraefte:snr:informatik:bruehl-2022:turtle-befehle-per-nikolaus.py |Hier}} ist ein relativ langes Python-Programm verlinkt.
Öffne es in deinem Editor (per Copy-and-Paste oder per Abspeichern auf deinem Rechner und dann Datei -> Öffnen im Menü des Editors).
Lass das Programm (schrittweise) laufen und lerne so die folgenden neuen Befehle kennen:
* ''penWidth(10)''
* ''setPenColor("red")''
* ''hideTurtle()'' und ''showTurtle()'' und ''speed(2000)''
* ''penUp()'' und ''penDown()''
* ''backward(100)''
* ''home()''
* ''dot(10)'' und ''openDot(20)''
* die ''repeat''-Struktur zum Wiederholen
Du darfst gerne Herumspielen: Teile des Programms löschen, Zahlen verändern etc.! So lernt man viel!
Zum leichteren Erinnern von Befehlen wie ''makeTurtle'', ''penWidth'', ''setPenColor'', ''hideTurtle'' etc.: Die Befehle starten stets mit einem Kleinbuchstaben und jedes "neue Wort" beginnt dann mit einem Grossbuchstaben.
Freiwillig: Wenn jemand eigenständig mehr Turtle-Befehle lernen will: [[https://programmierkonzepte.ch/index.php?inhalt_links=navigation.inc.php&inhalt_mitte=turtle/turtledoc.html|Dokumentation Turtle-Grafik in einem Tutorial]].
**Hausaufgabe (die eventuell schon während der Lektion erledigt werden kann)**
Schreibe ein Programm, das eine **schöne** Zeichnung deiner Wahl erstellt. Das Programm muss die folgenden Bedingungen erfüllen:
* Mindestens zwei verschiedene Farben werden verwendet (''setPenColor(...)'').
* Mindestens zwei verschiedene Strichbreiten werden verwendet (''penWidth(...)'').
* Der Zeichenstift wird mindestens einmal angehoben - die Zeichnung kann also nicht ohne Absetzen gezeichnet werden (''penUp()'' und ''penDown'').
* Gerne sehe ich es, wenn mindestens eine ''repeat''-Struktur verwendet wird.
* Das Programm unterscheidet sich deutlich von deinem Haus-vom-Nikolaus-Programm und von dem obigen Beispielprogramm. Du darfst aber dein Haus-vom-Nikolaus-Programm ausbauen (Wolken, Bäume, Segelboot, ...).
* Hoffentlich selbstverständlich: Das Programm ist nicht aus dem Internet kopiert.
Abgabe bis **spätestens Sonntagabend 23:59 Uhr** vor der nächsten Doppellektion über den folgenden Link:
* [[https://bldsg-my.sharepoint.com/:f:/g/personal/olaf_schnuerer_ksbg_ch/EvX4Uvg1qLdJtcm2uyFcrWEBbH4sULzkcsaL6BRI85WfEg|Klasse 1AFGsK]]
* [[https://bldsg-my.sharepoint.com/:f:/g/personal/olaf_schnuerer_ksbg_ch/EhrKL4Us3QBKnXoIchxICBIBNGk-5uoamJ2X9wK8cViSjA|Klasse 1CFP]]
Falls jemand eine Zeichenidee benötigt:
* irgendeine "Kinderzeichnung" - mit dickem Stift kann man auch leicht gefüllte Flächen zeichnen
* irgendeine abstrakte Zeichnung, beispielsweise [[https://de.wikipedia.org/wiki/Piet_Mondrian#/media/Datei:Piet_Mondriaan,_1921_-_Composition_en_rouge,_jaune,_bleu_et_noir.jpg|Bild von Mondrian]]
* Drahtmodell eines Würfels
* [[https://de.wikipedia.org/wiki/Koch-Kurve|Koch-Kurve]]
* eine der Aufgaben am Ende [[https://programmierkonzepte.ch/index.php?inhalt_links=navigation.inc.php&inhalt_mitte=turtle/farben.inc.php|dieser Seite]] oder von einer anderen Seite dieses Tutorials
===== Lösungsvorschläge =====
from gturtle import *
makeTurtle()
right(90)
forward(50)
left(90)
forward(100)
right(45)
forward(70.7)
right(90)
forward(70.7)
right(135)
forward(100)
left(135)
forward(141.4)
left(135)
forward(100)
left(135)
forward(141.4)
left(135)
forward(150)
left(90)
===== Link zur Kursseite =====
[[lehrkraefte:snr:informatik:bruehl-2022:|Zur Kursseite]]