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:funktionen [2026-04-28 19:46] – [Aufgabe E2] hofgf_informatik:funktionen [2026-04-28 20:19] (aktuell) – [Aufgabe F6 (optional)] hof
Zeile 168: Zeile 168:
 === Aufgabe E3 === === Aufgabe E3 ===
  
-Schreibe eine Funktion `fortune_cookie()`, die ein Glückskeks-Spruch-Generator ist: Jedesmal wenn die Funktion aufgerufen wird, wird zufällig einer von mehreren Sprüchen ausgewählt und ausgegeben. Erfinde selber Sprüche oder klaue sie dreist aus dem Internet. +<bottom-exercise id="e3"> 
 +<div slot="prompt"> 
 +Schreibe eine Funktion <code>fortune_cookie()</code>, die ein Glückskeks-Spruch-Generator ist: Jedesmal wenn die Funktion aufgerufen wird, wird zufällig einer von mehreren Sprüchen ausgewählt und ausgegeben. Erfinde selber Sprüche oder klaue sie dreist aus dem Internet. 
 +<p>
 Rufe die Funktion auf. Rufe die Funktion auf.
- +</div
-<nodisp 1> +<template data-type="solution">
-++++Tipps:+
-Ähnlich wie Münzwurf-Funktion oben. Bestimme wieder eine Zufallszahl (z.B. im Bereich $1-5$, falls du fünf Sprüche hast). Falls die Zufallszahl $2$ ist, gibst du den zweiten Spruch aus. Verwende dazu eine if-elif-...-else-Verzweigung. +
-++++ +
-</nodisp> +
- +
-=== Aufgabe E4 === +
- +
-TurtleGraphics: Schreibe eine Funktion `square(x)`, die eine Zahl $x$ als Argument entgegen nimmt und ein Quadrat mit dieser Länge zeichnet. +
- +
-=== Aufgabe E5 === +
- +
-Schreibe folgende Funktionen: +
-   * `square(x,y,l)`: Zeichnet Quadrat mit Seitenlänge l, startend an Position $(x,y)$ +
-   * `circle(x,y,r)`: Zeichnet Kreis mit Radius r, startend an Position $(x,y)$ +
-   * `rectange(x,y,a,b)`: Zeichnet Rechteck mit Seitenlängen a und b, startend an Position $(x,y)$ +
-   * `triangle(x,y,l)`: Zeichnet gleichseitiges Dreieck mit Seitenlänge l, startend an Position $(x,y)$ +
-   * Funktion für selbst gewählte geometrische Figur +
- +
-Mache nun moderne Kunst, indem du diese Funktionen aufrufst. +
- +
-**Challenge (optional):** Erstelle mit möglichst vielen Zufallswerten moderne Kunst. Ziel: Kunst von deinem Programm soll besser und schöner sein als die vom Programm der Lehrperson! +
- +
- Vom Zufall abhängen können z.B. folgende Werte: +
-   * Anzahl, wie oft jede Funktion aufgerufen wird. +
-   * Position von Figuren +
-   * Grössen von Figuren +
-   * Drehung von Figuren +
-   * Farben (Stift- und Füllfarbe), dazu kannst du den Funktionen weitere Argumente übergeben +
- +
-Tipps: +
-   * Es lohnt sich, z.B. eine Funktion `draw_random_shape()` zu definieren, die dann zufällig eine der Formen zeichnet. +
-   * Du kannst auch weitere Funktionen definieren, die dir das Leben erleichtern. +
- +
-<nodisp 1> +
-++++Lösungen Aufgaben E| +
- +
-==== Aufgaben E ==== +
- +
-=== Aufgabe E1 === +
- +
-<bottom-editor> +
-def greetings(name,residence): +
-    print(f"Hallo, mein(e) liebe(r) {name} aus {residence}. Ich wünsche dir einen ganz tollen Tag!"+
- +
-greetings("Fritz", "Romanshorn"+
-greetings("Monika", "Amriswil"+
-</bottom-editor> +
- +
-=== Aufgabe E2 === +
- +
-<bottom-editor> +
-import random +
- +
-# Wichtig: Die Ermittlung der Zufallszahl mit randint und die +
-# Verzweigung (Kopf oder Zahl) muss IN der Funktion gemacht +
-# werden, nicht ausserhalb! +
- +
-def head_or_tail(): +
-    r = random.randint(1,2) +
-    if r == 1: +
-        print("Head!"+
-    else: +
-        print("Tail!"+
- +
-head_or_tail() +
-head_or_tail() +
-</bottom-editor> +
- +
-=== Aufgabe E3 === +
- +
-<bottom-editor>+
 import random import random
  
Zeile 256: Zeile 187:
  
 fortune_cookie() fortune_cookie()
-</bottom-editor>+</template> 
 +</bottom-exercise> 
 + 
 +<nodisp 1> 
 +++++Tipps:
 +Ähnlich wie Münzwurf-Funktion oben. Bestimme wieder eine Zufallszahl (z.B. im Bereich $1-5$, falls du fünf Sprüche hast). Falls die Zufallszahl $2$ ist, gibst du den zweiten Spruch aus. Verwende dazu eine if-elif-...-else-Verzweigung. 
 +++++ 
 +</nodisp>
  
 === Aufgabe E4 === === Aufgabe E4 ===
  
-<bottom-editor layout="split">+<bottom-exercise id="e3" layout="canvas" showswitcher> 
 +<div slot="prompt"> 
 +TurtleGraphics: Schreibe eine Funktion <code>square(x)</code>, die eine Zahl <code>x</code> als Argument entgegen nimmt und ein Quadrat mit dieser Länge zeichnet. 
 +</div> 
 +<template data-type="solution">
 from turtle import * from turtle import *
 turi = Turtle() turi = Turtle()
Zeile 277: Zeile 219:
 square(150) square(150)
 square(200) square(200)
-</bottom-editor>+</template> 
 +</bottom-exercise>
  
 === Aufgabe E5 === === Aufgabe E5 ===
  
-<bottom-editor layout="split"> +<bottom-exercise id="e5" layout="canvas" showswitcher style="max-height:40lh;"> 
-from turtle import * +<div slot="prompt"> 
-Turtle()+Schreibe folgende Funktionen: 
 +<ul> 
 +   <li><code>square(x,y,l)</code>: Zeichnet Quadrat mit Seitenlänge l, startend an Position <code>x,y</code> 
 +   <li><code>circle(x,y,r)</code>: Zeichnet Kreis mit Radius r, startend an Position <code>x,y</code> 
 +   <li><code>rectange(x,y,a,b)</code>: Zeichnet Rechteck mit Seitenlängen a und b, startend an Position <code>x,y</code> 
 +   <li><code>triangle(x,y,l)</code>: Zeichnet gleichseitiges Dreieck mit Seitenlänge l, startend an Position <code>x,y</code> 
 +   <li>Funktion für selbst gewählte geometrische Figur 
 +</ul> 
 +<p>Mache nun moderne Kunst, indem du diese Funktionen aufrufst.
  
-def square(x,y,l): +<p><b>Challenge (optional):</b> Erstelle mit möglichst vielen Zufallswerten moderne KunstZielKunst von deinem Programm soll besser und schöner sein als die vom Programm der Lehrperson!
-    t.teleport(x,y) +
-    i = 0 +
-    while i < 4: +
-        t.fd(l) +
-        t.right(90) +
-        i = i + 1+
  
-def circle(x,y,r): +<p>Vom Zufall abhängen können z.Bfolgende Werte: 
-    t.teleport(x,y) +<ul> 
-    t.circle(r) +   <li>Anzahlwie oft jede Funktion aufgerufen wird
- +   <li>Position von Figuren 
-def rectangle(x,y,a,b): +   <li>Grössen von Figuren 
-    t.teleport(x,y) +   <li>Drehung von Figuren 
-    i = 0 +   <li>Farben (Stift- und Füllfarbe), dazu kannst du den Funktionen weitere Argumente übergeben 
-    while i 2: +</ul> 
-        t.fd(a) +Tipps
-        t.right(90+<ul> 
-        t.fd(b) +   <li>Es lohnt sich, z.Beine Funktion `draw_random_shape()` zu definierendie dann zufällig eine der Formen zeichnet. 
-        t.right(90) +   <li>Du kannst auch weitere Funktionen definierendie dir das Leben erleichtern. 
-        i = i + 1 +</ul> 
- +</div
-def triangle(x,y,l)+<template data-type="solution">
-    t.teleport(x,y) +
-    i = 0 +
-    while i 3: +
-        t.fd(l) +
-        t.right(120) +
-        i = i + 1 +
- +
-square(-200,-300,150) +
-circle(0,150,40) +
-rectangle(-150,50,20,100) +
-triangle(100,150,40) +
-</bottom-editor> +
- +
-<bottom-editor layout="split">+
 import random import random
 from turtle import * from turtle import *
Zeile 391: Zeile 322:
  
 artist(t) artist(t)
-</bottom-editor> +</template
- +</bottom-exercise>
-++++ +
-</nodisp>+
  
 ==== Aufgaben F ==== ==== Aufgaben F ====
Zeile 409: Zeile 338:
 === Aufgabe F1 === === Aufgabe F1 ===
  
-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.+<bottom-exercise id="f1"> 
 +<div slot="prompt"> 
 +Schreibe folgende Funktionen:
  
-Welches Volumen hat ein Würfel mit Seitenlänge 13 cm? +<p>Definiere eine Funktion mit einem Argument <code>volume_cube(x)</code>, die das Volumen eines Würfels mit Seitenlänge <code>x</code> (in cm) berechnet und zurückgibt (also NICHT printed). Speichere das Resultat in einer Variablen und gebe es dann aus.
- +
-=== Aufgabe F2 === +
- +
-**Satz von Pythagoras:** Schreibe eine Funktion `pythagoras(a,b)`, mit der du die Hypotenuse eines rechtwinkligen Dreiecks mit Katheten $a$ und $b$ berechnen kannst. Das Resultat soll *zurückgegeben* werden.   +
- +
-//Tipp:// Die Wurzel einer Zahl ziehst du mit `sqrt(x)`, dazu musst du aber zuerst das math-Modul importieren: `import math`. +
- +
-//Kontrolle:// Für die Katheten 3 und 4 ist die Hypothenuse 5. Die Codezeile `print(pythagoras(3,4))` soll dann also `5.0` ausgeben. +
- +
- +
-=== Aufgabe F3 === +
- +
-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`)+
- +
-=== Aufgabe F4 === +
- +
-Schreibe eine Funktion `grade(points)`, die dir die Note (_en_. 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: +
-$$\text{Note} = \frac{5 \cdot \text{(erreichte Punkte)}}{\text{Punktzahl für Note 6}} + 1$$ +
- +
-Beachte: +
-   * Um die Noten schön zu runden, kannst du die //vordefinierte Funktion// `round` verwenden: `round(3.14159,2)` rundet dir die Zahl $3.14159$ auf zwei Nachkommastellen, man erhält also $3.14$. +
-   * Erreicht man mehr Punkte als notwendig für Note 6, soll man trotzdem die Note 6 erhalten. +
- +
-=== Aufgabe F5 === +
- +
-Die **Fakultät** ist eine Funktion, welche jeder ganzen natürlichen Zahl das Produkt aller natürlichen Zahlen (ohne Nullkleiner und gleich dieser Zahl zuordnetSie wird mit einem Ausrufezeichen geschrieben. Als Beispiel: $5!=1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 =120$. +
- +
-Schreibe eine Funktion `factorial(...)`, der als Argument eine ganze Zahl übergeben wird und die 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! +
- +
-=== Aufgabe F6 (optional) === +
- +
-**Mitternachtsformel:** Eine quadratische Funktion kann immer in die Form $$ax^2 + bx + c = 0$$ gebracht werden. Die Lösung ist gegeben durch: +
-$$x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}$$ +
- +
-Schreibe eine Funktion `mitternachtsformel(...)`, die die drei Werte für $a,b,c$ entgegennimmt und die Lösung(en) zurück gibt. Beachte, dass es drei Fälle gibt: +
-   * keine Lösung: gib `None` zurück, dies ist der Fall, wenn der Term in der Wurzel negativ ist +
-   * eine Lösung, dies ist der Fall, wenn der Term in der Wurzel genau 0 ist +
-   * zwei Lösungen: gib beide Werte (mit Komma getrennt) zurück +
- +
-Tipp: Verwende die Diskriminante, um den richtigen Fall zu ermitteln. +
- +
-Kontrolle: Die quadratische Gleichung ... +
- +
-   * $3 x^2 - 6 x - 5 = 0$ hat die zwei Lösungen: $-0.632993$ und $2.63299$ +
-   * $x^2 - 4 x + 4 = 0$ hat eine Lösung: $2$ +
-   * $x^2 + 2 x + 7 = 0$ hat keine Lösung +
- +
-<nodisp 1> +
- +
-++++Lösungen Aufgaben F| +
- +
-==== Aufgaben F ==== +
- +
-=== Aufgabe F1 ===+
  
-<bottom-editor>+<p>Welches Volumen hat ein Würfel mit Seitenlänge 13 cm? 
 +</div> 
 +<template data-type="solution">
 def volume_cube(x): def volume_cube(x):
     return x**3     return x**3
Zeile 476: Zeile 352:
 v = volume_cube(13) v = volume_cube(13)
 print(v) print(v)
-</bottom-editor>+</template> 
 +<template data-type="test"> 
 +assert volume_cube(13) == 2197 
 +assert volume_cube(4) == 64 
 +</template> 
 +</bottom-exercise>
  
 === Aufgabe F2 === === Aufgabe F2 ===
  
-<bottom-editor>+<bottom-exercise id="f2"> 
 +<div slot="prompt"> 
 +<b>Satz von Pythagoras:</b> Schreibe eine Funktion <code>pythagoras(a,b)</code>, mit der du die Hypotenuse eines rechtwinkligen Dreiecks mit Katheten <code>a</code> und <code>b</code> berechnen kannst. Das Resultat soll <em>zurückgegeben</em> werden.   
 + 
 +<p><b>Tipp:</b> Die Wurzel einer Zahl ziehst du mit <code>sqrt(x)</code>, dazu musst du aber zuerst das math-Modul importieren: <code>import math</code>
 + 
 +<p><b>Kontrolle:</b> Für die Katheten 3 und 4 ist die Hypothenuse 5. Die Codezeile <code>print(pythagoras(3,4))</code> soll dann also <code>5.0</code> ausgeben. 
 +</div> 
 +<template data-type="solution">
 import math import math
 def pythagoras(a,b): def pythagoras(a,b):
Zeile 486: Zeile 375:
  
 print(pythagoras(3,4)) print(pythagoras(3,4))
-</bottom-editor+</template> 
 +<template data-type="test"
 +assert pythagoras(3, 4) == 5.0 
 +assert pythagoras(8, 15) == 17.0 
 +</template> 
 +</bottom-exercise>
  
 === Aufgabe F3 === === Aufgabe F3 ===
  
-<bottom-editor>+Das Volumen einer Kugel mit Radius $R$ ist: $$V = \frac{4\pi}{3}\cdot R^3$$ 
 +<bottom-exercise id="f3"> 
 +<div slot="prompt"> 
 +Definiere eine Funktion <code>volume_sphere(...)</code>, der man als Argument den Radius übergibt und die dann das Volumen zurückgibt. Die Kreiszahl Pi (π) kannst du mit <code>math.pi</code> aufrufen, dazu muss aber auch wieder zuerst das math-Modul importiert werden (<code>import math</code>). 
 +</div> 
 +<template data-type="solution">
 import math import math
 def volume_sphere(r): def volume_sphere(r):
Zeile 497: Zeile 395:
  
 print(volume_sphere(3)) print(volume_sphere(3))
-</bottom-editor+</template> 
 +<template data-type="test"
 +assert 113.09 < volume_sphere(3) < 113.099 
 +</template> 
 +</bottom-exercise>
  
 === Aufgabe F4 === === Aufgabe F4 ===
  
-<bottom-editor>+Schreibe eine Funktion `grade(points)`, die dir die Note (_en_. 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: 
 +$$\text{Note} = \frac{5 \cdot \text{(erreichte Punkte)}}{\text{Punktzahl für Note 6}} + 1$$ 
 + 
 +Beachte: 
 +   * Um die Noten schön zu runden, kannst du die //vordefinierte Funktion// `round` verwenden: `round(3.14159,2)` rundet dir die Zahl $3.14159$ auf zwei Nachkommastellen, man erhält also $3.14$. 
 +   * Erreicht man mehr Punkte als notwendig für Note 6, soll man trotzdem die Note 6 erhalten. 
 + 
 +<bottom-exercise id="f4"> 
 +<template data-type="solution">
 def grade(points,points_6): def grade(points,points_6):
     gr = 5*points/points_6 + 1     gr = 5*points/points_6 + 1
Zeile 510: Zeile 419:
  
 print(grade(23,51)) print(grade(23,51))
-</bottom-editor> +</template> 
 +</bottom-exercise>
  
 === Aufgabe F5 === === Aufgabe F5 ===
  
-<bottom-editor>+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$. 
 + 
 +<bottom-exercise id="f5"> 
 +<div slot="prompt"> 
 +Schreibe eine Funktion <code>factorial(...)</code>, der als Argument eine ganze Zahl übergeben wird und die dir dann die Fakultät dieser Zahl zurückgibt. 
 + 
 +<p><b>Optionale Challenge für absolute Freaks</b>: Kannst du die Fakultät ganz ohne Schleife berechnen? Dann hast du das Prinzip der <em>Rekursion</em> (Selbst-Aufruf) entdeckt! 
 +</div> 
 +<template data-type="solution">
 def factorial(n): def factorial(n):
     product = 1     product = 1
Zeile 525: Zeile 442:
  
 print(factorial(5)) print(factorial(5))
-</bottom-editor>+</template> 
 +<template data-type="test"> 
 +assert factorial(5) == 120 
 +assert factorial(10) == 3628800 
 +</template> 
 +</bottom-exercise>
  
 +=== Aufgabe F6 (optional) ===
  
-=== Aufgabe F6 ===+**Mitternachtsformel:** Eine quadratische Funktion kann immer in die Form $$ax^2 + bx + c 0$$ gebracht werden. Die Lösung ist gegeben durch: 
 +$$x \frac{-b \pm \sqrt{b^2-4ac}}{2a}$$
  
-<bottom-editor>+Schreibe eine Funktion `mitternachtsformel(...)`, die die drei Werte für $a,b,c$ entgegennimmt und die Lösung(en) zurück gibt. Beachte, dass es drei Fälle gibt: 
 +   * keine Lösung: gib `None` zurück, dies ist der Fall, wenn der Term in der Wurzel negativ ist 
 +   * eine Lösung, dies ist der Fall, wenn der Term in der Wurzel genau 0 ist 
 +   * zwei Lösungen: gib beide Werte (mit Komma getrennt) zurück 
 + 
 +Tipp: Verwende die Diskriminante, um den richtigen Fall zu ermitteln. 
 + 
 +Kontrolle: Die quadratische Gleichung ... 
 + 
 +   * $3 x^2 - 6 x - 5 = 0$ hat die zwei Lösungen: $-0.632993$ und $2.63299$ 
 +   * $x^2 - 4 x + 4 = 0$ hat eine Lösung: $2$ 
 +   * $x^2 + 2 x + 7 = 0$ hat keine Lösung 
 + 
 +<bottom-exercise id="f6"> 
 +<template data-type="solution">
 from math import * from math import *
 def mitternachtsformel(a,b,c): def mitternachtsformel(a,b,c):
Zeile 545: Zeile 483:
 print(mitternachtsformel(1,-4,4))  # 1 Loesung print(mitternachtsformel(1,-4,4))  # 1 Loesung
 print(mitternachtsformel(1,2,7))   # keine Loesung print(mitternachtsformel(1,2,7))   # keine Loesung
-</bottom-editor>+</template> 
 +<template data-type="test"> 
 +assert set(mitternachtsformel(3,-6,-5)) == {-0.632993161855452, 2.632993161855452} 
 +assert mitternachtsformel(1,-4,4) == 2 
 +assert mitternachtsformel(1,2,7) == None 
 +</template> 
 +</bottom-exercise>
  
-++++ 
- 
-</nodisp> 
  • gf_informatik/funktionen.1777405619.txt.gz
  • Zuletzt geändert: 2026-04-28 19:46
  • von hof