Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
gf_informatik:programmieren_iv_gra [2025-06-11 13:25] gragf_informatik:programmieren_iv_gra [2025-09-22 12:43] (aktuell) – [5. Lösungen] gra
Zeile 1: Zeile 1:
-====== Programmieren Teil 4 – Funktionen (Unterprogramme) ====== +====== Programmieren Teil 4 – Funktionen ====== 
-  * Dieses Seite ist die Fortsetzung von [[gf_informatik:programmieren_iii_gra|]]. +  * Dieses Seite ist die Fortsetzung von [[gf_informatik:programmieren_iii_gra|]]. 
 +  * Weiter zu [[gf_informatik:programmieren_v_gra|]]. 
 + 
 +<nodisp 2> 
 +++++Verbessern (hidden):
 +  * Fancy Aufgaben nach O verschieben, dafür mehr einfache, kleine Aufgaben zum Üben.  
 +    * Insbesondere mehr Aufgaben mit Listen und 
 +    * Verknüpfungen von Bedingungen mit logischen Operatoren 
 +  * Evtl. Grafik o.ä. zu einer Zeile mit Aufruf einer Funktion mit Rückgabewert – z.B. print(volumen(h,l,b)) Argumente (in Klammern nach Name) ist Eingaben. Gesamter Name inkl Klammern = Ausgabe(n). 
 +  * Evtl. Lernziele bezüglich Verknüpfungen von Bedingungen präzisieren.  
 +++++ 
 +</nodisp>
  
 ++++Lernziele:| ++++Lernziele:|
Zeile 25: Zeile 36:
 ===== - Einführung ===== ===== - Einführung =====
 Du kennst Variablen – darin kannst du einen Wert speichern. Und du kennst Listen – darin kannst du mehrere Werte speichern. Aber du hast dich villeicht schon gefragt: <color #0433ff>"Was, wenn ich gleich mehrere Codezeilen irgendwo unterbringen will?"</color>. Für diese Idee gibt es **Funktionen**, die wir auch **Unterprogramme** nennen können. Du kennst Variablen – darin kannst du einen Wert speichern. Und du kennst Listen – darin kannst du mehrere Werte speichern. Aber du hast dich villeicht schon gefragt: <color #0433ff>"Was, wenn ich gleich mehrere Codezeilen irgendwo unterbringen will?"</color>. Für diese Idee gibt es **Funktionen**, die wir auch **Unterprogramme** nennen können.
 +
 +
 === Auftrag 1 – Bereits bekannte Funktionen anschauen === === Auftrag 1 – Bereits bekannte Funktionen anschauen ===
 In Python sind viele Funktionen schon eingebaut. Du hast ein paar davon schon oft verwendet – zum Beispiel ''print'', ''input'' und ''len'': In Python sind viele Funktionen schon eingebaut. Du hast ein paar davon schon oft verwendet – zum Beispiel ''print'', ''input'' und ''len'':
 +
 <code python> <code python>
 print("Hallo") print("Hallo")
Zeile 407: Zeile 421:
     - Die Argumente ''min'' und ''max'' geben an, wie viele Punkte mindestens und höchstens gezeichnet werden.     - Die Argumente ''min'' und ''max'' geben an, wie viele Punkte mindestens und höchstens gezeichnet werden.
     - Das Argument ''farben'' ist eine **Liste** mit Farbnamen.      - Das Argument ''farben'' ist eine **Liste** mit Farbnamen. 
-    - Die Funktion zeichnet eine zufällige Anzahl Punkte (20 px) im gewünschten Bereich.  +    - Die Funktion zeichnet eine zufällige Anzahl Punkte (20 px) im gewünschten Bereich
-    - Die Position der Punkte wird ebenfalls zufällig bestimmt: x-Positionen im Bereich -250 bis 250, y-Positionen im Bereich -100 bis 100+    - Für jedem Punkt wird eine zufällige Farbe aus der Farbliste gewählt
 +    - Die Position jedes Punktes wird ebenfalls zufällig bestimmt: Die x-Position im Bereich -250 bis 250, die y-Position im Bereich -100 bis 100.
     - **Die Funktion gibt zurück, wie viele Punkte sie gezeichnet hat.**     - **Die Funktion gibt zurück, wie viele Punkte sie gezeichnet hat.**
   - Schreibe ein Programm, das die Funktion ''punkte'' verwendet:   - Schreibe ein Programm, das die Funktion ''punkte'' verwendet:
