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_ii_sca [2025-05-19 20:04] – [Kapitel V: Modern Art] scagf_informatik:programmieren_ii_sca [2025-05-27 09:15] (aktuell) – [Kapitel V: Modern Art] sca
Zeile 508: Zeile 508:
 ===== - For-Schleifen ===== ===== - For-Schleifen =====
  
 +++++Lernziele|
 +
 +**Lernziele:**
 +
 +   * For-Schleifen mit while-Schleifen vergleichen: Was sind die Gemeinsamkeiten, was die Unterschiede? Welche Vorteile hat die for-Schleife?
 +   * Mit einer for-Schleife die Elemente einer Liste durchgehen und mit diesen etwas machen. Bsp.: Zahlen in Liste aufsummieren.
 +   * Mit einer for-Schleife die Symbole eines Strings durchgehen und mit diesen etwas machen.
 +   * For-Schleifen mit range verwenden.
 +   * Wissen, wann man range verwenden sollte und wann nicht.
 +   * Eine while-Schleife in eine for-Schleife 'übersetzen' und umgekehrt.
 +   * Mit einer for-Schleife eine leere Liste befüllen: Starte mit einer leeren Liste und füge dieser in jedem Durchlauf der Schleife ein Element hinzu.
 +   * Mit einer for-Schleife einen leeren String befüllen: Starte mit einem leeren String und füge diesem in jedem Durchlauf der Schleife ein Symbol hinzu. Achtung: Funktioniert etwas anders als bei Listen.
 +   * Anspruchsvoll: Code mit zwei ineinander verschachtelten for-Schleifen.
 +
 +**Tipps zur Vorbereitung:**
 +
 +   * Aufgaben im Stile der Aufgaben im Wiki lösen.
 +   * Lasse dir neue Aufgaben generieren von ChatGPT, Prompt z.B.: "Generiere mir einige Aufgaben, die ich mit for-Schleifen in Python lösen kann".
 +
 +**Typische Aufgaben:**
 +
 +   * Werte einer Liste aufsummieren.
 +   * Zählen, wie oft ein Element in einer Liste/String vorkommt.
 +   * Position(en) von Element in Liste/String bestimmen.
 +   * Leere Liste/String mit Werten befüllen. Zum Beispiel:
 +     * Generiere Liste mit allen vielfachen von Drei von 3 bis und mit 999.
 +     * Generiere Liste mit Werten von Zahlenfolge (z.B. Fibonacci).
 +   * For-Schleife in while übersetzen und umgekehrt.
 +
 +   * For-Schleifen mit while-Schleifen vergleichen: Was sind die Gemeinsamkeiten, was die Unterschiede? Welche Vorteile hat die for-Schleife?
 +   * Mit einer for-Schleife die Elemente einer Liste durchgehen und mit diesen etwas machen. Bsp.: Zahlen in Liste aufsummieren.
 +   * Mit einer for-Schleife die Symbole eines Strings durchgehen und mit diesen etwas machen.
 +   * For-Schleifen mit range verwenden.
 +   * Wissen, wann man range verwenden sollte und wann nicht.
 +   * Eine while-Schleife in eine for-Schleife 'übersetzen' und umgekehrt.
 +   * Mit einer for-Schleife eine leere Liste befüllen: Starte mit einer leeren Liste und füge dieser in jedem Durchlauf der Schleife ein Element hinzu.
 +   * Mit einer for-Schleife einen leeren String befüllen: Starte mit einem leeren String und füge diesem in jedem Durchlauf der Schleife ein Symbol hinzu. Achtung: Funktioniert etwas anders als bei Listen.
 +   * Anspruchsvoll: Code mit zwei ineinander verschachtelten for-Schleifen.
 +
 +Tipps zur Vorbereitung:
 +
 +   * Aufgaben im Stile der Aufgaben im Wiki lösen.
 +   * Lasse dir neue Aufgaben generieren von ChatGPT, Prompt z.B.: "Generiere mir einige Aufgaben, die ich mit for-Schleifen in Python lösen kann".
 +
 +Typische Aufgaben:
 +
 +   * Werte einer Liste aufsummieren.
 +   * Zählen, wie oft ein Element in einer Liste/String vorkommt.
 +   * Position(en) von Element in Liste/String bestimmen.
 +   * Leere Liste/String mit Werten befüllen. Zum Beispiel:
 +     * Generiere Liste mit allen vielfachen von Drei von 3 bis und mit 999.
 +     * Generiere Liste mit Werten von Zahlenfolge (z.B. Fibonacci).
 +   * For-Schleife in while übersetzen und umgekehrt.
 +
 +++++
 ==== Theorie I: Über Listen und Strings iterieren ==== ==== Theorie I: Über Listen und Strings iterieren ====
  
