**Dies ist eine alte Version des Dokuments!**
Algorithmen II
Struktogramme und Python
Aufgaben A
- Folgende Aufgaben hast du ev. bereits mit Struktogrammen gelöst. Studiere nochmals deine jeweiligen Lösungen und stelle sicher, dass du jeden Schritt verstehst.
- Schreibe nachher den zugehörigen Python-Code.
- Verwende keine vordefinierten Funktionen wie z.B.
max()
odersorted()
, programmiere alles selber.
Aufgabe A1: Maximum
- Teil 1: Zwei Zahlen sollen eingegeben und die grössere der beiden Zahlen ausgegeben werden. Die grössere von zwei gleich grossen Zahlen ist einfach diese eine Zahl.
- Teil 2: Schreibe Code um als Funktion
max2(a, b)
, die das Maximum von a und b mitreturn
zurückgibt. Die Eingabe (input
) und die Ausgabe (print
) sollen ausserhalb der Funktion erfolgen. - Teil 3: Schreibe eine Funktion
max3(a, b, c)
, die das Maximum von drei Zahlen zurückgibt. Verwende dazu diemax2
Funktion!
Aufgabe A2: Sortieren
- Teil 1: Drei Zahlen sollen eingegeben werden und danach in absteigender Reihenfolge der Grösse ausgegeben werden.
Aufgabe A3: Subtraction Game
- Spiele mit einer Kollegin/einem Kollegen nochmals das Subtraction Game (Spiel mit 21 Stiften).
- Programmiere es dann in Python. Die Spielerin soll gegen den Computer spielen und beginnen dürfen. Der Computer soll immer gewinnen, wenn die Spielerin einen unklugen Zug macht.
Aufgabe A4: Ratespiel (optional: mittel)
Eine geheime Zahl zwischen 0 und 100 wird in einer Variablen gespeichert. Der Spieler versucht solange die geheime Zahl zu erraten, bis er erfolgreich ist.
Zusatzpunkte:
- Das Programm gibt dem Spieler Tipps, z.B. ’Ausgabe: «Die eingegebene Zahl ist zu klein»’
- Die Anzahl Fehlversuche wird gezählt und am Schluss ausgegeben.
Aufgabe A5: Ratespiel umgekehrt (optional: mittel)
Der Spieler merkt sich eine geheime Zahl zwischen 0 und 100, der Computer soll sie erraten. Der Spieler soll dem Computer bei jedem Versuch mitteilen, ob die gesuchte Zahl kleiner oder grösser als die Vermutung ist:
- Ist die geheime Zahl kleiner als die Vermutung, muss der Spieler
<
eingeben. - Ist die geheime Zahl grösser als die Vermutung, muss der Spieler
>
eingeben. - Ist die geheime Zahl erraten, soll
=
eingegeben werden.
Zusatzpunkte:
- Der Computer detektiert, wenn der Spieler gelogen hat.
Mathematische Algorithmen
Primzahlen
Theorie
- Was ist eine Primzahl?
- Wenn nötig: Nachlesen auf Primzahl (erster Satz)!
- Primzahl-Test:
- Eine Funktion, die herausfindet (Also
True
oderFalse
zurückgibt), ob eine Zahl prim ist. - Wieviele Parameter hat die Funktion
is_prime
?
- Teiler-Test:
- Eine Funktion, die herausfindet (zurückgibt), ob eine Zahl
t
ein Teiler ist der Zahln
. - Wieviele Parameter hat die Funktion
is_divisor
?
Auftrag zu Primzahlen
- in 2er-Gruppen auf Papier (kein Python!)
- Vorgehen:
- Algorithmus überlegen, in 2er-Gruppe besprechen,Notizen machen: Variablen? Schleifen?
- Mit Lehrperson besprechen
- In Python: Funktion
is_prime(n)
implementieren - Fertig? siehe Zusatzauftrag und Aufgaben unten
Zusatzauftrag:
- Wie kannst du den Algorithmus optimieren? Mache einen Plan und diskutiere diesen mit der Lehrperson.
- Schreibe eine optimierte Version der Funktion unter dem Namen
is_prime_2
Aufgaben B
Aufgabe B1: Einfache (math.) Algorithmen
Schreibe für jede Aufgabe eine Funktion, die passende Argumente entgegennimmt und das Resultat zurück gibt. Schreibe alle Funktionen selbst und verwende nur ganz rudimentäre Sprachelemente und keine vordefinierten Funktionen.
- Multiplikation durch Additionen ausdrücken
- Hoch-Rechnen durch Multiplikation ausdrücken
- Hoch-Rechnen durch Additionen ausdrücken
- Ganzzahldivision mit Rest mit Addition und Subtraktion
- Entscheiden ob eine beliebige Zahl eine Zweierpotenz ist oder nicht
Aufgabe B2: Quersumme
Die Quersumme einer Zahl ist die Summe all ihrer Ziffern. Die Quersumme beispielsweise von $413$ ist $4 + 1 + 3 = 8$.
Schreibe eine Funktion quersumme(x)
, die die Quersumme von x
zurückgibt!
Anspruchsvolle Algorithmen
Aufgabe B3: Primfaktorzerlegung
- Jede positive natürliche Zahl kann geschrieben werden als Multiplikation von Primzahlen. Diese Primfaktorzerlegung (PFZ) ist eindeutig.
- Bsp. Primfaktoren für $45$ sind: $3,3,5$ (weil: $3\cdot3\cdot5 = 45$)
- Primfaktorzerlegung ist extrem wichtig z.B. für Verschlüsselungsalgorithmen
- Schreibe eine Funktion
prime_factors(x)
, die eine Zahl x entgegennimmt und deren (geordnete) Primfaktoren von x ausgibt.
Aufgabe B4: ggT bestimmen
- siehe Euklidischer Algorithmus
- Schreibe eine Funktion
ggT(x,y)
, die zwei Zahlenx
undy
entgegennimmt und den ggT der beiden zurückgibt.
Aufgabe B5: Quadratwurzel ziehen
- siehe Heron-Verfahren
- Schreibe eine Funktion
wurzel(x)
, die die Wurzel vonx
auf0.0001
genau berechnet.