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 [2025-12-11 10:41] – [Aufgabe F6 (optional)] hofgf_informatik:funktionen [2026-04-28 20:19] (aktuell) – [Aufgabe F6 (optional)] hof
Zeile 39: Zeile 39:
 Die Funktion gibt einfach "Hallo du!" aus, wenn sie aufgerufen wird. Die ersten beiden Zeilen definieren die Funktion. Unten wird sie zweimal aufgerufen, dementsprechend wird 2x "Hallo du!" ausgegeben. Die Funktion gibt einfach "Hallo du!" aus, wenn sie aufgerufen wird. Die ersten beiden Zeilen definieren die Funktion. Unten wird sie zweimal aufgerufen, dementsprechend wird 2x "Hallo du!" ausgegeben.
  
-<html><script type="module" src="https://bottom.ch/ksr/ed/bottom-editor.js"></script></html> +<bottom-editor>
-<html><bottom-editor>+
 def say_hi(): def say_hi():
     print("Hallo du!")     print("Hallo du!")
Zeile 46: Zeile 45:
 say_hi() say_hi()
 say_hi() say_hi()
-</bottom-editor></html>+</bottom-editor>
  
 === Beispiel 2: Funktion mit Parameter und ohne Rückgabewert === === Beispiel 2: Funktion mit Parameter und ohne Rückgabewert ===
Zeile 54: Zeile 53:
 Beim ersten Funktionsaufruf unten hat `name` also den Wert `"Silvia"` und beim zweiten den Wert `"Gabriele"`. Beim ersten Funktionsaufruf unten hat `name` also den Wert `"Silvia"` und beim zweiten den Wert `"Gabriele"`.
  
-<html><bottom-editor>+<bottom-editor>
 def say_hi(name): def say_hi(name):
     print(f"Hallo {name}!")     print(f"Hallo {name}!")
Zeile 60: Zeile 59:
 say_hi("Silvia") say_hi("Silvia")
 say_hi("Gabriele") say_hi("Gabriele")
-</bottom-editor></html>+</bottom-editor>
  
 === Beispiel 3: Funktion ohne Parameter aber mit Rückgabewert === === Beispiel 3: Funktion ohne Parameter aber mit Rückgabewert ===
  
 In einem Glücksspiel wollen wir oft einen Würfelwurf simulieren. Dazu wollen wir eine Würfelfunktion `wuerfle()` programmieren, die uns eine Zufallszahl von $1$ bis $6$ gibt: In einem Glücksspiel wollen wir oft einen Würfelwurf simulieren. Dazu wollen wir eine Würfelfunktion `wuerfle()` programmieren, die uns eine Zufallszahl von $1$ bis $6$ gibt:
-<html><bottom-editor>+<bottom-editor>
 import random import random
  
Zeile 75: Zeile 74:
 print(wuerfle()) print(wuerfle())
 print(wuerfle()) print(wuerfle())
-</bottom-editor></html>+</bottom-editor>
  
 === Beispiel 4: Funktion mit Parameter und mit Rückgabewert === === Beispiel 4: Funktion mit Parameter und mit Rückgabewert ===
  
 Nun wollen wir auch andere Würfel (z.B. 12er-Würfel) simulieren können. Dazu führen wir einen Parameter ein, der den maximalen Wert des Würfels festlegt: Nun wollen wir auch andere Würfel (z.B. 12er-Würfel) simulieren können. Dazu führen wir einen Parameter ein, der den maximalen Wert des Würfels festlegt:
-<html><bottom-editor>+<bottom-editor>
 import random import random
  
Zeile 90: Zeile 89:
 print(wuerfle(12)) print(wuerfle(12))
 print(wuerfle(12)) print(wuerfle(12))
-</bottom-editor></html>+</bottom-editor>
  
 In Realität ist es aber so, dass die meisten Würfel bis $6$ gehen. Wir können nun unser Leben einfacher machen, indem wir den Parameter `max_nr` mit einem **Vorgabewert** ausstatten: In Realität ist es aber so, dass die meisten Würfel bis $6$ gehen. Wir können nun unser Leben einfacher machen, indem wir den Parameter `max_nr` mit einem **Vorgabewert** ausstatten:
  
-<html><bottom-editor>+<bottom-editor>
 import random import random
  
Zeile 103: Zeile 102:
 print(wuerfle(12)) # 12er-Wuerfel print(wuerfle(12)) # 12er-Wuerfel
 print(wuerfle())   # 6er-Wuerfel, verwendet Vorgabewert print(wuerfle())   # 6er-Wuerfel, verwendet Vorgabewert
