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:binary_collection [2025-04-28 10:19] – [Rückwärts] hof | gf_informatik:zahlensysteme:binary_collection [2026-05-05 06:49] (aktuell) – [Strings verketten] hof | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ## Binärzahlen | + | ## Binärzahlen |
| Das Dossier enthält mehrere Programmieraufgaben, | Das Dossier enthält mehrere Programmieraufgaben, | ||
| Zeile 8: | Zeile 8: | ||
| *Direkte* Schleife über alle Buchstaben eines Strings (einer Zeichenfolge): | *Direkte* Schleife über alle Buchstaben eines Strings (einer Zeichenfolge): | ||
| - | <code python> | + | <bottom-editor style=" |
| - | b = ' | + | |
| for digit in b: | for digit in b: | ||
| - | print(digit) | + | print(digit)</ |
| - | </code> | + | |
| #### Parallel über zwei Strings | #### Parallel über zwei Strings | ||
| - | Bei der _indirekten_ Schleife steht der Ausdruck hinter `in` für die Liste der Indices, ist also eine Liste von Ganzzahlen (`int`). Die Schleifenvariable heisst meistens `index` oder kurz `i`. Um auf das uns interessierende Element zuzugreifen, | + | Bei der _indirekten_ |
| - | *Indirekte* Schleife über die Buchstaben in zwei gleichlangen Strings: | + | *Indirekte* |
| - | <code python> | + | <bottom-editor>b1 = ' |
| - | b1 = ' | + | |
| b2 = ' | b2 = ' | ||
| for index in range(len(b1)): | for index in range(len(b1)): | ||
| Zeile 26: | Zeile 23: | ||
| digit2 = b2[index] | digit2 = b2[index] | ||
| print(digit1, | print(digit1, | ||
| - | </code> | + | </bottom-editor> |
| Oder mit `while`: | Oder mit `while`: | ||
| - | <code python> | + | <bottom-editor>b1 = ' |
| - | b1 = ' | + | |
| b2 = ' | b2 = ' | ||
| index = 0 | index = 0 | ||
| Zeile 39: | Zeile 35: | ||
| print(digit1, | print(digit1, | ||
| index = index + 1 | index = index + 1 | ||
| - | </code> | + | </bottom-editor> |
| - | Elegante Alternative mit [[https:// | + | Elegante Alternative mit [[https:// |
| - | <code python> | + | <bottom-editor>b1 = ' |
| - | b1 = ' | + | |
| b2 = ' | b2 = ' | ||
| for digit1, digit2 in zip(b1, b2): | for digit1, digit2 in zip(b1, b2): | ||
| print(digit1, | print(digit1, | ||
| - | </code> | + | </bottom-editor> |
| - | + | ||
| #### Rückwärts | #### Rückwärts | ||
| Erste Möglichkeit: | Erste Möglichkeit: | ||
| - | <code python> | + | <bottom-editor>b = ' |
| - | b = ' | + | |
| for index in range(len(b)): | for index in range(len(b)): | ||
| reversed_index = len(b) - 1 - index | reversed_index = len(b) - 1 - index | ||
| digit = b[reversed_index] | digit = b[reversed_index] | ||
| print(digit) | print(digit) | ||
| - | </code> | + | </bottom-editor> |
| Etwas kompakter: `range` mit einem Step-Argument: | Etwas kompakter: `range` mit einem Step-Argument: | ||
| - | <code python> | + | <bottom-editor>b = ' |
| - | b = ' | + | |
| # range(start, | # range(start, | ||
| for index in range(len(b) - 1, -1, -1): | for index in range(len(b) - 1, -1, -1): | ||
| digit = b[index] | digit = b[index] | ||
| print(digit) | print(digit) | ||
| - | </code> | + | </bottom-editor> |
| Oder mit `while`: | Oder mit `while`: | ||
| - | <code python> | + | <bottom-editor>b = ' |
| - | b = ' | + | |
| index = len(b) - 1 # Letzter gültiger Index | index = len(b) - 1 # Letzter gültiger Index | ||
| while index >= 0: | while index >= 0: | ||
| Zeile 83: | Zeile 76: | ||
| print(digit) | print(digit) | ||
| index = index - 1 | index = index - 1 | ||
| - | </code> | + | </bottom-editor> |
| Noch kompakter: Die Funktion [[https:// | Noch kompakter: Die Funktion [[https:// | ||
| - | <code python> | + | <bottom-editor>b = ' |
| - | b = ' | + | |
| for d in reversed(b): | for d in reversed(b): | ||
| print(d) | print(d) | ||
| - | </code> | + | </bottom-editor> |
| Noch kompakter (aber auch leserlich? | Noch kompakter (aber auch leserlich? | ||
| - | <code python> | + | <bottom-editor>b = ' |
| - | b = ' | + | |
| for d in b[::-1]: | for d in b[::-1]: | ||
| print(d) | print(d) | ||
| - | </code> | + | </bottom-editor> |
| Zeile 107: | Zeile 98: | ||
| Am einfachsten mit `while`: | Am einfachsten mit `while`: | ||
| - | <code python> | + | <bottom-editor>b1 = ' |
| - | b1 = ' | + | |
| b2 = ' | b2 = ' | ||
| index = len(b1) - 1 | index = len(b1) - 1 | ||
| Zeile 117: | Zeile 107: | ||
| print(digit1, | print(digit1, | ||
| index = index - 1 | index = index - 1 | ||
| - | </code> | + | </bottom-editor> |
| Eleganter mit `reversed` und `zip` (kein Prüfungsstoff): | Eleganter mit `reversed` und `zip` (kein Prüfungsstoff): | ||
| - | <code python> | + | <bottom-editor>b1 = ' |
| - | b1 = ' | + | |
| b2 = ' | b2 = ' | ||
| for d1, d2 in zip(reversed(b1), | for d1, d2 in zip(reversed(b1), | ||
| print(d1, d2) | print(d1, d2) | ||
| - | </code> | + | </bottom-editor> |
| ++++ | ++++ | ||
| - | |||
| ### Division und Rest | ### Division und Rest | ||
| Zeile 135: | Zeile 124: | ||
| Zwei Zahlen `a` und `b` - was gibt $\lfloor a/b\rfloor$ (Ganzzahldivision), | Zwei Zahlen `a` und `b` - was gibt $\lfloor a/b\rfloor$ (Ganzzahldivision), | ||
| - | <code python> | + | <bottom-editor>a = 42 |
| - | a = 42 | + | |
| b = 2 | b = 2 | ||
| quotient = a // b | quotient = a // b | ||
| rest = a % b | rest = a % b | ||
| - | </code> | + | print(quotient, |
| + | </bottom-editor> | ||
| + | |||
| + | #### Bit-Operationen (kein Prüfungsstoff) | ||
| + | Statt der gewohnten Division haben Computer spezielle [[https:// | ||
| + | * `<<` ist der _Shift-Left_-Operator, | ||
| + | * `>>` ist der _Shift-Right_-Operator, | ||
| + | |||
| + | < | ||
| + | print(3 << 1) # Resultat 6: 3 = 00000011, 00000011 << 1 = 00000110 = 6 | ||
| + | print(13 >> 2) # Resultat 3: 13 = 00001101, 00001101 >> 2 = 000000011 = 3 | ||
| + | </ | ||
| ### Strings und Integers | ### Strings und Integers | ||
| Zeile 150: | Zeile 150: | ||
| Ein `string` ist eine Folge von Buchstaben. Die Folge kann auch leer sein (`'' | Ein `string` ist eine Folge von Buchstaben. Die Folge kann auch leer sein (`'' | ||
| - | <code python> | + | <bottom-editor> |
| digit1 = ' | digit1 = ' | ||
| digit2 = ' | digit2 = ' | ||
| - | summe = digit1 + digit2 | + | # Absicht: Summe soll die Zahl 2 sein |
| - | print(summe) | + | summe = digit1 + digit2 |
| + | # Resultat: String-Verkettung zu ' | ||
| + | print(f' | ||
| - | print(int(digit1) + int(digit2)) | + | # Abhilfe: Strings in Zahlen konvertieren |
| - | </code> | + | summe = int(digit1) + int(digit2) |
| + | print(f' | ||
| + | </bottom-editor> | ||
| #### Zahlen | #### Zahlen | ||
| Zeile 166: | Zeile 170: | ||
| Strings können in Zahlen umgewandelt werden, wenn der Inhalt des Strings einer Zahl entspricht: | Strings können in Zahlen umgewandelt werden, wenn der Inhalt des Strings einer Zahl entspricht: | ||
| - | <code python> | + | <bottom-editor>zahl = int(' |
| - | zahl = int(' | + | |
| zahl = int(' | zahl = int(' | ||
| zahl = float(' | zahl = float(' | ||
| zahl = float(' | zahl = float(' | ||
| - | </code> | + | </bottom-editor> |
| Addieren, subtrahieren oder multiplizieren wir zwei Ganzzahlen, resultiert wiederum eine Ganzzahl. Bei der Division hingegen entsteht als Resultat ein `float`. | Addieren, subtrahieren oder multiplizieren wir zwei Ganzzahlen, resultiert wiederum eine Ganzzahl. Bei der Division hingegen entsteht als Resultat ein `float`. | ||
| Zeile 177: | Zeile 180: | ||
| Strings sind *immutable*, | Strings sind *immutable*, | ||
| - | <code python> | + | <bottom-editor>s1 = ' |
| - | s1 = ' | + | |
| s2 = ' | s2 = ' | ||
| print(s1 + s2) # prints ' | print(s1 + s2) # prints ' | ||
| - | </code> | + | </bottom-editor> |
| Dasselbe ist auch praktisch, um Buchstaben in einer Schleife aneinanderzureihen: | Dasselbe ist auch praktisch, um Buchstaben in einer Schleife aneinanderzureihen: | ||
| - | <code python> | + | <bottom-editor>def flip_bits(b): |
| - | def flip_bits(b): | + | |
| result = '' | result = '' | ||
| for digit in b: | for digit in b: | ||
| - | if digit = ' | + | if digit == ' |
| result = result + ' | result = result + ' | ||
| - | elif digit = ' | + | elif digit == ' |
| result = result + ' | result = result + ' | ||
| return result | return result | ||
| - | </code> | + | |
| + | print(flip_bits(' | ||
| + | </bottom-editor> | ||
| **Achtung**: | **Achtung**: | ||
| - | <code python> | + | <bottom-editor>a = 101 # eine Zahl |
| - | a = 101 # eine Zahl | + | |
| b = ' | b = ' | ||
| c = a + b # Fehler! | c = a + b # Fehler! | ||
| Zeile 208: | Zeile 210: | ||
| # String umwandeln in Zahl | # String umwandeln in Zahl | ||
| c = a + int(b) | c = a + int(b) | ||
| - | </code> | + | </bottom-editor> |
| - | **String mit Nullen auffüllen** | + | #### String mit Nullen auffüllen |
| Ziel: einen Binärstring vorne mit Nullen auffüllen, damit mindestens `n` Stellen vorhanden sind: | Ziel: einen Binärstring vorne mit Nullen auffüllen, damit mindestens `n` Stellen vorhanden sind: | ||
| Zeile 216: | Zeile 218: | ||
| Variante 1: Mit `while`: | Variante 1: Mit `while`: | ||
| - | <code python> | + | <bottom-editor>b = ' |
| - | b = ' | + | |
| n = 8 | n = 8 | ||
| while len(b) < n: | while len(b) < n: | ||
| b = ' | b = ' | ||
| - | </code> | + | print(b) |
| + | </bottom-editor> | ||
| Variante 2 (nicht Lernstoff): Strings multiplizieren | Variante 2 (nicht Lernstoff): Strings multiplizieren | ||
| Zeile 227: | Zeile 229: | ||
| Strings können übrigens auch mit dem `*` Operator verknüpft werden - zum Beispiel um die Anzahl fehlender Nullen zu erstellen: | Strings können übrigens auch mit dem `*` Operator verknüpft werden - zum Beispiel um die Anzahl fehlender Nullen zu erstellen: | ||
| - | <code python> | + | <bottom-editor>b = ' |
| - | b = ' | + | |
| n = 8 | n = 8 | ||
| count = n - len(b) | count = n - len(b) | ||
| zeros = ' | zeros = ' | ||
| b = zeros + b | b = zeros + b | ||
| - | </code> | + | print(b) |
| + | </bottom-editor> | ||
| Variante 3 (nicht Lernstoff): Eleganter mit [[https:// | Variante 3 (nicht Lernstoff): Eleganter mit [[https:// | ||
| - | <code python> | + | |
| - | b = ' | + | <bottom-editor>b = ' |
| n = 8 | n = 8 | ||
| - | b = b.zfill(n) | + | print(b.zfill(n)) |
| - | </code> | + | </bottom-editor> |
| ### Funktionen | ### Funktionen | ||