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_v_gra [2025-09-10 13:31] – [PA4 – Zehn Vielfache] gragf_informatik:programmieren_v_gra [2025-10-01 07:22] (aktuell) – [BP8 – Rückwärts ausgeben] gra
Zeile 3: Zeile 3:
  
 ++++ Vorausgesetzte Kompetenzen:| ++++ Vorausgesetzte Kompetenzen:|
-  - Ich beherrsche die in Teil 1 und 2 gelernten Grundlagen in python (Turtlegraphics, Variablen, while-Schleife, Verzweigungen, Vergleichsoperatoren, mathematische Operatoren, f-Strings, Funktionen ''print'' und ''input'', nie repeat verwenden, clever und kompakt programmieren).+  - Ich beherrsche die in Teil 1 und 2 gelernten Grundlagen in Python (Turtlegraphics, Variablen, while-Schleife, Verzweigungen, Vergleichsoperatoren, mathematische Operatoren, f-Strings, Funktionen ''print'' und ''input'', nie repeat verwenden, clever und kompakt programmieren).
   - Ich beherrsche den Umgang mit Listen, wie in Teil 3 gelernt:   - Ich beherrsche den Umgang mit Listen, wie in Teil 3 gelernt:
     * Listen korrekt erstellen – leer oder mit Zahlen oder mit Texten drin.     * Listen korrekt erstellen – leer oder mit Zahlen oder mit Texten drin.
Zeile 10: Zeile 10:
     * Mit ''in'' fragen, ob ein bestimmtes Element in einer Liste vorkommt.     * Mit ''in'' fragen, ob ein bestimmtes Element in einer Liste vorkommt.
     * Listen analysieren (z.B. Mittelwert ermitteln) oder verändern (z.B. bestimmte Elemente ersetzen etc.).     * Listen analysieren (z.B. Mittelwert ermitteln) oder verändern (z.B. bestimmte Elemente ersetzen etc.).
-  - Ich kann in Pyhton //Funktionen// (mit und ohne //Argumente//, mit und ohne //Rückgabewerte//) korrekt //definieren// und //aufrufen//, wie in Teil 4 gelernt.+  - Ich kann in Python //Funktionen// (mit und ohne //Argumente//, mit und ohne //Rückgabewerte//) korrekt //definieren// und //aufrufen//, wie in Teil 4 gelernt.
   - Ich kann jeden //Begriff// des vorhergehenden Satzes erklären.   - Ich kann jeden //Begriff// des vorhergehenden Satzes erklären.
 ++++ ++++
Zeile 259: Zeile 259:
 wort = "Igel-Illustration" # Positionen: (0), (5), 14 wort = "Igel-Illustration" # Positionen: (0), (5), 14
 </code> </code>
 +
 +== Zusatzaufgabe (Optional) ==
 +Erweitere den Code, sodass die Positionen nicht untereinander ausgegeben werden, sondern nebeneinander (in einem String). 
  
 === PA9 – Doppelte === === PA9 – Doppelte ===
Zeile 343: Zeile 346:
 ++++ ++++
 === PB6 – Anzahl x === === PB6 – Anzahl x ===
-Schreibe eine Funktion ''anzahl\_x(liste, x)'', die die Positionen aller Wörter mit Buchstabe x ermittelt und die Anzahl **zurück**gibt. +Schreibe eine Funktion ''anzahl\_x(liste, x)'', die die Wörter in ''liste'' mit Buchstabe ''x'' zählt und die Anzahl **zurück**gibt. 
  
 Zum Beispiel soll der Aufruf ''anzahl_x(monate, 'u')'' (mit obiger Liste monate) die Zahl 5 zurückgeben. Zum Beispiel soll der Aufruf ''anzahl_x(monate, 'u')'' (mit obiger Liste monate) die Zahl 5 zurückgeben.
Zeile 357: Zeile 360:
  
 === BP8 – Rückwärts ausgeben === === BP8 – Rückwärts ausgeben ===
-Schreibe eine Funktion ''rueckwaerts_ausgeben(text)'', die jedes Zeichen des Texts rückwärts in einer neuen Zeile ausgibt. Verwende eine indirekte for-Schleife.+<WRAP group> 
 +<WRAP column twothirds> 
 +Schreibe eine Funktion ''rueckwaerts\_ausgeben(text)'', die //jedes Zeichen des Texts rückwärts in einer neuen Zeile// ausgibt. Für den Aufruf  ''rueckwaerts\_ausgeben('Hallo')'' sollte nebenstehendes Resultat erscheinen.  
 + 
 +Tipp: Verwende eine indirekte for-Schleife. Die Definition der Funktion benötigt nur 3 Zeilen. 
 +</WRAP> 
 +<WRAP column third> 
 +<code> 
 +
 +
 +
 +
 +
 +</code> 
 +</WRAP> 
 +</WRAP> 
 + 
  
 === BP9 – Punkte-Linie === === BP9 – Punkte-Linie ===
Zeile 378: Zeile 398:
   * Verwende die Funktion ''rightArc(radius, winkel)''.   * Verwende die Funktion ''rightArc(radius, winkel)''.
     * Setze ''radius'' auf 100.     * Setze ''radius'' auf 100.
