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-2020:zahlvar [2020/01/26 09:32] – [Quizz] Ivo Blöchliger | lehrkraefte:blc:informatik:ffprg1-2020:zahlvar [2022/02/10 13:54] (current) – [Rundungsregel] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Variablen mit Zahlen, Formatierte Ausgabe ====== | ||
| + | Programme, sollen natürlich verschiedene Dinge tun können. Dazu werden die Daten in Variablen gespeichert und dann mit den Variablen gerechnet. | ||
| + | <code python zahlvar.py> | ||
| + | a=3 | ||
| + | b=4 | ||
| + | |||
| + | c=(a**2+b**2)**0.5 | ||
| + | |||
| + | print(" | ||
| + | print(" | ||
| + | print(" | ||
| + | </ | ||
| + | * Studieren Sie den obigen Output | ||
| + | * Ändern Sie die Werte für a und b und studieren Sie den Output. | ||
| + | |||
| + | ===== Format-Strings===== | ||
| + | Format-Strings erlauben auf eine bequeme Art und Weise die Ausgabe von Zahlen festzulegen. Der Syntax ist immer der Formatstring (zwischen Anführungszeichen), | ||
| + | * %d Ganzahlen | ||
| + | * %f Dezimalzahlen (Ausgabe mit 6 Nachkommastellen) | ||
| + | * %s Zeichenketten (Strings) | ||
| + | * Modifikatoren: | ||
| + | * %.2f Anzahl Nachkommastellen (hier 2) | ||
| + | * %5.3f Fünf Stellen vor dem Komma (mit Leerschlägen füllen) und 3 nach dem Komma | ||
| + | * %04d Vier Stellen für Ganzzahl, mit führenden Nullen aufgefüllt. | ||
| + | |||
| + | Es gibt noch viel mehr Möglichkeiten und Varianten. [[https:// | ||
| + | |||
| + | |||
| + | ====== Aufgaben ====== | ||
| + | * Definieren Sie 3 Variablen k (Kapital), p (Zinsatz) und n (Anzahl Jahre). Das Programm soll das mit Zinseszins verzinste Kapital nach n Jahren auf 2 Kommastellen gerundet ausgeben. Die Ausgabe soll z.B. wie folgt aussehen: (% wird mit < | ||
| + | |||
| + | < | ||
| + | Nach 20 Jahren ist das Kapital von 100.00 mit einem Zins von 1.0% auf 122.02 angewachsen. | ||
| + | </ | ||
| + | |||
| + | * Definieren Sie 2 Variablen m (Masse in kg) und g (Körpergrösse in cm). Das Programm soll den BMI (Body-Mass Index) auf eine Nachkommastelle gerundet ausgeben. Z.B. so: | ||
| + | < | ||
| + | Bei 50 kg Gewicht und der Grösse 160 cm beträgt der bmi 19.5 | ||
| + | </ | ||
| + | |||
| + | <hidden Lösungsvorschläge> | ||
| + | <code python zinseszins.py> | ||
| + | k=100 | ||
| + | p=1 | ||
| + | n=20 | ||
| + | kn = k*(1+p/ | ||
| + | print(" | ||
| + | </ | ||
| + | <code python bmi.py> | ||
| + | m=50 | ||
| + | g=160 | ||
| + | bmi = ja das müssen Sie schon selber googeln :-P | ||
| + | print(" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ====== Quizz ====== | ||
| + | Was ist jeweils die Ausgabe folgender Zeilen? Können Sie das ohne die Zeilen auszuführen? | ||
| + | <quizlib id=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | |||
| + | ====== Dokumentation und Kuriositäten ====== | ||
| + | Die %f, %s und %d Formatierungen sind in vielen Programmiersprachen und Programmen implementiert und öfter mal praktisch zu kennen. | ||
| + | |||
| + | Die neue Python-Variante verwendet .format, das noch mehr Flexibilität bietet: Siehe https:// | ||
| + | |||
| + | ===== Rundungsregel ===== | ||
| + | " | ||
| + | * ''" | ||
| + | * ''" | ||
| + | * Achtung: Viele Zahlen, die mit abbrechenden Dezimalbrüchen dargestellt werden können, können im Binärsystem als Binärbruch nicht abbrechend dargestellt werden (wie z.B. 1/10). Diese Zahlen erscheinen deshalb «zufällig» gerundet. Wie z.B. | ||
| + | * ''" | ||
| + | * ''" | ||
| + | ===== Rechenungenauigkeit ===== | ||
| + | Was ist die Ausgabe (10 Summanden 0.1): | ||
| + | <code python> | ||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | Erklärung: $\frac{1}{10}$ kann im Zweiersystem nicht abbrechend dargestellt werden (wie z.B. $\frac{1}{3}$ im Dezimalsystem). D.h. es werden zwangsläufig Rechenfehler gemacht, die sich aber oft nur auf letzte von ca. 17 Dezimalstellen auswirken. | ||
| + | |||
| + | Weitere Beispiele sind folgende, wo 17 Stellen Genauigkeit nicht ausreichen: | ||
| + | <code python> | ||
| + | print(" | ||
| + | # produziert 10000000000.200001 | ||
| + | print(" | ||
| + | # produziert 100000000000.199997 | ||
| + | </ | ||