Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:ffprg1-2019:loops-and-conditionals [2019/02/10 10:15] – [Aufgabe 3] Ivo Blöchliger | lehrkraefte:blc:informatik:ffprg1-2019:loops-and-conditionals [2019/02/19 15:38] (current) – [Aufgabe 3 (*)] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Aufgaben ====== | ||
| + | ===== Aufgabe 1 ===== | ||
| + | Programmieren Sie das Zahlenrate-Spiel. Der Computer generiert eine (ganze) Geheimzahl zwischen 1 und 100. | ||
| + | <code python> | ||
| + | import random | ||
| + | geheim = random.randint(1, | ||
| + | </ | ||
| + | Der Benutzer darf dann die Zahl erraten. Der Computer meldet: | ||
| + | * ob die Zahl stimmt und gibt die Anzahl benötigter Versuche aus. | ||
| + | * oder ob die geratene Zahl zu gross oder zu klein ist. | ||
| + | |||
| + | - Programmieren Sie das Spiel | ||
| + | - (*) Was ist wohl die optimale Strategie, um die Zahl mit möglichst wenig Versuchen zu erraten? | ||
| + | - (* *) Können Sie ein Programm schreiben, das die durchschnittliche Anzahl Versuche ermittelt, die nötig sind? | ||
| + | - (* * *) Können Sie ein Programm schreiben, das alle optimalen Strategien berechnet? | ||
| + | ===== Aufgabe 2 ===== | ||
| + | Wurzeln nur mit Grundoperationen bestimmen. Schreiben Sie eine Funktion, die als Argument eine Zahl x erhält, und eine Schätzung für die Wurzel zurückliefert: | ||
| + | <code python> | ||
| + | def wurzel(x): | ||
| + | # Magic here | ||
| + | # Schätzung für Wurzel aus x in w speichern | ||
| + | return w # Resultat zurückgeben | ||
| + | | ||
| + | n = 2 | ||
| + | w = wurzel(n) | ||
| + | print " | ||
| + | </ | ||
| + | |||
| + | Starten Sie mit einer beliebigen Schätzung w und berechnen Sie x/w. Das eine ist grösser als die Wurzel, das andere kleiner. Sei die neue Schätzung der Durchschnitt der beiden Zahlen. | ||
| + | Wiederholen Sie: | ||
| + | * eine fixe Anzahl mal (z.B. 10 oder 20). | ||
| + | * bis sich das Quadrat um weniger als z.B. 0.000001 unterscheidet (geben Sie auch die Anzahl nötiger Schritte aus). | ||
| + | * bis sich die Schätzung nicht mehr ändert (geben Sie auch die Anzahl nötiger Schritte aus). | ||
| + | Testen Sie die Varianten ausführlich mit diversen Grössenordnungen von Radikanden. | ||
| + | |||
| + | |||
| + | ===== Aufgabe 3 (*)===== | ||
| + | Schreiben Sie eine Funktion '' | ||
| + | |||
| + | AAA | ||
| + | AAB | ||
| + | AAC | ||
| + | ABA | ||
| + | ABB | ||
| + | ABC | ||
| + | ACA | ||
| + | ACB | ||
| + | ACC | ||
| + | BAA | ||
| + | BAB | ||
| + | BAC | ||
| + | BBA | ||
| + | BBB | ||
| + | BBC | ||
| + | BCA | ||
| + | BCB | ||
| + | BCC | ||
| + | CAA | ||
| + | CAB | ||
| + | CAC | ||
| + | CBA | ||
| + | CBB | ||
| + | CBC | ||
| + | CCA | ||
| + | CCB | ||
| + | CCC | ||
| + | |||
| + | |||
| + | Für Fortgeschrittene: | ||
| + | * (* * *)Schreiben Sie eine Funktion, die für beliebige viele unterschiedliche Buchstaben funktioniert. | ||
| + | * (* * *) Schreiben Sie eine Funktion, die alle Permutationen liefert (jeder Buchstabe kommt nur genau einmal in jedem Wort vor). | ||
| + | |||
| + | <hidden Hilfestellungen> | ||
| + | Die Funktion ruft sich selbst auf, jeweils mit den noch zu vergebenen Buchstaben, und einem Wort, das schon teilweise aufgebaut ist. | ||
| + | |||
| + | Ist das teilweise aufgebaute Wort vollständig, | ||
| + | |||
| + | Andernfalls, | ||
| + | </ | ||
| + | ====== True und False ====== | ||
| + | Das Resultat eines Vergleichs ist True (wahr) oder False (falsch). Wahrheitswerte können mit | ||
| + | * and, or und not verknüpft werden. | ||
| + | * ^ steht für xor (entweder oder) (es könnte auch != (ungleich) verwendet werden) | ||
| + | |||
| + | ====== Vergleichsoperatoren ====== | ||
| + | * == (Gleichheit) | ||
| + | * <, <=, >=, > (Kleiner, kleiner gleich, grösser gleich, grösser) | ||
| + | |||
| + | ====== For-Schleife (Anzahl Wiederholungen bekannt, inkl. Laufvariable) ====== | ||
| + | <code python> | ||
| + | for i in range(10): | ||
| + | print i # Gibt Zahlen von 0 bis und mit 9 aus. | ||
| + | |||
| + | for i in range(10, | ||
| + | print i # Gibt Zahlen von 10 bis und mit 19 aus. | ||
| + | </ | ||
| + | |||
| + | for i in range(30, | ||
| + | print i # Gibt Zahlen in 3er-Schritten von 30 bis und mit 99 aus | ||
| + | |||
| + | for i in (2, | ||
| + | print i # Gibt die Zahlen in der Liste aus | ||
| + | </ | ||
| + | |||
| + | ====== While-Schlaufe (Anzahl Wiederholungen typischerweise unbekannt) ====== | ||
| + | <code python> | ||
| + | z = 1000 | ||
| + | w = 1 | ||
| + | while w*w< | ||
| + | w+=1 | ||
| + | print " | ||
| + | </ | ||
| + | |||
| + | ====== Lösungsvorschläge ====== | ||
| + | <hidden Lösungsvorschläge> | ||
| + | <code python> | ||
| + | def permutationen(s, | ||
| + | if s=="": | ||
| + | print prefix | ||
| + | else: | ||
| + | for i in range(len(s)): | ||
| + | permutationen(s[0: | ||
| + | | ||
| + | |||
| + | def variationen(s, | ||
| + | if len(s)==len(prefix): | ||
| + | print prefix | ||
| + | else: | ||
| + | for i in range(len(s)): | ||
| + | variationen(s, | ||
| + | |||
| + | permutationen(" | ||
| + | variationen(" | ||
| + | </ | ||
| + | </ | ||