Zeile 1034: Zeile 1089:
 ==== - Einführung: Funktionen & Modern Art ==== ==== - Einführung: Funktionen & Modern Art ====
  
-Theorie & Aufträge in Slides:+++++Lernziele| 
 + 
 +**Lernziele:** 
 + 
 +   * Wissen, was ein Funktionen sind und warum diese nützlich sind. 
 +   * Funktionen definieren ohne Input und ohne/mit Rückgabewert. 
 +   * Den Rückgabewert einer Funktion in der Konsole ausgeben. 
 +   * Den Rückgabewert einer Funktion in einer Variablen speichern und mit diesem weiterarbeiten. 
 +   * Mit random-Modul Zufallszahlen erzeugen können. 
 + 
 +**Tipps zur Vorbereitung:** 
 + 
 +   * Aufgaben im Stile der Aufgaben im Wiki lösen. 
 +   * Lasse dir neue Aufgaben generieren von ChatGPT, Prompt z.B.: "Generiere mir einige Aufgaben, die ich mit for-Schleifen in Python lösen kann"
 + 
 +**Typische Aufgaben:** 
 + 
 +   * Funktion schreiben, die Figur zeichnet mit gturtle. 
 +   * Mathematische Funktion schreiben, die etwas berechnet und zurückgibt (z.B. Pythagoras). 
 + 
 +++++ 
 + 
 +**Theorie & Aufträge in Slides:**
  
 {{ :gf_informatik:gfif_funktionen_i.pdf |Slides Modern Art & Funktionen}} {{ :gf_informatik:gfif_funktionen_i.pdf |Slides Modern Art & Funktionen}}
Zeile 1460: Zeile 1537:
 </code></WRAP> </code></WRAP>
  
 +++++Lösung Modern Art mit Quadraten und Dreiecken|
  