-</bottom-editor></html>+</bottom-editor>
  
 Der erste Funktionsaufruf simuliert natürlich einen 12er-Würfel. Der zweite einen 6er-Würfel: Da kein Argument für den Parameter `max_nr` übergeben wird, wird der Vorgabewert (`max_nr=6`) verwendet. Hier ist es üblich, //keinen// Abstand links und rechts vom Operator zu machen. Der erste Funktionsaufruf simuliert natürlich einen 12er-Würfel. Der zweite einen 6er-Würfel: Da kein Argument für den Parameter `max_nr` übergeben wird, wird der Vorgabewert (`max_nr=6`) verwendet. Hier ist es üblich, //keinen// Abstand links und rechts vom Operator zu machen.
Zeile 120: Zeile 119:
 === Aufgabe E1 === === Aufgabe E1 ===
  
-**Nette Begrüssung:** Schreibe eine Funktion, der man den Namen und den Wohnort einer Person als Argumente übergibt. Die Funktion begrüsst diese Person dann ganz herzlich. Beispiel: "Hallo, mein lieber Oskar aus Amriswil, ich wünsche dir einen ganz tollen Tag!" +<bottom-exercise id="e1"> 
- +<div slot="prompt"> 
-=== Aufgabe E2 === +<b>Nette Begrüssung:</b> Schreibe eine Funktion, der man den Namen und den Wohnort einer Person als Argumente übergibt. Die Funktion begrüsst diese Person dann ganz herzlich. Beispiel: <code>"Hallo, mein lieber Oskar aus Amriswil, ich wünsche dir einen ganz tollen Tag!"</code
- +</div
-Schreibe eine Funktion `head_or_tail()`, die einen Münzenwurf simuliert. Zufällig soll Kopf oder Zahl ausgewählt und ausgegeben werden. +<template data-type="solution">
- +
-<nodisp 1> +
-++++Tipps:+
-Erzeuge mithilfe des `random`-Moduls eine [[gf_informatik:programmieren_ii#zufallszahlen|Zufallszahl]] ($1$ oder $2$). Falls die Zufallszahl $1$ ($2$) ist, gibst du "Zahl" ("Kopf") aus. Verwende dazu eine Verzweigung. +
- +
- +
-Simuliere nun 20 Münzenwürfe. +
- +
-++++ +
-</nodisp> +
- +
- +
-=== 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. +
- +
-Rufe die Funktion auf. +
- +
-<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 === +
- +
-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 === +
- +
-<html><bottom-editor>+
 def greetings(name,residence): def greetings(name,residence):
     print(f"Hallo, mein(e) liebe(r) {name} aus {residence}. Ich wünsche dir einen ganz tollen Tag!")     print(f"Hallo, mein(e) liebe(r) {name} aus {residence}. Ich wünsche dir einen ganz tollen Tag!")
Zeile 190: Zeile 129:
 greetings("Fritz", "Romanshorn") greetings("Fritz", "Romanshorn")
 greetings("Monika", "Amriswil") greetings("Monika", "Amriswil")
-</bottom-editor></html>+</template> 
 +</bottom-exercise>
  
 === Aufgabe E2 === === Aufgabe E2 ===
  
-<html><bottom-editor>+<bottom-exercise id="e2"> 
 +<div slot="prompt"> 
 +Schreibe eine Funktion <code>head_or_tail()</code>, die einen Münzenwurf simuliert. Zufällig soll Kopf oder Zahl ausgewählt und ausgegeben werden. 
 +</div> 
 +<template data-type="solution">
 import random import random
  
-""" +Wichtig: Die Ermittlung der Zufallszahl mit randint und die 
-Wichtig: Die Ermittlung der Zufallszahl mit randint und die Verzweigung (Kopf oder Zahl) muss IN der Funktion gemacht werden, nicht ausserhalb! +Verzweigung (Kopf oder Zahl) muss IN der Funktion gemacht 
-"""+werden, nicht ausserhalb!
  
 def head_or_tail(): def head_or_tail():
Zeile 210: Zeile 154:
 head_or_tail() head_or_tail()
 head_or_tail() head_or_tail()
-</bottom-editor></html>+</template> 
 +</bottom-exercise> 
 + 
 +<nodisp 1> 
 +++++Tipps:
 +Erzeuge mithilfe des `random`-Moduls eine [[gf_informatik:programmieren_ii#zufallszahlen|Zufallszahl]] ($1$ oder $2$). Falls die Zufallszahl $1$ ($2$) ist, gibst du "Zahl" ("Kopf") aus. Verwende dazu eine Verzweigung. 
 + 
 +Simuliere nun 20 Münzenwürfe. 
 +++++ 
 +</nodisp> 
  
 === Aufgabe E3 === === Aufgabe E3 ===
  
-<html><bottom-editor>+<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. 
 +</div> 
 +<template data-type="solution">
 import random import random
  
Zeile 227: Zeile 187:
  
 fortune_cookie() fortune_cookie()
-</bottom-editor></html>+</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 ===
  
-<code python>+<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 248: Zeile 219:
 square(150) square(150)
 square(200) square(200)
-</code>+</template> 
 +</bottom-exercise>
  
 === Aufgabe E5 === === Aufgabe E5 ===
  
-<code python>+<bottom-exercise id="e5" layout="canvas" showswitcher style="max-height:40lh;"> 
 +<div slot="prompt"> 
 +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. 
 + 
 +<p><b>Challenge (optional):</b> 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! 
 + 
 +<p>Vom Zufall abhängen können z.B. folgende Werte: 
 +<ul> 
 +   <li>Anzahl, wie oft jede Funktion aufgerufen wird. 
 +   <li>Position von Figuren 
 +   <li>Grössen von Figuren 
 +   <li>Drehung von Figuren 
 +   <li>Farben (Stift- und Füllfarbe), dazu kannst du den Funktionen weitere Argumente übergeben 
 +</ul> 
 +Tipps: 
 +<ul> 
 +   <li>Es lohnt sich, z.B. eine Funktion `draw_random_shape()` zu definieren, die dann zufällig eine der Formen zeichnet. 
 +   <li>Du kannst auch weitere Funktionen definieren, die dir das Leben erleichtern. 
 +</ul> 
 +</div> 
 +<template data-type="solution"> 
 +import random
 from turtle import * from turtle import *
-t = Turtle() 
-t.hideturtle() 
  
-def square(x,y,l): +def square(t,l):
-    t.teleport(x,y)+
     i = 0     i = 0
     while i < 4:     while i < 4:
Zeile 265: Zeile 263:
         i = i + 1         i = i + 1
  
-def circle(x,y,r): +def circle(t,r):
-    t.teleport(x,y)+
     t.circle(r)     t.circle(r)
  
-def rectangle(x,y,a,b): +def rectangle(t,a,b):
-    t.teleport(x,y)+
     i = 0     i = 0
     while i < 2:     while i < 2:
Zeile 279: Zeile 275:
         i = i + 1         i = i + 1
  
-def triangle(x,y,l): +def triangle(t,l):
-    t.teleport(x,y)+
     i = 0     i = 0
     while i < 3:     while i < 3:
Zeile 287: Zeile 282:
         i = i + 1         i = i + 1
  
-square(-200,-300,150+def random_color(transparent=False): 
-circle(0,150,40+    red = random.randint(1255) 
-rectangle(-150,50,20,100+    green = random.randint(1255
-triangle(100,150,40) +    blue = random.randint(1255) 
-</code>+    if transparent: 
 +        alpha = random.randint(50255
 +        return (redgreenbluealpha
 +    else: 
 +        return (redgreenblue)
  
-[[https://webtigerpython.ethz.ch/#?code=NobwRAdghgtgpmAXGGUCWEB0AHAnmAGjABMoAXKJMNGbAewCcyACBqCYumAHQgDMGXZmQCuTADZxmNek2YAqXr2Jw-zAM4BHEVAZwAFGQIAPArgLiAlIl7M7wzGTiTZZfadyXb9tMwC8zAAM3nYA7gAWaJLSzAA8zAAsNhD2qQ58xPpWIWlkmAxoAObhbgCcgV4paXa-Ab4A1MwAjEocqswAxmgMHZKGJmYEDNY5eU4ujG4elal5XT19w60qanodFBCFfUYeBFAEAEYjVXZjznCu7mYzPv5BORFRUr7xAEzJ1aeYGfpQN9V5ArFMoVHKzb6ZI5g-yAoolfTlf5pWoxRotCDKdpkArsLYGHaDKwfGGOc6XaY5FHBE7MR7RF7MADMxIBEKySPBQPhTVeoJpqRRDWay3abA4XAA-h06OJGIYxepsLo4BAyH4AGJQcTqODHVJ6Yh3MWcGD5djEDBuJoEZivACsdqRhT0KqN5q4Zo4lv01ttDqRB3EIikAWNHuN3t99sdlLU2PYiuVqpZaS12HCUDd4tNEdV-jtgRt0Y59j0ogYKX0BptzrgKptgeDNrTGaRzh1Kf1cHLlerzFr9eYjd1IrUujIaHUbjIevs6gz2Dg6izJs9FrzCQITT5qTpUnnUEXy4AfEFO3OF0u7gej8wALTC_kXw8h1junPmyM2hIluy46Khu-a7eoWzCItCXySHwbj_iOT52MYK7hp-eZ3k0AAcoEYTuny4EhH5eqh2E2thv4aGgKhNPhwF5ryJGBDhrJ8FE4jSrKDBVu-UoynKAAqDDBpYZF5KEFFkOE-iMbkmAHHAhQYBKzHiOI-hkWgag3iGARNOe1RaDoej9MwpjMOY5GUWRzjqRol7-AE7wQWk8y9PiNomWZ6gUXATSWeI1maXZTK6bkOKbNsbk2h5Xk-Y5VkabZfgBEkjmpJ5KivNRuZuHRzQMWRXbrLBRnuTaaXeaVXmvMJmAqsQiksaprQsAEvFiGQfSVHkkQqOW7UGJ1mCKnWmTbnyvDjpO06VGAAC-AC6QA|Modern Artist]]+def artist(t): 
 +    shapes = random.randint(4,10) 
 +    while shapes > 0: 
 +        shapes = shapes - 1 
 +        shape = random.randint(1, 4) 
 +        angle random.randint(0, 90) 
 +        t.left(angle) 
 +        x = random.randint(-180, 180) 
 +        y = random.randint(-180, 180) 
 +        t.teleport(x, y) 
 +        side1 = random.randint(20, 100) 
 +        t.fillcolor(random_color(True)) 
 +        t.width(0) 
 +        t.begin_fill() 
 +        if shape == 1: 
 +            square(t, side1) 
 +        elif shape == 2: 
 +            circle(t, side1) 
 +        elif shape == 3: 
 +            triangle(t, side1) 
 +        elif shape == 4: 
 +            side2 = random.randint(20, 100) 
 +            rectangle(t, side1, side2) 
 +        t.end_fill()
  
-++++ +t = Turtle() 
-</nodisp>+t.hideturtle() 
 +t.speed(100) 
 + 
 +artist(t) 
 +</template> 
 +</bottom-exercise>
  
 ==== Aufgaben F ==== ==== Aufgaben F ====
Zeile 311: 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 === +<p>Welches Volumen hat ein Würfel mit Seitenlänge 13 cm
- +</div
-**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.   +<template data-type="solution">
- +
-//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 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 `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 berechnenDann 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 === +
- +
-<html><bottom-editor>+
 def volume_cube(x): def volume_cube(x):
     return x**3     return x**3
Zeile 378: Zeile 352:
 v = volume_cube(13) v = volume_cube(13)
 print(v) print(v)
-</bottom-editor></html>+</template> 
 +<template data-type="test"> 
 +assert volume_cube(13) == 2197 
 +assert volume_cube(4) == 64 
 +</template> 
 +</bottom-exercise>
  
 === Aufgabe F2 === === Aufgabe F2 ===
  
-<html><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 388: Zeile 375:
  
 print(pythagoras(3,4)) print(pythagoras(3,4))
-</bottom-editor></html+</template> 
 +<template data-type="test"> 
 +assert pythagoras(3, 4) == 5.0 
 +assert pythagoras(8, 15) == 17.0 
 +</template
 +</bottom-exercise>
  
 === Aufgabe F3 === === Aufgabe F3 ===
  
-<html><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 399: Zeile 395:
  
 print(volume_sphere(3)) print(volume_sphere(3))
-</bottom-editor></html+</template> 
 +<template data-type="test"> 
 +assert 113.09 < volume_sphere(3) < 113.099 
 +</template
 +</bottom-exercise>
  
 === Aufgabe F4 === === Aufgabe F4 ===
  
-<html><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 412: Zeile 419:
  
 print(grade(23,51)) print(grade(23,51))
-</bottom-editor></html> +</template> 
 +</bottom-exercise>
  
 === Aufgabe F5 === === Aufgabe F5 ===
  
-<html><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 427: Zeile 442:
  
 print(factorial(5)) print(factorial(5))
-</bottom-editor></html>+</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}$$
  
-<html><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 447: 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></html>+</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.1765449660.txt.gz
  • Zuletzt geändert: 2025-12-11 10:41
  • von hof