from numpy import * import datetime import operator def tabelle(name, verknuepfung, zeichen, basis): print(name) print(' ' + zeichen +' | ', end='') for i in range(basis + 1): print(f'{base_repr(i, basis):>4}', end='') print() print((basis + 2) * '---') for j in range(basis + 1): print(f'{base_repr(j, basis):>4} | ', end='') for i in range(basis + 1): print(f'{base_repr(verknuepfung(i, j), basis):>4}', end='') print() print() def schriftlich(a, b, wort, verknuepfung, basis): x = int(a, basis) y = int(b, basis) print(f'{base_repr(x, basis)} {wort} {base_repr(y, basis)} ist {base_repr(verknuepfung(x, y), basis)}.') def aufgabe(n): s = f'Aufgabe {n}' print() print(len(s) * '-') print(s) print(len(s) * '-') print() aufgabe(1) for i in range(32): print(base_repr(i, 5), end=', ') print() heute = datetime.date.today() jahr = heute.year print(f'dezimal {jahr} ist im Fünfersystem (pental?) {base_repr(heute.year, 5)}') aufgabe(2) tabelle('Addition', operator.add, '+', basis=5) tabelle('Multiplikation', operator.mul, '*', basis=5) aufgabe(3) schriftlich('1423', '2011', 'plus', operator.add, basis=5) schriftlich('1443', '243', 'plus', operator.add, basis=5) aufgabe(4) schriftlich('1402', '3', 'mal', operator.mul, basis=5) schriftlich('432', '123', 'mal', operator.mul, basis=5) aufgabe(5) print(base_repr(194, 5)) print(base_repr(678, 5)) print(base_repr(2930, 5)) aufgabe(6) print(f'{0b10011}:{0b110001}:{0b11001}') print(f'{0b10110}:{0b110111}:{0b111011}') aufgabe(7) tabelle('Addition', operator.add, '+', basis=2) tabelle('Multiplikation', operator.mul, '*', basis=2) aufgabe(8) schriftlich('10011', '1111', 'plus', operator.add, basis=2) schriftlich('11111', '11111', 'plus', operator.add, basis=2) aufgabe(9) schriftlich('10011', '11001', 'mal', operator.mul, basis=2) schriftlich('11111', '11111', 'mal', operator.mul, basis=2) aufgabe(10) schriftlich('11110000', '10', 'durch', operator.floordiv, basis=2) schriftlich('111100', '101', 'durch', operator.floordiv, basis=2) # print('\nDivision mit Rest') # schriftlich('111111', '101', 'durch (Ganzzahlquotient)', operator.floordiv, basis=2) # schriftlich('111111', '101', 'modulo (Rest der Division)', operator.mod, basis=2) a = '111111' b = '101' x = int(a, 2) y = int(b, 2) print(f'{a} durch {b} ist {base_repr(x // y, 2)} Rest {base_repr(x % y, 2)}') print('\nErgebnis als Kommazahl') a = '1011' b = '101' x = int(a, 2) y = int(b, 2) # Achtung, von Hand zwei Nullen nach Komma eingefügt! # Könnte 1/2 addieren, falls erste Nachkommastelle nicht 1, danach die erhaltene 1 zu einer Null machen... print(f'{a} durch {b} ist {base_repr(x // y, 2)}.00{base_repr(x % y * 2**20 // y, 2)}... (Periodenlänge 4)') aufgabe(11) for i in range(34): print(base_repr(i, 16), end=', ') print() aufgabe(12) print(int('FF', 16)) # Alternative: # print(0xFF) # print(0xff) print(int('AFFE', 16)) print(int('cafe07', 16)) aufgabe(13) x = 2024 print(f'{x} ist binär {base_repr(x, 2)} und hexadezimal {base_repr(x, 16)}') x = 3386 print(f'{x} ist binär {base_repr(x, 2)} und hexadezimal {base_repr(x, 16)}') aufgabe(14) print(f'{0b111100000101:0x}') print(f'{0b1100111101:0x}') print(f'{0xff:0b}') print(f'{0xcafe07:0b}') aufgabe(15) def konvertiere(x, b): # b sollte maximal 35 sein s = '' while x > 0: r = x % b if r < 10: s = str(r) + s else: s = chr(ord('A') + r - 10) + s x = x // b return s print('Die gesuchte Funktion "konvertiere" steht im Programm. Hier 2024 im 2er, 5er, 10er und 16er-System:') print(konvertiere(2024, 2)) print(konvertiere(2024, 5)) print(konvertiere(2024, 10)) print(konvertiere(2024, 16))