-    * Du kannst davon ausgehen, dass ''list'' 12 Elemente hat: Wie gross muss ''winkel'' sein, damit der Kreis am Ende geschlossen ist. +    * Du kannst davon ausgehen, dass ''list'' 12 Elemente hat: Wie gross muss ''winkel'' sein, damit der Kreis am Ende geschlossen ist? 
-  * Der Aufruf ''dot\_arc(dot_sizes)'' sollte nebenstehendes Muster ergeben.+  * Der Aufruf ''dot\_arc(diameters)'' sollte nebenstehendes Muster ergeben.
  
 <code python> <code python>
Zeile 402: Zeile 422:
  
 <WRAP column half> <WRAP column half>
-{{.:programmieren_v_gra:pasted:20250730-143828.png?250}} {{.:programmieren_v_gra:pasted:20250730-143915.png?250}}+{{.:programmieren_v_gra:pasted:20250730-143828.png?200}} {{.:programmieren_v_gra:pasted:20250730-143915.png?200}}
 </WRAP> </WRAP>
  
Zeile 431: Zeile 451:
  
 === Q1 – Fakultät === === Q1 – Fakultät ===
-Schreibe eine Funktion ''falultaet(zahl)'', das mithilfe einer for-Schleife die [[https://de.wikipedia.org/wiki/Fakult%C3%A4t_(Mathematik)|Fakultät]] zu ''zahl'' berechnet und **aus**gibt.+Schreibe eine Funktion ''fakultaet(zahl)'', das mithilfe einer for-Schleife die [[https://de.wikipedia.org/wiki/Fakult%C3%A4t_(Mathematik)|Fakultät]] zu ''zahl'' berechnet und **aus**gibt.
 Beispiele:  Beispiele: 
   * Die Fakultät zur Zahl 1 ist 1 = 1   * Die Fakultät zur Zahl 1 ist 1 = 1
Zeile 443: Zeile 463:
   * Wenn die Farben-Liste kürzer ist als die Durchmesser-Liste, wird die Farben-Liste wiederholt: Nach der letzten Farbe in der Liste wird wieder die erste gewählt. Tipp: Modulo-Operator (%).   * Wenn die Farben-Liste kürzer ist als die Durchmesser-Liste, wird die Farben-Liste wiederholt: Nach der letzten Farbe in der Liste wird wieder die erste gewählt. Tipp: Modulo-Operator (%).
   * Wenn die Durchmesser-Liste kürzer ist als die Farben-Liste, werden die übrigen Farben ignoriert.   * Wenn die Durchmesser-Liste kürzer ist als die Farben-Liste, werden die übrigen Farben ignoriert.
 +
 +=== Q3 – 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 =====
  
 **Achtung:** Meist gibt es mehrere Lösungen. Nur weil deine Lösung anders ist als diejenige in den Musterlösungen unten, bedeutet dies nicht, dass deine nicht richtig/gut ist. Sende oder zeige im Zweifelsfall deine Lösung der Lehrperson. **Achtung:** Meist gibt es mehrere Lösungen. Nur weil deine Lösung anders ist als diejenige in den Musterlösungen unten, bedeutet dies nicht, dass deine nicht richtig/gut ist. Sende oder zeige im Zweifelsfall deine Lösung der Lehrperson.
  
-<nodisp 2>+<nodisp 1>
 ++++Lösungen zu Aufgaben PA:| ++++Lösungen zu Aufgaben PA:|
 === PA1 === === PA1 ===
Zeile 780: Zeile 852:
          
 dot_arc(diameters, colors) dot_arc(diameters, colors)
 +</code>
 +++++
 +</nodisp>
 +<nodisp 2>
 +++++Lösungen zu Aufgaben Q:|
 +=== Q1 ===
 +<code python>
 +def fakultaet(zahl):
 +    result = 1
 +    for i in range(1,zahl+1):
 +        result = result * i
 +    print(result)
 +
 +fakultaet(0)
 +fakultaet(1)
 +fakultaet(4)
 +</code>
 +
 +=== Q2 ===
 +<code python>
 +from gturtle import *
 +raffael = Turtle()
 + 
 +def dot_arc(l_dia, l_col):
 +    i = 0
 +    angle = 360/len(l_dia)
 +    for i in range(len(l_dia)):
 +        if(len(l_col) != 0):
 +            raffael.setPenColor(l_col[i%len(l_col)])
 +        raffael.rightArc(100,angle)
 +        raffael.dot(l_dia[i]) 
 + 
 +diameters = [30, 40, 30, 40, 60, 40, 30, 50, 30, 50]
 +colors = ["crimson", "blue", "gold"]
 + 
 +dot_arc(diameters, colors)
 +</code>
 +
 +=== Q3 ===
 +<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> </code>
 ++++ ++++
 </nodisp> </nodisp>
  • gf_informatik/programmieren_v_gra.1757511100.txt.gz
  • Zuletzt geändert: 2025-09-10 13:31
  • von gra