Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:snr:informatik:bruehl-2022:funktionen [2022/03/28 08:02] – [Lösungsvorschläge] Olaf Schnürer | lehrkraefte:snr:informatik:bruehl-2022:funktionen [2022/04/02 11:23] (current) – [Zusammenfassung] Olaf Schnürer | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ~~NOTOC~~ | ||
| + | |||
| + | ====== Funktionen ====== | ||
| + | |||
| + | Besprechung der Hausaufgaben | ||
| + | |||
| + | ===== Lernziele heute ===== | ||
| + | |||
| + | * Funktionen oder: Wie man grössere Programm übersichtlich gestaltet: modularer Entwurf, Baukastenprinzip. | ||
| + | |||
| + | ===== Aufgabe 1 ===== | ||
| + | |||
| + | <WRAP center round todo 100%> | ||
| + | **Gemeinsam an Tafel** | ||
| + | |||
| + | Wenn man ein Haus baut, welche Arbeiten müssen durchgeführt werden? Reihenfolge egal, denkt an die beteiligten Handwerker. | ||
| + | |||
| + | <hidden Was zeichnet " | ||
| + | |||
| + | Arbeitsteilung, | ||
| + | aktuell in Deutschland etwa 24'000 Berufe! Die " | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Allgemeines zu Funktionen ===== | ||
| + | |||
| + | <WRAP center round info 100%> | ||
| + | Das Aufteilen einer grösseren Vorhabens in Teilvorhaben, | ||
| + | |||
| + | In der Informatik wird dies oft durch **Funktionen** bewerkstelligt. " | ||
| + | |||
| + | Wir haben schon viele Funktionen kennengelernt und verwendet, z. B. '' | ||
| + | |||
| + | Funktionen werden aufgerufen (**Funktionsaufruf**), | ||
| + | |||
| + | **Die runden Klammern sind beim Funktionsaufreu stets hinzuschreiben, | ||
| + | |||
| + | Beispiele: | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Zum besseren Verständnis ist es sinnvoll, Funktionen in vier Arten einzuteilen, | ||
| + | * **Parameter** (= Übergabewerte) benötigen oder nicht; | ||
| + | * einen **Rückgabewert** zurückgeben oder nicht. | ||
| + | |||
| + | In der folgenden Tabelle ist für jeder dieser vier Arten ein Beispiel angegeben und darunter ein Aufruf der Funktion. | ||
| + | <WRAP round box 60%> | ||
| + | |Funktionen ^ ohne Parameter ^ mit Parameter(n) ^ | ||
| + | ^ ohne Rückgabewert | '' | ||
| + | ^ | '' | ||
| + | ^ mit Rückgabewert | '' | ||
| + | ^ | '' | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <WRAP center round important 100%> | ||
| + | Grob gesagt kann man Aufrufe (und Definitionen, | ||
| + | |||
| + | Beachte: Sogenannte **Schlüsselworte** wie '' | ||
| + | |||
| + | Die Zusatzinformation, | ||
| + | |||
| + | Also bitte nicht '' | ||
| + | </ | ||
| + | |||
| + | <WRAP center round box 100%> | ||
| + | In den folgenden Aufgaben lernst du durch Beispiele, wie du selbst neue Funktionen definieren kannst. | ||
| + | |||
| + | Die folgende Tabelle stellt dar, welche Aufgabe sich mit welcher Art von Funktion beschäftigt und welche Funktionen darin definiert werden. | ||
| + | <WRAP round box 60%> | ||
| + | |Funktionen ^ ohne Parameter ^ mit einem Parameter ^ | ||
| + | ^ ohne Rückgabewert | [[lehrkraefte: | ||
| + | ^ | '' | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | <WRAP center round info 100%> | ||
| + | Statt sofort mit Aufgabe 2 zu beginnen, programmieren wir zusammen. | ||
| + | <hidden Ungefähr das hier Versteckte.> | ||
| + | Erst | ||
| + | <code python> | ||
| + | forward(50) | ||
| + | right(150) | ||
| + | forward(50) | ||
| + | left(150) | ||
| + | </ | ||
| + | im Hauptprogramm, | ||
| + | einmal aufrufen (schreibe ''# | ||
| + | <hidden Am Ende steht folgendes da:> | ||
| + | <code python> | ||
| + | from gturtle import * | ||
| + | |||
| + | def spitze(): | ||
| + | forward(50) | ||
| + | right(150) | ||
| + | forward(50) | ||
| + | left(150) | ||
| + | |||
| + | makeTurtle() | ||
| + | |||
| + | repeat 7: | ||
| + | spitze() | ||
| + | #right(61) | ||
| + | right(360/ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Aufgabe 2, Funktionen ohne Parameter und ohne Rückgabewert definieren ===== | ||
| + | |||
| + | <WRAP center round todo 100%> | ||
| + | **Einzelarbeit, | ||
| + | |||
| + | Der folgende Code definiert eine Funktion '' | ||
| + | |||
| + | Das Schlüsselwort '' | ||
| + | <code python> | ||
| + | from gturtle import * | ||
| + | |||
| + | # In der folgenden Zeile beginnt die Definition der Funktion | ||
| + | def quadrat100(): | ||
| + | repeat 4: | ||
| + | forward(100) | ||
| + | right(90) | ||
| + | | ||
| + | # Hier ist die Definition der Funktion dreieck100 zu ergänzen. | ||
| + | | ||
| + | # In der folgenden Zeile beginnt das Hauptprogramm | ||
| + | makeTurtle() | ||
| + | |||
| + | # Ergänze den Code. | ||
| + | </ | ||
| + | * Öffne ein neues, leeres Programmfenster in Tigerjython und kopiere das obige Programm hinein. | ||
| + | * Ergänze das Programm an der angegebenen Stelle um eine Funktion '' | ||
| + | * Ergänze das Hauptprogramm und nutze die Funktion '' | ||
| + | * Etwas schwieriger: | ||
| + | |||
| + | |||
| + | {{: | ||
| + | {{: | ||
| + | </ | ||
| + | |||
| + | ===== Aufgabe 3, Funktionen mit einem Parameter und ohne Rückgabewert definieren ===== | ||
| + | |||
| + | <WRAP center round todo 100%> | ||
| + | **Einzelarbeit, | ||
| + | |||
| + | <WRAP center round info 100%> | ||
| + | Zusätzliche mündliche Erklärung durch mich: | ||
| + | Der folgende Code definiert eine Funktion '' | ||
| + | </ | ||
| + | |||
| + | <code python> | ||
| + | from gturtle import * | ||
| + | |||
| + | # In der folgenden Zeile beginnt die Definition der Funktion | ||
| + | def quadrat(s): | ||
| + | repeat 4: | ||
| + | forward(s) | ||
| + | right(90) | ||
| + | | ||
| + | # In der folgenden Zeile beginnt das Hauptprogramm | ||
| + | makeTurtle() | ||
| + | |||
| + | quadrat(100) | ||
| + | |||
| + | # | ||
| + | #x = 100 | ||
| + | #repeat 7: | ||
| + | # quadrat(x) | ||
| + | # x = x + 20 | ||
| + | </ | ||
| + | |||
| + | (Für das Folgende kannst du entweder ein neues Programm schreiben oder das obige Programm in eine neues Programmierfenster kopieren und modifizieren.) | ||
| + | |||
| + | Schreibe nun selbst eine Funktion '' | ||
| + | |||
| + | {{: | ||
| + | </ | ||
| + | |||
| + | ===== Aufgabe 4, Mäander (Ornamentik), | ||
| + | |||
| + | <WRAP center round todo 100%> | ||
| + | **Einzelarbeit, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Ziel ist, das linke Muster effizient zu zeichnen. Gewisse Teilstrukturen wiederholen sich: Das rote Ornament im Muster rechts kommt $8+5+8+5 = 26$ Mal vor, der grüne Pfad als " | ||
| + | |||
| + | Schreibe wie folgt ein Programm dafür: | ||
| + | - Definiere eine Funktion '' | ||
| + | - Teste deine Funktion '' | ||
| + | - Definiere eine Funktion '' | ||
| + | - Definiere eine Funktion '' | ||
| + | - Schreibe nun das Hauptprogramm und verwende darin diese Funktionen in geschickter Weise, so dass ein Muster wie rechts oben (aber alles in Schwarz) entsteht. (Wenn du es genauso gross zeichnen willst, musst du die Schildkröte anfangs in die linke untere Ecke des Fensters bewegen und in die richtige Richtung schauen lassen.) | ||
| + | - Setze schliesslich die Stiftdicke auf 10, um das linke Muster zu bekommen. | ||
| + | |||
| + | <hidden Wenn du Hilfe benötigst: Hier ist das Gerüst eines Python-Programms für eine mögliche Lösung.> | ||
| + | <code python> | ||
| + | from gturtle import * | ||
| + | |||
| + | def ornament(): | ||
| + | print(" | ||
| + | # Zu ergänzen. | ||
| + | | ||
| + | def wiederholeOrnament(n): | ||
| + | print(" | ||
| + | # Zu ergänzen. | ||
| + | |||
| + | def eckBewegung(): | ||
| + | print(" | ||
| + | # Zu ergänzen. | ||
| + | |||
| + | makeTurtle() | ||
| + | hideTurtle() | ||
| + | |||
| + | # Bewege die Turtle nach links unten und lass sie nach rechts schauen. | ||
| + | penUp() | ||
| + | backward(180) | ||
| + | right(90) | ||
| + | backward(290) | ||
| + | penDown() | ||
| + | |||
| + | setPenColor(" | ||
| + | penWidth(2) | ||
| + | |||
| + | # Hier sind die oben definierten Funktionen in geeigneter Weise aufzurufen, eventuell mit repeat 2. | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <hidden Bonusaufgaben (bitte ausklappen)> | ||
| + | Zeichne ähnliche Muster! Zur Inspiration: | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Hausaufgabe (kann eventuell während der Lektion begonnen werden) ===== | ||
| + | |||
| + | <WRAP center round todo 100%> | ||
| + | * Aufgabe 4 (Mäander) oder eine Variation deiner Wahl davon von ähnlicher Schwierigkeit | ||
| + | |||
| + | Abgabe bis **spätestens Sonntagabend 23:59 Uhr** vor der nächsten Doppellektion über den folgenden Link: | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Überlegungen nach der Pause (wann auch immer diese stattfindet)===== | ||
| + | |||
| + | * Wozu sind Funktionen gut? | ||
| + | * Wie unterscheiden sich Funktionsaufruf und Funktionsdefinition? | ||
| + | * Was ist ein Parameter? | ||
| + | |||
| + | ===== Struktur von Programmen ==== | ||
| + | |||
| + | <WRAP center round info 100%> | ||
| + | Python ist relativ tolerant, wo man Funktionen definiert. Trotzdem ist die folgende Reihenfolge zu empfehlen: | ||
| + | |||
| + | <code python> | ||
| + | # Import von Bibliotheken | ||
| + | from ... import ... | ||
| + | |||
| + | # Definitionen von Funktionen | ||
| + | def ...: | ||
| + | |||
| + | def ...: | ||
| + | |||
| + | # Beginn des Hauptprogramms, | ||
| + | makeTurtle() | ||
| + | |||
| + | </ | ||
| + | |||
| + | - Zuerst '' | ||
| + | - Leerzeile | ||
| + | - Funktionsdefinitionen (jeweils mit '' | ||
| + | - Leerzeile | ||
| + | - Hauptprogramm (erst hier steht so etwas wie '' | ||
| + | |||
| + | Im Übrigen ist es guter Stil, Kommentare im Programm anzubringen (alles nach ''#'' | ||
| + | </ | ||
| + | |||
| + | <hidden Hier ist ein Beispiel eines gut strukturierten und kommentierten Programms (beachte, dass eine Funktion auch eine andere Funktion aufrufen kann):> | ||
| + | <code python> | ||
| + | # Header: Anweisungen zum Import von Funktionen aus Bibliotheken | ||
| + | from gturtle import * | ||
| + | from random import * | ||
| + | |||
| + | # Definitionen von Funktionen | ||
| + | |||
| + | # Die folgende Funktion setzt die Farbe der Schildkröte zufällig auf rot, grün oder blau. | ||
| + | def waehleZufallsFarbe(): | ||
| + | z = random() | ||
| + | if z < 0.3333: | ||
| + | setPenColor(" | ||
| + | elif z < 0.6666: | ||
| + | setPenColor(" | ||
| + | else: | ||
| + | setPenColor(" | ||
| + | |||
| + | # Die folgende Funktion zeichnet ein regelmässiges n-Eck. Die Farbe jeder Seite wird zufällig gewählt. | ||
| + | def vieleck(n): | ||
| + | repeat n: | ||
| + | waehleZufallsFarbe() | ||
| + | forward(60) | ||
| + | right(360/ | ||
| + | |||
| + | # Beginn des Hauptprogramms | ||
| + | |||
| + | # Erzeuge die Turtle in Fenstermitte mit Blickrichtung nach vorne, mach sie unsichtbar und setze die Stiftdicke auf 4. | ||
| + | makeTurtle() | ||
| + | hideTurtle() | ||
| + | penWidth(4) | ||
| + | |||
| + | # Bewege die Turtle ohne zu zeichnen 280 Pixel zurück. | ||
| + | penUp() | ||
| + | backward(280) | ||
| + | penDown() | ||
| + | |||
| + | # Zeichne sukzessive eine 3-Eck, ein 6-Eck etc. bis zum 18-Eck. Dazwischen wird die Turtle unsichtbar etwas nach vorne bewegt. | ||
| + | m = 3 | ||
| + | repeat 6: | ||
| + | vieleck(m) | ||
| + | m = m + 3 | ||
| + | penUp() | ||
| + | forward(70) | ||
| + | penDown() | ||
| + | </ | ||
| + | </ | ||
| + | ====== Zusammenfassung und Feedback ====== | ||
| + | |||
| + | ===== Zusammenfassung ===== | ||
| + | |||
| + | <hidden Was hast du gelernt? Wozu ist es gut? Erst selbst überlegen!> | ||
| + | * Modularisierung / modularer Entwurf / Baukastenprinzip | ||
| + | * Ich weiss, wie man Funktionen mit/ohne Parameter und mit/ohne Rückgabewert definiert. | ||
| + | * Funktionen dienen der besseren Strukturierung von Programmen. | ||
| + | * Sie sind besonders nützlich, wenn man gewisse Programmteile mehrfach verwenden möchte. | ||
| + | * < | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Konstruktives Feedback (freiwillig) ===== | ||
| + | |||
| + | Schreibt bitte auf die Post-it-Zettel: | ||
| + | * Was euch heute gefallen hat. | ||
| + | * Statt aufzuschreiben, | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Bonusaufgabe: | ||
| + | |||
| + | <WRAP center round todo 100%> | ||
| + | Nutze die beiden " | ||
| + | - Bilder wie unten abgebildet zeichnen; | ||
| + | - das [[lehrkraefte: | ||
| + | |||
| + | <hidden Hier ist der Code von Esteban versteckt, der das St. Galler Wappen zeichnet.> | ||
| + | <code python> | ||
| + | # Dank an Esteban für das Zeichnen des Wappens! | ||
| + | # Ich habe seinen Code etwas modifiziert, | ||
| + | |||
| + | from gturtle import * | ||
| + | makeTurtle() | ||
| + | hideTurtle() | ||
| + | |||
| + | # Speichere aktuelle Position und Richtung etc. | ||
| + | x = getX() | ||
| + | y = getY() | ||
| + | h = heading() | ||
| + | d = getPenWidth() | ||
| + | penFarbe = getPenColor() | ||
| + | fuellFarbe = getFillColor() | ||
| + | |||
| + | |||
| + | # Bewege zum Punkt links am Wappen, wo Krümmung beginnt | ||
| + | setPenColor(" | ||
| + | penUp() | ||
| + | left(90) | ||
| + | repeat 90: | ||
| + | forward(1) | ||
| + | right(1) | ||
| + | penDown() | ||
| + | |||
| + | # Male Wappenumrandung. | ||
| + | setFillColor(" | ||
| + | startPath() | ||
| + | penWidth(5) | ||
| + | right(180) | ||
| + | repeat 180: | ||
| + | left(1) | ||
| + | forward(1) | ||
| + | forward(100) | ||
| + | left(90) | ||
| + | forward(115) | ||
| + | left(90) | ||
| + | forward(100) | ||
| + | |||
| + | # Färbe Inneres des Wappens weisst. | ||
| + | fillPath() | ||
| + | |||
| + | # Gehe unsichtbar nach innen. | ||
| + | penWidth(2) | ||
| + | penUp() | ||
| + | forward(40) | ||
| + | left(90) | ||
| + | forward(55) | ||
| + | penDown() | ||
| + | |||
| + | # Zeichne Rutenbündel mit Beil | ||
| + | forward(5) | ||
| + | left(90) | ||
| + | forward(10) | ||
| + | right(90) | ||
| + | forward(12.5) | ||
| + | left(90) | ||
| + | forward(90) | ||
| + | left(90) | ||
| + | forward(12.5) | ||
| + | right(90) | ||
| + | forward(9.5) | ||
| + | right(45) | ||
| + | forward(5) | ||
| + | left(90) | ||
| + | forward(5) | ||
| + | right(45) | ||
| + | forward(9.5) | ||
| + | left(90) | ||
| + | forward(5) | ||
| + | left(90) | ||
| + | forward(9.5) | ||
| + | right(90) | ||
| + | forward(4) | ||
| + | right(45) | ||
| + | forward(14) | ||
| + | left(90) | ||
| + | |||
| + | # Klinge des Beils | ||
| + | repeat 9: | ||
| + | left(8.2) | ||
| + | forward(2.9) | ||
| + | left(93) | ||
| + | forward(14) | ||
| + | right(32) | ||
| + | forward(4) | ||
| + | right(90) | ||
| + | forward(9.5) | ||
| + | right(90) | ||
| + | forward(12.5) | ||
| + | left(90) | ||
| + | forward(90) | ||
| + | left(90) | ||
| + | forward(12.5) | ||
| + | right(90) | ||
| + | forward(10) | ||
| + | left(90) | ||
| + | forward(5) | ||
| + | penUp() | ||
| + | forward(5) | ||
| + | setFillColor(0, | ||
| + | fill() | ||
| + | |||
| + | # Setze Turtle auf gespeicherte Position und Richtung etc. | ||
| + | penUp() | ||
| + | moveTo(x,y) | ||
| + | setHeading(h) | ||
| + | penWidth(d) | ||
| + | setPenColor(penFarbe) | ||
| + | setFillColor(fuellFarbe) | ||
| + | penDown() | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <hidden Hier ist der Code von Gioia versteckt, der eine Blume zeichnet.> | ||
| + | <code python> | ||
| + | # Dank an Gioia! | ||
| + | # Ich habe ihren Code etwas modifiziert (aber nicht besonders elegant), so dass das Erstellen der Funktion leichter geht. | ||
| + | from gturtle import * | ||
| + | makeTurtle() | ||
| + | hideTurtle() | ||
| + | # | ||
| + | |||
| + | # Speichere aktuelle Position und Richtung etc. | ||
| + | x = getX() | ||
| + | y = getY() | ||
| + | h = heading() | ||
| + | d = getPenWidth() | ||
| + | penFarbe = getPenColor() | ||
| + | |||
| + | f = 0.4 # Verkleinerungsfaktor, | ||
| + | # denn Gioias Blume war mir zu gross. | ||
| + | # Alle Streckenangaben in den Zeichenbefehlen werden mit diesem Faktor multipliziert. | ||
| + | # Wer mag, kann auch diesen Faktor als Parameter an die Funktion übergeben. | ||
| + | |||
| + | # Ohne zu zeichnen vom "Fuss des Stängels" | ||
| + | penUp() | ||
| + | right(180) | ||
| + | forward(-170 * f) | ||
| + | forward(-69 * f) | ||
| + | right(-90) | ||
| + | forward(-7 * f) | ||
| + | right(-90) | ||
| + | penDown() | ||
| + | |||
| + | # Blüte zeichnen. | ||
| + | setPenColor(" | ||
| + | penWidth(int(5 * f)) | ||
| + | penUp() | ||
| + | forward(60 * f) | ||
| + | setPenColor(" | ||
| + | dot(80 * f) | ||
| + | right(120) | ||
| + | forward(60 * f) | ||
| + | penUp() | ||
| + | dot(80 * f) | ||
| + | right(70) | ||
| + | forward(70 * f) | ||
| + | dot(80 * f) | ||
| + | right(75) | ||
| + | penUp() | ||
| + | forward(70 * f) | ||
| + | dot(80 * f) | ||
| + | right(85) | ||
| + | penUp() | ||
| + | forward(70 * f) | ||
| + | dot(80 * f) | ||
| + | |||
| + | # Obige Befehle rückwärts, | ||
| + | forward(-70 * f) | ||
| + | right(-85) | ||
| + | forward(-70 * f) | ||
| + | right(-75) | ||
| + | forward(-70 * f) | ||
| + | right(-70) | ||
| + | forward(-60 * f) | ||
| + | right(-120) | ||
| + | forward(-60 * f) | ||
| + | |||
| + | # Zeichne Rest der Blüte und Stängel. | ||
| + | setPenColor(" | ||
| + | dot(60 * f) | ||
| + | right(90) | ||
| + | forward(7 * f) | ||
| + | right(90) | ||
| + | setPenColor(" | ||
| + | penUp() | ||
| + | forward(69 * f) | ||
| + | penDown() | ||
| + | penWidth(int(15 * f)) | ||
| + | forward(170 * f) | ||
| + | |||
| + | # Setze Turtle auf gespeicherte Position und Richtung etc. | ||
| + | penUp() | ||
| + | moveTo(x,y) | ||
| + | setHeading(h) | ||
| + | penWidth(d) | ||
| + | setPenColor(penFarbe) | ||
| + | penDown() | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | {{: | ||
| + | {{: | ||
| + | </ | ||
| + | |||
| + | ===== Fragebox - auch zum Besprechen von Programmen während der Lektion (NICHT für Hausaufgaben) ===== | ||
| + | |||
| + | Bitte einfach am Anfang des Programms oder der eingereichten Datei die Frage aufschreiben (mit oder ohne Hashtag ''#'' | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | |||
| + | |||
| + | ===== Lösungsvorschläge ===== | ||
| + | |||
| + | <hidden Aufgabe 2> | ||
| + | <code python> | ||
| + | from gturtle import * | ||
| + | |||
| + | # In der folgenden Zeile beginnt die Definition der Funktion | ||
| + | def quadrat100(): | ||
| + | repeat 4: | ||
| + | forward(100) | ||
| + | right(90) | ||
| + | |||
| + | def dreieck100(): | ||
| + | repeat 3: | ||
| + | forward(100) | ||
| + | left(120) | ||
| + | | ||
| + | # In der folgenden Zeile beginnt das Hauptprogramm | ||
| + | makeTurtle() | ||
| + | # hideTurtle() | ||
| + | |||
| + | # Erstes Muster | ||
| + | repeat 6: | ||
| + | dreieck100() | ||
| + | right(60) | ||
| + | |||
| + | # Bewege nach rechts | ||
| + | penUp() | ||
| + | right(90) | ||
| + | forward(370) | ||
| + | left(90) | ||
| + | penDown() | ||
| + | |||
| + | # Zweites Muster | ||
| + | repeat 6: | ||
| + | dreieck100() | ||
| + | quadrat100() | ||
| + | forward(100) | ||
| + | left(360/6) | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <hidden Aufgabe 3> | ||
| + | <code python> | ||
| + | from gturtle import * | ||
| + | |||
| + | def vieleck(x): | ||
| + | repeat x: | ||
| + | forward(50) | ||
| + | right(360/ | ||
| + | |||
| + | makeTurtle() | ||
| + | # hideTurtle() | ||
| + | |||
| + | n = 3 | ||
| + | repeat 11: | ||
| + | vieleck(n) | ||
| + | n = n + 1 | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <hidden Aufgabe 4, Lösung von Vanessa (nur '' | ||
| + | <code python> | ||
| + | from gturtle import* | ||
| + | |||
| + | def ornament(): | ||
| + | forward(60) | ||
| + | right(90) | ||
| + | forward(40) | ||
| + | right(90) | ||
| + | forward(20) | ||
| + | right(90) | ||
| + | forward(20) | ||
| + | left(90) | ||
| + | forward(20) | ||
| + | left(90) | ||
| + | forward(40) | ||
| + | left(90) | ||
| + | forward(60) | ||
| + | left(90) | ||
| + | forward(60) | ||
| + | right(90) | ||
| + | | ||
| + | |||
| + | def wiederholeOrnament(n): | ||
| + | repeat n: | ||
| + | ornament() | ||
| + | |||
| + | def eckBewegung(): | ||
| + | left(90) | ||
| + | forward(20) | ||
| + | left(90) | ||
| + | forward(60) | ||
| + | right(90) | ||
| + | |||
| + | makeTurtle() | ||
| + | hideTurtle() | ||
| + | |||
| + | penUp() | ||
| + | backward(230) | ||
| + | right(90) | ||
| + | backward(310) | ||
| + | penDown() | ||
| + | setPenColor(" | ||
| + | penWidth(10) | ||
| + | # | ||
| + | repeat 2: | ||
| + | wiederholeOrnament(8) | ||
| + | eckBewegung() | ||
| + | wiederholeOrnament(6) | ||
| + | eckBewegung() | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | <hidden Kreis aus St. Galler Wappen> | ||
| + | <code python> | ||
| + | # Dank an Esteban für das Zeichnen des Wappens! | ||
| + | |||
| + | from gturtle import * | ||
| + | |||
| + | def stGallen(): | ||
| + | | ||
| + | # Speichere aktuelle Position und Richtung | ||
| + | x = getX() | ||
| + | y = getY() | ||
| + | h = heading() | ||
| + | setPenColor(" | ||
| + | |||
| + | # Bewege zum Punkt links am Wappen, wo Krümmung beginnt | ||
| + | penUp() | ||
| + | left(90) | ||
| + | repeat 90: | ||
| + | forward(1) | ||
| + | right(1) | ||
| + | penDown() | ||
| + | | ||
| + | # Male Wappenumrandung. | ||
| + | setFillColor(" | ||
| + | startPath() | ||
| + | penWidth(5) | ||
| + | right(180) | ||
| + | repeat 180: | ||
| + | left(1) | ||
| + | forward(1) | ||
| + | forward(100) | ||
| + | left(90) | ||
| + | forward(115) | ||
| + | left(90) | ||
| + | forward(100) | ||
| + | | ||
| + | # Färbe Inneres des Wappens weisst. | ||
| + | fillPath() | ||
| + | | ||
| + | # Gehe unsichtbar nach innen. | ||
| + | penWidth(2) | ||
| + | penUp() | ||
| + | forward(40) | ||
| + | left(90) | ||
| + | forward(55) | ||
| + | penDown() | ||
| + | | ||
| + | # Zeichne Rutenbündel mit Beil | ||
| + | forward(5) | ||
| + | left(90) | ||
| + | forward(10) | ||
| + | right(90) | ||
| + | forward(12.5) | ||
| + | left(90) | ||
| + | forward(90) | ||
| + | left(90) | ||
| + | forward(12.5) | ||
| + | right(90) | ||
| + | forward(9.5) | ||
| + | right(45) | ||
| + | forward(5) | ||
| + | left(90) | ||
| + | forward(5) | ||
| + | right(45) | ||
| + | forward(9.5) | ||
| + | left(90) | ||
| + | forward(5) | ||
| + | left(90) | ||
| + | forward(9.5) | ||
| + | right(90) | ||
| + | forward(4) | ||
| + | right(45) | ||
| + | forward(14) | ||
| + | left(90) | ||
| + | | ||
| + | # Klinge des Beils | ||
| + | repeat 9: | ||
| + | left(8.2) | ||
| + | forward(2.9) | ||
| + | left(93) | ||
| + | forward(14) | ||
| + | right(32) | ||
| + | forward(4) | ||
| + | right(90) | ||
| + | forward(9.5) | ||
| + | right(90) | ||
| + | forward(12.5) | ||
| + | left(90) | ||
| + | forward(90) | ||
| + | left(90) | ||
| + | forward(12.5) | ||
| + | right(90) | ||
| + | forward(10) | ||
| + | left(90) | ||
| + | forward(5) | ||
| + | penUp() | ||
| + | forward(5) | ||
| + | setFillColor(0, | ||
| + | fill() | ||
| + | |||
| + | # Setze Turtle auf gespeicherte Position und Richtung | ||
| + | moveTo(x,y) | ||
| + | setHeading(h) | ||
| + | |||
| + | makeTurtle() | ||
| + | hideTurtle() | ||
| + | |||
| + | n = 21 | ||
| + | enableRepaint(False) | ||
| + | |||
| + | penUp() | ||
| + | left(90) | ||
| + | forward(150) | ||
| + | right(90) | ||
| + | |||
| + | repeat 4 * n: | ||
| + | stGallen() | ||
| + | repaint() | ||
| + | right(360/ | ||
| + | forward(40) | ||
| + | delay(100) | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <hidden Kreis aus Blumen> | ||
| + | <code python> | ||
| + | from gturtle import * | ||
| + | |||
| + | def stGallen(): | ||
| + | hideTurtle() | ||
| + | x = getX() | ||
| + | y = getY() | ||
| + | h = heading() | ||
| + | d = getPenWidth() | ||
| + | penFarbe = getPenColor() | ||
| + | fuellFarbe = getFillColor() | ||
| + | |||
| + | setPenColor(" | ||
| + | |||
| + | penUp() | ||
| + | left(90) | ||
| + | repeat(90): | ||
| + | forward(1) | ||
| + | right(1) | ||
| + | penDown() | ||
| + | | ||
| + | setFillColor(" | ||
| + | startPath() | ||
| + | penWidth(5) | ||
| + | right(180) | ||
| + | repeat(180): | ||
| + | left(1) | ||
| + | forward(1) | ||
| + | forward(100) | ||
| + | left(90) | ||
| + | forward(115) | ||
| + | left(90) | ||
| + | forward(100) | ||
| + | fillPath() | ||
| + | | ||
| + | penWidth(2) | ||
| + | penUp() | ||
| + | forward(40) | ||
| + | left(90) | ||
| + | forward(55) | ||
| + | penDown() | ||
| + | forward(5) | ||
| + | left(90) | ||
| + | forward(10) | ||
| + | right(90) | ||
| + | forward(12.5) | ||
| + | left(90) | ||
| + | forward(90) | ||
| + | left(90) | ||
| + | forward(12.5) | ||
| + | right(90) | ||
| + | forward(9.5) | ||
| + | right(45) | ||
| + | forward(5) | ||
| + | left(90) | ||
| + | forward(5) | ||
| + | right(45) | ||
| + | forward(9.5) | ||
| + | left(90) | ||
| + | forward(5) | ||
| + | left(90) | ||
| + | forward(9.5) | ||
| + | right(90) | ||
| + | forward(4) | ||
| + | right(45) | ||
| + | forward(14) | ||
| + | left(90) | ||
| + | repeat(9): | ||
| + | left(8.2) | ||
| + | forward(2.9) | ||
| + | left(93) | ||
| + | forward(14) | ||
| + | right(32) | ||
| + | forward(4) | ||
| + | right(90) | ||
| + | forward(9.5) | ||
| + | right(90) | ||
| + | forward(12.5) | ||
| + | left(90) | ||
| + | forward(90) | ||
| + | left(90) | ||
| + | forward(12.5) | ||
| + | right(90) | ||
| + | forward(10) | ||
| + | left(90) | ||
| + | forward(5) | ||
| + | penUp() | ||
| + | forward(5) | ||
| + | setFillColor(0, | ||
| + | fill() | ||
| + | moveTo(x,y) | ||
| + | setPenColor(penFarbe) | ||
| + | setFillColor(fuellFarbe) | ||
| + | penWidth(d) | ||
| + | setHeading(h) | ||
| + | penDown() | ||
| + | |||
| + | def blume(): | ||
| + | hideTurtle() | ||
| + | | ||
| + | # Speichere aktuelle Position und Richtung etc. | ||
| + | x = getX() | ||
| + | y = getY() | ||
| + | h = heading() | ||
| + | d = getPenWidth() | ||
| + | penFarbe = getPenColor() | ||
| + | | ||
| + | f = 0.4 # Verkleinerungsfaktor | ||
| + | penUp() | ||
| + | right(180) | ||
| + | forward(-170 * f) | ||
| + | forward(-69 * f) | ||
| + | right(-90) | ||
| + | forward(-7 * f) | ||
| + | right(-90) | ||
| + | penDown() | ||
| + | | ||
| + | setPenColor(" | ||
| + | penWidth(int(5 * f)) | ||
| + | penUp() | ||
| + | forward(60 * f) | ||
| + | setPenColor(" | ||
| + | dot(80 * f) | ||
| + | right(120) | ||
| + | forward(60 * f) | ||
| + | penUp() | ||
| + | dot(80 * f) | ||
| + | right(70) | ||
| + | forward(70 * f) | ||
| + | dot(80 * f) | ||
| + | right(75) | ||
| + | penUp() | ||
| + | forward(70 * f) | ||
| + | dot(80 * f) | ||
| + | right(85) | ||
| + | penUp() | ||
| + | forward(70 * f) | ||
| + | dot(80 * f) | ||
| + | | ||
| + | forward(-70 * f) | ||
| + | right(-85) | ||
| + | forward(-70 * f) | ||
| + | right(-75) | ||
| + | forward(-70 * f) | ||
| + | right(-70) | ||
| + | forward(-60 * f) | ||
| + | right(-120) | ||
| + | forward(-60 * f) | ||
| + | | ||
| + | setPenColor(" | ||
| + | dot(60 * f) | ||
| + | right(90) | ||
| + | forward(7 * f) | ||
| + | right(90) | ||
| + | setPenColor(" | ||
| + | penUp() | ||
| + | forward(69 * f) | ||
| + | penDown() | ||
| + | penWidth(int(15 * f)) | ||
| + | forward(170 * f) | ||
| + | | ||
| + | # Setze Turtle auf gespeicherte Position und Richtung etc. | ||
| + | penUp() | ||
| + | moveTo(x,y) | ||
| + | setHeading(h) | ||
| + | penWidth(d) | ||
| + | setPenColor(penFarbe) | ||
| + | penDown() | ||
| + | |||
| + | makeTurtle() | ||
| + | hideTurtle() | ||
| + | |||
| + | penUp() | ||
| + | |||
| + | n = 9 | ||
| + | enableRepaint(False) | ||
| + | |||
| + | penUp() | ||
| + | left(90) | ||
| + | forward(50) | ||
| + | right(90) | ||
| + | |||
| + | repeat n: | ||
| + | forward(10) | ||
| + | right(360/ | ||
| + | left((180 + 360/n)/2) | ||
| + | penDown() | ||
| + | blume() | ||
| + | penUp() | ||
| + | repaint() | ||
| + | right((180 + 360/n)/2) | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Link zur Kursseite ===== | ||
| + | |||
| + | [[lehrkraefte: | ||
| + | |||