-<nodisp 2>+<code python> 
 +from gturtle import * 
 +import random 
 + 
 +turi = Turtle() 
 +turi.hideTurtle() 
 + 
 +colors = ['red','blue','green','yellow','purple','black'
 +#                1                         5 
 + 
 +def dreieck(x,y): 
 +    r_width = random.randint(3,7) 
 +    turi.setPenWidth(r_width) 
 +     
 +    r_pen_col = random.randint(0,len(colors)-1) 
 +    turi.setPenColor(colors[r_pen_col]) 
 +     
 +    r_fill_col = random.randint(0,len(colors)-1) 
 +    turi.setFillColor(colors[r_fill_col]) 
 +     
 +    r_side = random.randint(40,150) 
 +     
 +    turi.setPos(x,y) 
 +    turi.startPath() 
 +    for i in range(3): 
 +        turi.forward(r_side) 
 +        turi.left(120) 
 +     
 +    turi.fillPath() 
 + 
 + 
 +def quadrat(x,y): 
 +    r_width = random.randint(10,30) 
 +    turi.setPenWidth(r_width) 
 +     
 +    r_pen_col = random.randint(0,len(colors)-1) 
 +    turi.setPenColor(colors[r_pen_col]) 
 +     
 +    r_fill_col = random.randint(0,len(colors)-1) 
 +    turi.setFillColor(colors[r_fill_col]) 
 +     
 +    r_side = random.randint(20,150) 
 +     
 +    turi.setPos(x,y) 
 +    turi.startPath() 
 +    for i in range(4): 
 +        turi.forward(r_side) 
 +        turi.left(90) 
 +     
 +    turi.fillPath() 
 + 
 +r_anz_figs = random.randint(30,40) 
 + 
 +for i in range(r_anz_figs): 
 +    x_rand = random.randint(-300,300) 
 +    y_rand = random.randint(-200,200) 
 + 
 +    r_figur = random.randint(0,1) 
 +    if r_figur == 0: 
 +        quadrat(x_rand,y_rand) 
 +    else: 
 +        dreieck(x_rand,y_rand) 
 +</code> 
 + 
 +++++
  
-NODISP+==== - Aufgaben (Funktionen) ====
  
-=== Aufgabe ===+=== Aufgabe Würfelvolumen ===
  
-Definiere eine Funktion mit einem Argument `volume_cube(x)`, die das Volumen eines Würfels mit Seitenlänge $x$ (in cm) berechnet und zurückgibt (also NICHT printed). Speichere das Resultat in einer Variablen und gebe es dann aus.+Definiere eine Funktion mit einem Argument `volume_cube(x)`, die das Volumen eines Würfels mit Seitenlänge $x$ (in cm) berechnet und zurückgibt (also NICHT printed). Speichere das Resultat in einer Variablen und gib es dann aus.
  
 Welches Volumen hat ein Würfel mit Seitenlänge 13 cm? Welches Volumen hat ein Würfel mit Seitenlänge 13 cm?
  
-=== Aufgabe ===+++++Lösung| 
 + 
 +<code python> 
 +def volume_cube(x): 
 +    return x**3 
 + 
 +vol = volume_cube(13) 
 +print(vol) 
 +</code> 
 + 
 +++++ 
 + 
 +=== Aufgabe Kugelvolumen ===
  
 Das Volumen einer Kugel mit Radius $R$ ist: $$V = \frac{4\pi}{3}\cdot R^3$$ Das Volumen einer Kugel mit Radius $R$ ist: $$V = \frac{4\pi}{3}\cdot R^3$$
 Definiere eine Funktion `volume_sphere(...)`, der man als Argument den Radius übergibt und die dann das Volumen zurückgibt. Die Kreiszahl Pi ($\pi$) kannst du mit `math.pi` aufrufen, dazu muss aber auch wieder zuerst das math-Modul importiert werden (`import math`). Definiere eine Funktion `volume_sphere(...)`, der man als Argument den Radius übergibt und die dann das Volumen zurückgibt. Die Kreiszahl Pi ($\pi$) kannst du mit `math.pi` aufrufen, dazu muss aber auch wieder zuerst das math-Modul importiert werden (`import math`).
  
-=== Aufgabe ===+++++Lösung| 
 + 
 +<code python> 
 +import math 
 + 
 +def volume_sphere(r): 
 +    return 4 * math.pi / 3 * r**3 
 + 
 +vol = volume_sphere(5) 
 +print(vol) 
 +</code> 
 + 
 +++++ 
 + 
 +=== Aufgabe Notenberechnung ===
  
 Schreibe eine Funktion `grade(points)`, die dir die Note (grade) für eine gegebene Punktzahl berechnet und zurückgibt. Lege die Punktzahl, die für die Note $6$ notwendig ist in einer Konstanten (wie Variable, aber alles Grossbuchstaben) fest. Die Formel geht wie folgt: Schreibe eine Funktion `grade(points)`, die dir die Note (grade) für eine gegebene Punktzahl berechnet und zurückgibt. Lege die Punktzahl, die für die Note $6$ notwendig ist in einer Konstanten (wie Variable, aber alles Grossbuchstaben) fest. Die Formel geht wie folgt:
Zeile 1485: Zeile 1653:
    * Erreicht man mehr Punkte als notwendig für Note 6, soll man trotzdem die Note 6 erhalten.    * Erreicht man mehr Punkte als notwendig für Note 6, soll man trotzdem die Note 6 erhalten.
  
-=== Aufgabe ===+++++Lösung| 
 + 
 +<code python> 
 +POINTS_FOR_SIX = 22 
 + 
 +def grade(points): 
 +    g = round(5 * points / POINTS_FOR_SIX + 1,2) 
 +    if g > 6: 
 +        return 6 
 +    return g # kann auch vorher noch else: schreiben, macht keinen Unterschied 
 + 
 +print(grade(0)) 
 +print(grade(20)) 
 +print(grade(22)) 
 +print(grade(24)) 
 +</code> 
 + 
 +++++ 
 + 
 + 
 +=== Aufgabe Liste mit Vielfachen ===
  
 Schreibe eine Funktion `liste_vielfache(vv,anzahl)`, welche zwei Zahlen als Inputs verlangt. Es soll eine Liste mit der Anzahl `anz` der Vielfachen der Zahl `vv` erstellt werden und zurückgegeben (nicht geprintet!) werden. Zum Beispiel soll `liste_vielfache(3,5)` die Liste `[3,6,9,12,15]` zurückgeben. Schreibe eine Funktion `liste_vielfache(vv,anzahl)`, welche zwei Zahlen als Inputs verlangt. Es soll eine Liste mit der Anzahl `anz` der Vielfachen der Zahl `vv` erstellt werden und zurückgegeben (nicht geprintet!) werden. Zum Beispiel soll `liste_vielfache(3,5)` die Liste `[3,6,9,12,15]` zurückgeben.
  
-=== Aufgabe ===+++++Lösung| 
 + 
 +<code python> 
 +def liste_vielfache(vv,anzahl): 
 +    li = [] # Wichtig, dass in und NICHT ausserhalb der Funktion definiert wird. Warum? 
 +    for i in range(1,anzahl+1): 
 +        li.append(i*vv) 
 +    return li 
 +     
 +print(liste_vielfache(3,5)) 
 +</code> 
 + 
 +++++ 
 + 
 +=== Aufgabe Fakutltät ===
  
 Die **Fakultät** ist eine Funktion, welche jeder ganzen natürlichen Zahl das Produkt aller natürlichen Zahlen (ohne Null) kleiner und gleich dieser Zahl zuordnet. Sie wird mit einem Ausrufezeichen geschrieben. Als Beispiel: $5!=1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 =120$. Die **Fakultät** ist eine Funktion, welche jeder ganzen natürlichen Zahl das Produkt aller natürlichen Zahlen (ohne Null) kleiner und gleich dieser Zahl zuordnet. Sie wird mit einem Ausrufezeichen geschrieben. Als Beispiel: $5!=1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 =120$.
  
-Schreibe eine Funktion `faculty(...)`, welcher als Argument eine ganze Zahl übergeben wird und welche dir dann die Fakultät dieser Zahl zurückgibt.+Schreibe eine Funktion `factorial(...)`, welcher als Argument eine ganze Zahl übergeben wird und welche dir dann die Fakultät dieser Zahl zurückgibt.
  
 **Optionale Challenge für absolute Freaks**: Kannst du die Fakultät ganz ohne Schleife berechnen? Dann hast du das Prinzip der *Rekursion* (Selbst-Aufruf) entdeckt! **Optionale Challenge für absolute Freaks**: Kannst du die Fakultät ganz ohne Schleife berechnen? Dann hast du das Prinzip der *Rekursion* (Selbst-Aufruf) entdeckt!
  
-=== Aufgabe (Zusatzaufgabe) ===+++++Lösung| 
 + 
 +<code python> 
 +def factorial(n): 
 +    p = 1 
 +    for i in range(1,n+1): 
 +        p = p * i 
 +    return p 
 + 
 +print(factorial(0)) 
 +print(factorial(1)) 
 +print(factorial(2)) 
 +print(factorial(3)) 
 +print(factorial(4)) 
 +print(factorial(5)) 
 +</code> 
 + 
 +++++ 
 + 
 +=== Aufgabe Mitternachtsformel (Zusatzaufgabe) ===
  
-**Mitternachtsformel:** Eine quadratische Funktion kann immer in die Form $$ax^2 + bx + c = 0$$ gebracht werden. Die Lösung ist gegeben durch:+Eine quadratische Funktion kann immer in die Form $$ax^2 + bx + c = 0$$ gebracht werden. Die Lösung ist gegeben durch die sogenannte **Mitternachtsformel**:
 $$x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}$$ $$x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}$$
  
Zeile 1514: Zeile 1735:
    * $x^2 - 4 x + 4 = 0$ hat eine Lösung: $2$    * $x^2 - 4 x + 4 = 0$ hat eine Lösung: $2$
    * $x^2 + 2 x + 7 = 0$ hat keine Lösung    * $x^2 + 2 x + 7 = 0$ hat keine Lösung
 +
 +
 +++++Lösung|
 +
 +<code python>
 +def mitternachtsformel(a,b,c):
 +    d = b**2 - 4*a*c
 +    if d < 0:
 +        return []
 +    elif d == 0:
 +        return [-b/(2*a)]
 +    else:
 +        return [(-b-sqrt(d))/(2*a),(-b+sqrt(d))/(2*a)]
 +    
 +print(mitternachtsformel(3,-6,-5))
 +print(mitternachtsformel(1,-4,4))
 +print(mitternachtsformel(1,2,7))
 +
 +</code>
 +
 +++++
  
  
  
-</nodisp> 
  • gf_informatik/programmieren_ii_sca.1747685061.txt.gz
  • Zuletzt geändert: 2025-05-19 20:04
  • von sca