Zeile 520: Zeile 535:
 print(b) # Gibt 'u' aus print(b) # Gibt 'u' aus
 </code> </code>
 +
 </WRAP> </WRAP>
 </WRAP> </WRAP>
  
 +Die Funktion ''len()'' funktioniert sowohl für Listen als auch für Strings.
  
  
Zeile 529: Zeile 546:
 Schreibe eine Funktion ''text\_reverse(text)'', die einen Text rückwärts zurückgibt:  Schreibe eine Funktion ''text\_reverse(text)'', die einen Text rückwärts zurückgibt: 
   * Zum Beispiel soll der Aufruf ''text\_reverse("Roti Rösli im Garte")'' den Text "etraG mi ilsöR itoR" zurückgeben.   * Zum Beispiel soll der Aufruf ''text\_reverse("Roti Rösli im Garte")'' den Text "etraG mi ilsöR itoR" zurückgeben.
-  * **Verwende eine While-Schleife**, um von hinten nach vorne den String (den Text) zu gehen. +  * **Verwende eine While-Schleife**, um durch den String (den Text) zu gehen. 
     * Hinweis: Python böte mit der [[https://www.w3schools.com/python/gloss_python_string_slice.asp|String-Slicing-Syntax]] eine sehr kurze Lösung für diese Aufgabe. Wir verzichten hier aber auf String Slicing und bleiben vorerst bei der guten alten while-Schleife.     * Hinweis: Python böte mit der [[https://www.w3schools.com/python/gloss_python_string_slice.asp|String-Slicing-Syntax]] eine sehr kurze Lösung für diese Aufgabe. Wir verzichten hier aber auf String Slicing und bleiben vorerst bei der guten alten while-Schleife.
   * Teste deine Funktion.   * Teste deine Funktion.
Zeile 618: Zeile 635:
  
  
-=== O4 – Siebensegment-Anzeige === 
-<WRAP group> 
-<WRAP column twothirds> 
-Die [[https://en.wikipedia.org/wiki/Seven-segment_display|Siebensegmentanzeige]] ist grossartig: Man benötigt nur 7 längliche Lämpchen und kann damit nicht nur die Ziffern 0 bis 9, sondern auch viele Buchstaben anzeigen! In dieser Aufgabe soll deine Turtle als Siebensegmentanzeige funktionieren. 
- 
-{{:gf_informatik:programmieren_iv_gra:pasted:20250522-080927.png?600}} 
-</WRAP> 
-<WRAP column third> 
-{{:gf_informatik:programmieren_iv_gra:pasted:20250521-190507.png?200}} 
-</WRAP> 
-</WRAP> 
- 
-<WRAP group> 
-<WRAP column twothirds> 
-== Schritt 1 – Einzelnes Segment zeichnen == 
-Erstelle eine Funktion ''segment(length, color)''. Die Funktion zeichnet ein einzelnes Segment, das auf beiden Seiten spitz ausläuft – siehe Bild. 
-  * Das Argument ''length'' gibt die Länge des Segments von Spitz zu Spitz an. Damit genau diese Länge zustande kommt, musst du etwas rechnen. Eventuell brauchst du die Funktion ''sqrt'' und hierzu das Math-Modul (''import math''). 
-  * Das Argument ''color'' gibt die Farbe des Segments an. 
-  * Starte bei der einen Spitze und gehe davon aus, dass die Turtle in Richtung der anderen Spitze schaut, siehe Bild. 
-</WRAP> 
-<WRAP column third> 
-{{:gf_informatik:programmieren_iv_gra:pasted:20250521-191805.png?200}} 
-</WRAP> 
-</WRAP> 
- 
-<WRAP group> 
-<WRAP column twothirds> 
-== Schritt 2 – Codes definieren == 
-Im Bild rechts sind die 7 Segmente mit den Buchstaben A bis G bezeichnet. Den Dezimalpunkt lassen wir ausser Acht. Für die Ziffern **0** und **4** müssten die Segmente gemäss folgender Tabelle leuchten: 
-^  Ziffer  ^  A  ^  B  ^  C  ^  D  ^  E  ^  F  ^  G  ^  Binär-String   ^ 
-|  0        1  |  1  |  1  |  1  |  1  |  1  |  0  |  ''"1111110"''  | 
-|  4        0  |  1  |  1  |  0  |  0  |  1  |  1  |  ''"0110011"''  | 
- 
-  * Erstelle eine Liste ''binary\_strings[]'', die für jede Ziffer 0...9 den richtigen Binär-String enthält. 
- 
-== Schritt 3 – Zahl mit 7 Segmenten anzeigen == 
-Erstelle eine Funktion ''seven\_seg(number)''. Die Funktion zeichnet die 7 Segmente A bis G an den richtigen Positionen und in richtiger Farbe: 
-  * Verwende die bereits erstellte Funktion ''segment''. 
-  * Speichere für jedes Segment die x-Positionen, die y-Positionen und die Richtungen (heading) in Listen. 
-  * Das Argument number gibt an, welche Ziffer dargestellt werden soll. Verwende deine Liste ''binary\_strings[]'', um für jedes Segment zu entscheiden, ob es rot oder grau "gainsboro" sein soll. 
-  * Teste deine Funktion mit einem Programm, dass die Zahlen von 0 bis 9 im Sekundentakt (''delay(1000)'') hochzählt. 
-</WRAP> 
-<WRAP column third> 
-{{:gf_informatik:programmieren_iv_gra:pasted:20250521-191333.png?200}} 
-</WRAP> 
-</WRAP> 
  
-== Zusatzaufgaben == 
-  * Programmiere eine zweistellige Anzeige, die von 0 bis 99 zählen kann. 
-  * Programmiere eine digitale Uhr, die die aktuelle Zeit in Stunden, Minuten und Sekunden (von Doppelpunkten getrennt) anzeigt. 
  
 ===== - Lösungen ===== ===== - Lösungen =====
Zeile 977: Zeile 945:
 </nodisp> </nodisp>
  
-<nodisp 2>+<nodisp 1>
 ++++Lösungen zu Aufgaben NC:| ++++Lösungen zu Aufgaben NC:|
  
Zeile 1326: Zeile 1294:
 </code> </code>
  
-=== O4 === 
-<code python> 
-import math 
-from gturtle import *  
- 
-carl = Turtle() 
-carl.hideTurtle() 
- 
-def segment(length, color): 
-    l1 = length * 0.8 
-    l2 = (length - l1)/2 
-    side = l2 * math.sqrt(2) 
-    carl.setFillColor(color) 
-    carl.startPath() 
-    carl.right(45) 
-    repeat 2: 
-        carl.forward(side) 
-        carl.left(45) 
-        carl.forward(l1) 
-        carl.left(45) 
-        carl.forward(side) 
-        carl.left(90) 
-    carl.fillPath() 
-    carl.left(45) 
- 
-def seven_seg(number): 
-    segment_codes = ['1111110', # 0 
-                     '0110000',  
-                     '1101101',  
-                     '1111001',  
-                     '0110011',  
-                     '1011011',  
-                     '1011111',  
-                     '1110000',  
-                     '1111111',  
-                     '1111011'] # 9 
- 
-    xpositions = [0, 100, 100, 100, 0, 0, 0] 
-    ypositions = [0, 0, -100, -200, -200, -100, -100] 
-    headings = [90, 180, 180, 270, 0, 0, 90] 
-     
-    i = 0 
-    for s in segment_codes[number]: 
-        carl.setPos(xpositions[i], ypositions[i]) 
-        carl.setHeading(headings[i]) 
-        if s == '0': 
-            segment(100, "gainsboro") 
-        else: 
-            segment(100, "red") 
-        i = i + 1 
- 
-i = 0 
-while i <= 9: 
-    seven_seg(i) 
-    i = i + 1 
-    delay(1000) 
-</code> 
 ++++ ++++
 </nodisp> </nodisp>
  • gf_informatik/programmieren_iv_gra.1749648355.txt.gz
  • Zuletzt geändert: 2025-06-11 13:25
  • von gra