Algorithmen II
Mit unserem Wissen über die Python Grundlagen und Funktionen sind wir bestens gerüstet, um komplexere algorithmische Probleme zu lösen. Verwende wo möglich Funktionen, und verwende Tests, um zu überprüfen, ob dein Code funktioniert!
Verwende keine vordefinierten Funktionen wie z.B. max() oder sorted(), sondern programmiere alles selber.
Aufgabe L1: Maximum
- Teil 1: Zwei Zahlen sollen eingegeben (
input) und die grössere der beiden Zahlen ausgegeben werden. Sind die Zahlen gleich gross, soll einfach die Zahl ausgegeben (print) werden. - Teil 2: Schreibe Code um als Funktion
max2(a, b), die das Maximum vonaundbmitreturnzurückgibt. Die Eingabe und die Ausgabe sollen ausserhalb der Funktion erfolgen. - Teil 3: Schreibe eine Funktion
max3(a, b, c), die das Maximum von drei Zahlen zurückgibt. Verwende dazu diemax2Funktion!
Aufgabe L2: Sortieren
- Teil 1: Drei Zahlen sollen eingegeben werden und danach in absteigender Reihenfolge der Grösse ausgegeben werden.
Aufgabe L3: 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 L4: 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
Mit iterativen Algorithmen berechnen wir Schritt für Schritt das gewünschte Resultat. Das Resultat wird in einer Variable sukzessive akkumuliert. In einer Schleife wird jede Runde ein Wert hinzugefügt, beispielsweise durch Addition oder Multiplikation.
Beispiel: Summe aller natürlicher Zahlen
Aufgaben M
Aufgabe M1: Iterative 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 M2: 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!
Zuerst ohne diese Hinweise probieren!
Primzahlen
Theorie
- Was ist eine Primzahl?
- Wenn nötig: Nachlesen auf Primzahl (erster Satz)!
- Primzahl-Test:
- Eine Funktion, die herausfindet (Also
TrueoderFalsezurückgibt), ob eine Zahl prim ist. - Wieviele Parameter hat die Funktion
is_prime?
- Teiler-Test:
- Eine Funktion, die herausfindet (zurückgibt), ob eine Zahl
tein Teiler ist der Zahln. - Wieviele Parameter hat die Funktion
is_divisor?
Auftrag zu Primzahlen
- in 2er-Gruppen auf Papier (kein Python!)
- Vorgehen:
- Algorithmus für Primzahltest ü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
Aufgabe M3: 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.
Weitere anspruchsvolle Algorithmen
Aufgabe M4: ggT bestimmen
- siehe Euklidischer Algorithmus
- Schreibe eine Funktion
ggT(x,y), die zwei Zahlenxundyentgegennimmt und den ggT der beiden zurückgibt.
Aufgabe M5: Quadratwurzel ziehen
- siehe Heron-Verfahren
- Schreibe eine Funktion
wurzel(x), die die Wurzel vonxauf0.0001genau berechnet.