Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| gf_informatik:zahlensysteme [2025-06-12 11:11] – [Zahlensysteme] sca | gf_informatik:zahlensysteme [2025-06-24 06:59] (aktuell) – [Lösungen] sca | ||
|---|---|---|---|
| Zeile 102: | Zeile 102: | ||
| ++++Binary to Decimal| | ++++Binary to Decimal| | ||
| - | Verschiedene Versionen: | + | Nehmen wir `b = ' |
| + | ``` | ||
| + | Ziffer: | ||
| + | Position: 012345 | ||
| + | ``` | ||
| + | Um die Binärzahl in eine Dezimalzahl umzurechnen, | ||
| + | $$1 \cdot 2^\color{red}{5} + 0 \cdot 2^\color{red}{4} + 0 \cdot 2^\color{red}{3} + 1 \cdot 2^\color{red}{2} + 0 \cdot 2^\color{red}{1} + 1 \cdot 2^\color{red}{0}$$ | ||
| + | |||
| + | Zu jeder Ziffer gehört also die passende Potenz: | ||
| + | ``` | ||
| + | Ziffer: | ||
| + | Position: 012345 | ||
| + | Potenz: | ||
| + | ``` | ||
| + | Die Schwierigkeit bei diesem Code ist, dass **Position und Exponent genau gegenteilig sind**: Die Position startet bei $0$ und zählt hoch, der Exponent startet bei $5$ und zählt herunter. | ||
| + | |||
| + | Dieses Problem kann man unterschiedlich lösen. Zwei mögliche Ansätze sind: | ||
| + | |||
| + | 1. Man macht **zwei separate Variablen**: | ||
| + | 2. Man **dreht den Binärstring um**, also aus `' | ||
| + | |||
| + | Hier einige mögliche Lösungen für den ersten Ansatz: | ||
| <code python> | <code python> | ||
| - | def binary_to_decimal_1(b): | + | def binary_to_decimal_1a(b): |
| - | | + | |
| - | | + | Löse mit zwei Variablen: |
| - | | + | - Variable i (der for-Schleife) zählt alle Positionen durch |
| - | | + | - Variable exponent legt Exponenten fest und zählt herunter |
| - | | + | """ |
| - | return | + | dec = 0 # Dezimalzahl |
| + | | ||
| + | | ||
| + | | ||
| + | dec = dec + 2**exponent | ||
| + | | ||
| + | return | ||
| - | def binary_to_decimal_2(b): | + | print(binary_to_decimal_1a(' |
| - | d = 0 # decimal nr | + | |
| - | i = 0 | + | |
| - | while i < len(b): | + | |
| - | d = d + int(b[-i-1]) * 2**i # can also use negative indices to go through d in reverse order | + | |
| - | i = i + 1 | + | |
| - | return d | + | |
| - | def binary_to_decimal_3(b): | + | def binary_to_decimal_1b(b): |
| - | | + | |
| - | | + | Wie Varianbte 1a, nur gehen wir mit for-Schleife direkt die Elemente des Binärstrings durch (ohne Position) |
| - | | + | """ |
| - | | + | dec = 0 # Dezimalzahl |
| - | | + | |
| - | | + | |
| - | i = i - 1 | + | if nr == ' |
| - | return | + | dec = dec + 2**exponent |
| + | exponent = exponent - 1 | ||
| + | | ||
| + | |||
| + | print(binary_to_decimal_1b(' | ||
| + | |||
| + | def binary_to_decimal_1c(b): | ||
| + | """ | ||
| + | Wie Varianbte 1b, nur ohne if. Dafür wandeln wir die Elemente des Binärstrings in eine Zahl um. | ||
| + | """ | ||
| + | dec = 0 # Dezimalzahl | ||
| + | exponent = len(b) - 1 # Exponent Startwert | ||
| + | for nr in b: # Schleife über Position | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | print(binary_to_decimal_1c(' | ||
| + | |||
| + | def binary_to_decimal_1d(b): | ||
| + | """ | ||
| + | Wie Varianbte 1a, nur wird exponent direkt aus i berechnet und muss dadurch nicht in jedem Schritt der Schleife um 1 reduziert werden. | ||
| + | """ | ||
| + | dec = 0 # Dezimalzahl | ||
| + | for i in range(len(b)): | ||
| + | exponent = len(b) - i - 1 # Berechnung Exponent | ||
| + | if b[i] == ' | ||
| + | dec = dec + 2**exponent | ||
| + | return | ||
| + | |||
| + | print(binary_to_decimal_1d(' | ||
| </ | </ | ||
| + | |||
| ++++ | ++++ | ||