Brauche Hilfe bei diesem Python Code (Binärrechner)?

2 Antworten

In meinen Augen passt das nicht so ganz zusammen, wegen der zirkulären Abhängigkeit. Wenn dann müßtest Du in add_2bit für den Fall, daß beide Eingaben nur die Länge 1 haben breaken bzw. nciht mehr auf add_binary zurückgreifen.

Hier noch etwas grundlegendes:

def add_2bit(bit1, bit2, carry=0):
    # Add two 1-bit numbers with a carry using add_binary
    bit1, bit2, carry = int(bit1), int(bit2), int(carry)
    sum_result = (bit1 + bit2 + carry) % 2
    carry = (bit1 + bit2 + carry) // 2
    return str(sum_result), str(carry)

das kann man so machen, einfacher wäre aber:

def add_2bit (a,b):
   reutrn a&b,a^b # Carry = AND, Sum = XOR (Halbaddierer)

Da das eine Aufgabe ist, die auf Rekursion hinauslaufen würde (add_binary->add_3bit->add_2bit->add_binary...) sehe ich eigentlich nur einen Ausweg: Du brauchst eine Abbruchbedingung der Rekursion und diese muss nach Aufgabenstellung in add_binary liegen. Es ergibt keinen Sinn, wenn add_binary zwei Werte bekommt und sie dann noch mal an add_3bit weiterleitet.

Also macht add_binary eine Fallunterscheidung: Wenn beide Werte nur 1 Bit groß sein, übernimmt es die Addition selbst. Eigentlich wird dadurch die Aufgabe aber witzlos, weil der Übertrag dann ja auch schon dort gehandhabt werden muss... aber gut, vielleicht liegt die Idee woanders oder ich sehe was nicht.

Die eigentlich Idee besteht ja aus meiner Sicht in einem Ripple-Carry-Addierer. add_2bit ist ein Halbaddierer (und-Funktion für Übertrag, xor Funktion für Addition, nur 2 Bit als Eingabe), add_3bit ein Volladdierer (3 Bit als Eingabe, 2 Halbaddierer, oder-Verknüpfung für Übertrag oder so ähnlich)

KarlRanseierIII  04.12.2023, 23:14
Da das eine Aufgabe ist, die auf Rekursion hinauslaufen würde

Ich sehe nicht, wie eine Rekursion die zirkuläre Abhängigkeit aufbrechen soll, vielmehr scheint mir die Aufgabe hier fehlerhaft.

Das riecht der BEschreibung nach eher nach HA, VA, Addierwerk (seriell), nur ergibt die Abhängigkeit des HA auf das Addierwerk wenig Sinn.

0
kmkcl  04.12.2023, 23:21
@KarlRanseierIII

Ja, könnte ein Fehler in der Aufgabe sein. Die Nachbildung eines klassischen Addierwerkes wäre ja genau auch meine Vermutung. Ich hätte die zirkuläre Abhängigkeit ggf. genau so aufgelöst, wie man eine (unendliche) Rekursion verhindert: Eben mit Abbruchbedingung... Indem sich das gesamte Addierwerk für 2 Bits verhält wie ein Halbaddierer. Wie gesagt... irgendwie wird dann der Halbaddierer und die Aufgabe witzlos.

1