lehrkraefte:snr:informatik:bruehl-2022:funktionen

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:bruehl-2022:funktionen [2022/03/22 13:38]
Olaf Schnürer [Lernziele heute]
lehrkraefte:snr:informatik:bruehl-2022:funktionen [2022/04/02 13:23] (current)
Olaf Schnürer [Zusammenfassung]
Line 7: Line 7:
 ===== Lernziele heute ===== ===== Lernziele heute =====
  
-  * Funktionen oder: Wie man grössere Programm übersichtlich gestaltet (Baukastenprinzip)+  * Funktionen oder: Wie man grössere Programm übersichtlich gestaltet: modularer Entwurf, Baukastenprinzip. 
-  * Nebenbei: Rechnen mit Strings (= Zeichenketten)+
 ===== Aufgabe 1 ===== ===== Aufgabe 1 =====
  
Line 28: Line 28:
 Das Aufteilen einer grösseren Vorhabens in Teilvorhaben, die sogenannten **Module**, nennt man **Modularisierung**, auch **modularen Entwurf** oder **Baukastenprinzip**. Das Aufteilen einer grösseren Vorhabens in Teilvorhaben, die sogenannten **Module**, nennt man **Modularisierung**, auch **modularen Entwurf** oder **Baukastenprinzip**.
  
-In der Informatik wird dies oft durch **Funktionen** bewerkstelligt. +In der Informatik wird dies oft durch **Funktionen** bewerkstelligt. "Funktionen sind die Spezialisten beim Programmieren."
  
 Wir haben schon viele Funktionen kennengelernt und verwendet, z. B. ''print'', ''input'', ''forward'', ''right'', ''penUp'', ''makeTurtle'', ''setPenColor'', ''random''. Wir haben schon viele Funktionen kennengelernt und verwendet, z. B. ''print'', ''input'', ''forward'', ''right'', ''penUp'', ''makeTurtle'', ''setPenColor'', ''random''.
