Algorithmen II

  • 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() oder sorted(), 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 mit return 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 die max2 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.

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.

  1. Multiplikation durch Additionen ausdrücken
  2. Hoch-Rechnen durch Multiplikation ausdrücken
  3. Hoch-Rechnen durch Additionen ausdrücken
  4. Ganzzahldivision mit Rest mit Addition und Subtraktion
  5. 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!

Zuerst ohne diese Hinweise probieren!

Theorie

  • Was ist eine Primzahl?
    • Wenn nötig: Nachlesen auf Primzahl (erster Satz)!
  • Primzahl-Test:
    • Eine Funktion, die herausfindet (Also True oder False 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 Zahl n.
    • 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

Hinweise

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 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

  • Schreibe eine Funktion ggT(x,y), die zwei Zahlen x und y entgegennimmt und den ggT der beiden zurückgibt.

Aufgabe B5: Quadratwurzel ziehen

  • Schreibe eine Funktion wurzel(x), die die Wurzel von x auf 0.0001 genau berechnet.
  • gf_informatik/algorithmen_ii.1733408662.txt.gz
  • Zuletzt geändert: 2024-12-05 14:24
  • von hof