Line 72: Line 72:
 ^ ohne Rückgabewert | [[lehrkraefte:snr:informatik:bruehl-2022:funktionen#aufgabe_2_funktionen_ohne_parameter_und_ohne_rueckgabewert_definieren|Aufgabe 2]] | [[lehrkraefte:snr:informatik:bruehl-2022:funktionen#aufgabe_3_funktionen_mit_einem_parameter_und_ohne_rueckgabewert_definieren|Aufgabe 3]] | ^ ohne Rückgabewert | [[lehrkraefte:snr:informatik:bruehl-2022:funktionen#aufgabe_2_funktionen_ohne_parameter_und_ohne_rueckgabewert_definieren|Aufgabe 2]] | [[lehrkraefte:snr:informatik:bruehl-2022:funktionen#aufgabe_3_funktionen_mit_einem_parameter_und_ohne_rueckgabewert_definieren|Aufgabe 3]] |
 ^ | ''quadrat100'', ''dreieck100'' | ''quadrat'', ''vieleck'' | ^ | ''quadrat100'', ''dreieck100'' | ''quadrat'', ''vieleck'' |
-^ mit Rückgabewert | [[lehrkraefte:snr:informatik:bruehl-2022:funktionen#aufgabe_5_funktionen_ohne_parameter_und_mit_rueckgabewert_definieren|Aufgabe 5]] | [[lehrkraefte:snr:informatik:bruehl-2022:funktionen#aufgabe_6_funktionen_mit_parameter_und_mit_rueckgabewert_definieren|Aufgaben 6]] [[lehrkraefte:snr:informatik:bruehl-2022:funktionen#aufgabe_7_funktionen_mit_parameter_und_mit_rueckgabewert_definieren|und 7]] |  
-^ | ''buchstabeZ'', ''meinAnfangsBuchstabe'' | ''konvertiereFahrenheitInCelsius'', ''laengeDiagonale'', ''brief'' | 
 </WRAP> </WRAP>
  
Line 179: Line 177:
 (Für das Folgende kannst du entweder ein neues Programm schreiben oder das obige Programm in eine neues Programmierfenster kopieren und modifizieren.) (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 ''vieleck'', die einen Parameter ''n'' entgegennimmt und ein regelmässiges $n$-Eck der Seitenlänge 50 zeichnet; die Turtle soll am Ende im selben Zustand wie am Anfang sein. Nutze deine Funktion, um die folgende Figur zu zeichnen (ein Dreieck in einem Viereck in einem Fünfeck ... undsoweiter ... in einem 11-Eck).+Schreibe nun selbst eine Funktion ''vieleck'', die einen Parameter ''n'' entgegennimmt und ein regelmässiges $n$-Eck der Seitenlänge 50 zeichnet; die Turtle soll am Ende im selben Zustand wie am Anfang sein. Nutze deine Funktion, um die folgende Figur zu zeichnen (ein Dreieck in einem Viereck in einem Fünfeck ... undsoweiter ... in einem 13-Eck).
  
 {{:lehrkraefte:snr:informatik:bruehl-2022:vielecke.png?200|}} {{:lehrkraefte:snr:informatik:bruehl-2022:vielecke.png?200|}}
 </WRAP> </WRAP>
  
- +===== Aufgabe 4, Mäander (Ornamentik), mehrere Funktionen kombinieren =====
- +
-===== Sprungstelle Klasse 1AFGsK: Gehe direkt zu Aufgabe 8! ===== +
- +
-===== Sprungstelle Klasse 1CFP: Erkläre die folgende Infobox, springe dann zu Aufgabe 6 und danach direkt zu Aufgabe 8 (es sei denn, ich verschätze mich zeitlich total, dann einfach direkt mit Aufgabe 4 weiter) ===== +
- +
-===== Addition von Strings und kombinierte Ausgabe von Strings und Zahlen ===== +
- +
-<WRAP center round info 100%> +
-Strings (= Zeichenketten = Text) werden in Python links und rechts durch Anführungszeichen gekennzeichnet. Beispielsweise ist ''"Hello World!"'' eine String. +
- +
-Wir spielen mit dem folgenden Programm, bis wir die folgenden Fragen beantworten können: +
-  * Wie "addiert" Python zwei Strings? +
-  * Wie kann man den ersten ''print''-Befehl verändern, so dass die Ausgabe ''Grüezi St. Gallen!'' lautet (also mit Leerschlag und Ausrufezeichen). +
- +
-<code python> +
-s = "Grüezi" +
-t = "St. Gallen" +
- +
-print(s + t) +
-</code> +
- +
- +
-Das Programm +
-<code python> +
-x = input("Wie alt bist du?"+
-print("Du bist" + x + "Jahre alt."+
-</code> +
-ist fehlerhaft! Man kann einen String((Tigerjython schreibt "unicode" statt "string" in der Fehlermeldung.)) und eine Zahl in Python **nicht** addieren. +
- +
-Um bei der Eingabe ''16'' die Ausgabe ''Du bist 16 Jahre alt.'' zu erhalten, ersetzt man am einfachsten die letzte Zeile durch +
-''print("Du bist" + str(x) + "Jahre alt.)'' und ändert noch eine Kleinigkeit. Die Funktion ''str'' wandelt die Zahlvariable ''x'' in einen String um (liefert also bei Eingabe der Zahl ''16'' den String ''"16"''), den man dann zu den anderen Strings addieren kann. +
-</WRAP> +
- +
- +
- +
-===== Aufgabe 4, Rechnen mit Strings (= Zeichenketten) und Zeilenumbruch ===== +
- +
-<WRAP center round todo 100%> +
-**Einzelarbeit, aber schnell besprechen, ca. 5 Minuten** (Diese Aufgabe hat nichts mit Funktionen zu tun, jedoch wird das hier Gelernte in den folgenden Aufgaben verwendet.) +
- +
-Strings (= Zeichenketten = Text) werden in Python links und rechts durch Anführungszeichen gekennzeichnet. Beispielsweise ist ''"Hello World!"'' eine String. +
-Spiele mit dem folgenden Programm, bis du die folgenden Fragen beantworten kannst: +
-  * Wie "addiert" Python zwei Strings? +
-  * Wie kann man den ersten ''print''-Befehl verändern, so dass die Ausgabe ''Grüezi St. Gallen!'' lautet (also mit Leerschlag und Ausrufezeichen). +
-  * Was passiert, wenn man eine Zahl mit einem String multipliziert? +
-  * Was bewirkt ''\n''? +
-<code python> +
-s = "Grüezi" +
-t = "St. Gallen" +
- +
-print(s + t) +
-print(3 * "Sieben!"+
-print("XXX\nX X\nXXX"+
-</code> +
- +
-Hinweis: //n// steht für //new line//, also Zeilenumbruch. In der Fachsprache nennt man ''\n'' einen "Escape character" (deutsch etwa: Fluchtzeichen, Escape-Zeichen).((Die beiden Zeichen ''\'' und ''n'' gehören so eng zusammen, dass sie wie ein Zeichen aufgefasst werden.)) +
-</WRAP> +
- +
- +
- +
- +
-===== Aufgabe 5, Funktionen ohne Parameter und mit Rückgabewert definieren ===== +
- +
-<WRAP center round todo 100%> +
-**Einzelarbeit, ca. 8 Minuten** +
- +
-Der folgende Code definiert eine Funktion ''buchstabeZ'' ohne Parameter, aber mit einem String als Rückgabewert. +
- +
-Der Rückgabewert steht rechts des Schlüsselworts ''return''+
- +
-<code python> +
-# In der folgenden Zeile beginnt die Definition der Funktion +
-def buchstabeZ(): +
-    s1 = "XXXXXX\n" +
-    s2 = "    XX\n" +
-    s3 = "   XX \n" +
-    s4 = "  XX  \n" +
-    s5 = " XX   \n" +
-    s6 = "XX    \n" +
-    s7 = "XXXXXX\n"     +
-     +
-    # Die folgende Zeile bewirkt, dass die Funktion den String s1 + s2 + s3 + s4 + s5 + s6 berechnet und retourniert. +
-    return s1 + s2 + s3 + s4 + s5 + s6 + s7 +
- +
-# In der folgenden Zeile beginnt das Hauptprogramm +
-b = buchstabeZ() +
-print(buchstabeZ()) +
-</code> +
- +
-Ändere diesen Code in die Definition einer Funktion ''meinAnfangsBuchstabe'', die den ersten Buchstaben deines Vornamens als "String mit Zeilenumbrüchen" retourniert. Passe das Hauptprogramm so an, dass dein Anfangsbuchstabe 3 Mal ausgegeben wird, jeweils mit einer Leerzeile dazwischen. +
-</WRAP> +
- +
-===== Kombinierte Ausgabe von Strings und Zahlen ===== +
- +
-<WRAP center round info 100%> +
-Das Programm +
-<code python> +
-x = input("Wie alt bist du?"+
-print("Du bist" + x + "Jahre alt."+
-</code> +
-ist fehlerhaft! Man kann einen String((Tigerjython schreibt "unicode" statt "string" in der Fehlermeldung.)) und eine Zahl in Python **nicht** addieren. +
- +
-Um bei der Eingabe ''16'' die Ausgabe ''Du bist 16 Jahre alt.'' zu erhalten, ersetzt man am einfachsten die letzte Zeile durch +
-''print("Du bist" + str(x) + "Jahre alt.)'' und ändert noch eine Kleinigkeit. Die Funktion ''str'' wandelt die Zahlvariable ''x'' in einen String um (liefert also bei Eingabe der Zahl ''16'' den String ''"16"''), den man dann zu den anderen Strings addieren kann. +
-</WRAP> +
-===== Aufgabe 6, Funktionen mit Parameter und mit Rückgabewert definieren ===== +
- +
-<WRAP center round todo 100%> +
- +
-**Einzelarbeit, ca. 10 Minuten** +
- +
-<WRAP center round info 100%> +
-Zusätzliche mündliche Erklärung durch mich: +
-Der folgende Code definiert eine Funktion ''konvertiereFahrenheitInCelsius'' mit einem Parameter (der Temperatur in Grad Fahrenheit), die als Rückgabewert die entsprechende Temperatur in Grad Celsius liefert. Erkläre Schlüsselwort ''return''! Zeige es im Einzelschrittverfahren! +
-</WRAP> +
- +
-<code python> +
-# In der folgenden Zeile beginnt die Definition der Funktion +
-def konvertiereFahrenheitInCelsius(f): +
-    c = (f - 32) / 1.8 +
-    return c +
-      +
-# In der folgenden Zeile beginnt das Hauptprogramm +
-x = input("Gib die Temperatur in Grad Fahrenheit ein:"+
-y = konvertiereFahrenheitInCelsius(x) +
-print(str(x) + " Grad Fahrenheit entspricht " + str(y) + " Grad Celsius."+
-</code> +
- +
- +
-Kopiere den Python-Code unten in ein neues Programmierfenster und ergänze ihn um die Definition der Funktion ''laengeDiagonale'', die als Parameter die Seitenlänge eines Quadrats entgegennimmt und die Länge der Diagonalen berechnet und zurückgibt. Ausserdem ist das Hauptprogramm so zu ergänzen, dass zum Beispiel bei Eingabe 4 die folgende Ausgabe erscheint: +
- +
-<code text> +
-Länge der Seite des Quadrats: 4 cm +
-Länge der Diagonalen: 5.65685424949 cm +
-</code> +
- +
-<code python> +
-# Funktionsdefinition zu ergänzen +
-  +
-s = input("Wie lang ist die Seite des Quadrats (in cm)?"+
- +
-# Ergänze hier den Code für die Ausgabe. +
-</code> +
- +
-Hinweis: Die Funktion ''sqrt'' liefert die Quadratwurzel (dabei steht "sqrt" für englisch "square root", also "Quadratwurzel). Beispielsweise liefert ''sqrt(2)'' die Zahl ''1.414213...''+
-<hidden Hier ist die Formel versteckt, damit es nicht daran scheitert...> +
-In einem Quadrat mit Seitenlänge ''a'' hat die Diagonale Länge $\sqrt{2}a$. Das folgt etwa aus dem Satz des Pythagoras oder einfachen geometrischen Überlegungen. +
-</hidden> +
-</WRAP> +
- +
-===== Aufgabe 7, Funktionen mit Parameter und mit Rückgabewert definieren ===== +
- +
-<WRAP center round todo 100%> +
-**Einzelarbeit, ca. 8 Minuten** +
- +
-Ergänze den folgenden Code um die Definition der Funktion ''brief'' mit einem String als Parameter und einem String als Rückgabewert, so dass die Ausgabe rechts entsteht. +
-<WRAP center box 100%> +
-<WRAP left round box 50%> +
-<code python> +
-# Funktionsdefinition zu ergänzen +
-        +
-print(brief("Jessica")) +
-print(brief("Mattia")) +
-</code> +
-</WRAP> +
-<WRAP right round box 45%> +
-<code text> +
-Liebe(r) Jessica +
-Liebe(r) Mattia +
-</code> +
-</WRAP> +
-</WRAP> +
- +
-<hidden Bonus:> +
-Erzeuge nun mit demselben Hauptprogamm die Ausgabe (nur die Funktion ''brief'' ist zu ändern): +
- +
-{{:lehrkraefte:snr:informatik:bruehl-2022:brief.png?200|}} +
- +
-<hidden Hinweis:> +
-Nutze das Escape-Zeichen ''\n'' aus [[lehrkraefte:snr:informatik:bruehl-2022:funktionen#aufgabe_4_rechnen_mit_strings_zeichenketten_und_zeilenumbruch|Aufgabe 4]] und Addition von Strings. +
-</hidden> +
-</hidden> +
-</WRAP> +
- +
- +
-===== Aufgabe 8, Mäander (Ornamentik), mehrere Funktionen kombinieren =====+
  
 <WRAP center round todo 100%> <WRAP center round todo 100%>
Line 433: Line 245:
  
 <WRAP center round todo 100%> <WRAP center round todo 100%>
-  * Aufgabe (Mäander) oder eine Variation deiner Wahl davon von ähnlicher Schwierigkeit+  * Aufgabe (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: Abgabe bis **spätestens Sonntagabend 23:59 Uhr** vor der nächsten Doppellektion über den folgenden Link:
Line 447: Line 259:
   * Wie unterscheiden sich Funktionsaufruf und Funktionsdefinition?   * Wie unterscheiden sich Funktionsaufruf und Funktionsdefinition?
   * Was ist ein Parameter?   * Was ist ein Parameter?
-  * Was ist ein Rückgabewert? 
  
 ===== Struktur von Programmen ==== ===== Struktur von Programmen ====
Line 529: Line 340:
  
 <hidden Was hast du gelernt? Wozu ist es gut? Erst selbst überlegen!>  <hidden Was hast du gelernt? Wozu ist es gut? Erst selbst überlegen!> 
-  * Ich weiss, was Modularisierung/modularer Entwurf.+  * Modularisierung / modularer Entwurf / Baukastenprinzip
   * Ich weiss, wie man Funktionen mit/ohne Parameter und mit/ohne Rückgabewert definiert.   * Ich weiss, wie man Funktionen mit/ohne Parameter und mit/ohne Rückgabewert definiert.
   * Funktionen dienen der besseren Strukturierung von Programmen.   * Funktionen dienen der besseren Strukturierung von Programmen.
   * Sie sind besonders nützlich, wenn man gewisse Programmteile mehrfach verwenden möchte.   * Sie sind besonders nützlich, wenn man gewisse Programmteile mehrfach verwenden möchte.
-  * Ich weiss, wie man mit Strings rechnet (Addition zweier Strings, Multiplikation eines Strings mit einer Zahl) und was ''"\n"'' bedeutet. +  * <del>Teilweise: Ich weiss, wie man mit Strings rechnet (Addition zweier Strings, Multiplikation eines Strings mit einer Zahl) und was ''"\n"'' bedeutet. 
-</hidden>+</del></hidden>
  
  
Line 546: Line 357:
  
  
-===== Bonusaufgabe 1 (leicht), Funktionen mit mehreren Parametern und ohne Rückgabewert definieren ===== 
  
-<WRAP center round todo 100%> 
-**Einzelarbeit, ca. 6 Minuten** 
- 
-Genauso kann man Funktionen mit mehreren Parametern definieren: 
-Ergänze den folgenden Code um die Definition der Funktion ''polygon'' mit vier Parametern ''n'', ''dicke'', ''farbe'', ''s'', so dass die Zeichnung rechts entsteht.((Polygon ist das Fremdwort für //Vieleck//, von griechisch πολυς polys //viel// und γωνια gonia //Ecke// oder //Winkel//.)) 
-<WRAP left round box 50%> 
-<code python> 
-from gturtle import * 
- 
-def polygon(n, dicke, farbe, s): 
-# Rest der Funktionsdefinition zu ergänzen 
-        
-makeTurtle() 
-hideTurtle() 
-polygon(7, 12, "green", 140) 
-polygon(5, 10, "red", 120) 
-polygon(3, 8, "blue", 100) 
-</code> 
-</WRAP> 
-<WRAP right round box 40%> 
-{{:lehrkraefte:snr:informatik:bruehl-2022:several-polygons.png?200|}} 
-</WRAP> 
-</WRAP> 
- 
-===== Bonusaufgabe 2 (leicht), Funktionen mit mehreren Parametern und mit Rückgabewert definieren ===== 
- 
-<WRAP center round todo 100%> 
-**Einzelarbeit, ca. 8 Minuten** 
- 
-Schreibe eine Funktion ''hypotenuse'', die die Länge der beiden Katheten eines rechtwinkligen Dreiecks vom Benutzer entgegennimmt und die Länge der Hypotenuse berechnet (mit Hilfe des Satzes des Pythagoras). 
- 
-Die Ausgabe soll wieder gut lesbar sein und beispielsweise wie folgt aussehen.  
-<code text> 
-Kathetenlängen: 3 und 4 
-Länge der Hypotenuse: 5 
-</code> 
- 
-Hinweis: Die Funktion ''sqrt'' liefert die Quadratwurzel (dabei steht "sqrt" für englisch "square root", also "Quadratwurzel). Beispielsweise liefert ''sqrt(2)'' die Zahl ''1.414213...''. 
-<hidden Hier ist die Formel versteckt, damit es nicht daran scheitert...> 
-Wenn die beiden Katheten (= "kurzen Seiten") in einem rechtwinkligen Dreieck die Längen ''a'' und ''b'' haben, so hat die Hypotenuse (= "längste Seite", dem rechten Winkel gegenüberliegend) die Länge 
-<WRAP center round box 100%> 
-$$c = \sqrt{a^2+b^2}$$ 
-</WRAP> 
- 
-</hidden> 
-</WRAP> 
  
-===== Bonusaufgabe 3: Kreis aus St. Galler Wappen oder Blumen =====+===== Bonusaufgabe: Kreis aus St. Galler Wappen oder Blumen =====
  
 <WRAP center round todo 100%> <WRAP center round todo 100%>
Line 820: Line 584:
 ===== Lösungsvorschläge ===== ===== Lösungsvorschläge =====
  
-<hidden zu ergänzen>+<hidden Aufgabe 2>
 <code python> <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)
 </code> </code>
 </hidden> </hidden>
 +
 +<hidden Aufgabe 3>
 +<code python>
 +from gturtle import *
 +
 +def vieleck(x):
 +    repeat x:
 +        forward(50)
 +        right(360/x)
 +
 +makeTurtle()
 +# hideTurtle()
 +
 +n = 3
 +repeat 11:
 +    vieleck(n)
 +    n = n + 1
 +</code>
 +</hidden>
 +
 +<hidden Aufgabe 4, Lösung von Vanessa (nur ''showTurtle()'' auskommentiert)>
 +<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("black")
 +penWidth(10)
 +#showTurtle()
 +repeat 2:
 +    wiederholeOrnament(8)
 +    eckBewegung()
 +    wiederholeOrnament(6)
 +    eckBewegung()
 +</code>
 +</hidden>
 +
  
 <hidden Kreis aus St. Galler Wappen> <hidden Kreis aus St. Galler Wappen>
  • lehrkraefte/snr/informatik/bruehl-2022/funktionen.1647952691.txt.gz
  • Last modified: 2022/03/22 13:38
  • by Olaf Schnürer