0 Daumen
82 Aufrufe

Schreiben Sie Pseudo-Code um zwei n-bit Zahlen zu addieren. Die Zahlen A,B sind in jeweils einem Array der LÀnge n gespeichert. Die Summe soll in einem Array C der LÀnge n+1 gespeichert werden. Wie könnte so etwas aussehen ?

Mein Problem ist ich weiß nicht wie ich mit dem c-carry umgehen soll.

addieren(A,B)
C = A.length + 1

while i = A.length > 0
if(A[i] == 1 && A[i] == 1)
result[i] = 0
carrybit = 1

von

Lösung

carry = 0

for i = n to 0
C[i+1] = (A[i] + B[i] + carry) % 2
carry = (A[i] + B[i] + carry) / 2
C[0] = carry

1 Antwort

+2 Daumen
 
Beste Antwort
Mein Problem ist ich weiß nicht wie ich mit dem c-carry umgehen soll.

Es gibt verschiedene Möglichkeiten diese Problematik anzugehen. Eine (nicht elegante) Möglichkeit wÀre das Speichern des Carry-Bits in einer eigenen Datenstruktur, die dann bei Bedarf abgefragt wird.

Die weitaus effizientere Variante ist das Berechnen des Carry-Bits on-the-fly. Dies ist durch folgende (Java-)Funktion möglich:

public static int[] add(int[] A, int[] B){

int n = A.length;

int[] C = new int[n + 1];

// Carry-Bit
int carry = 0;

for(int i = n - 1; i >= 0; i--){
C[i+1] = (A[i] + B[i] + carry) % 2;
// Neuberechnung des Carry-Bits (0/1).
carry = (A[i] + B[i] + carry)/2;
}

// Carry-Bit an die erste Stelle schreiben.
C[0] = carry;
return C;
}

Zum Testen benötigst Du eine Ausgabefunktion:

public static void print(int[] to_print){
Arrays.stream(to_print).forEach(System.out::print);
}

Diese Funktion wurde mit den Bordmitteln von Java 8 implementiert und benötigt den Import

import java.util.Arrays;

In der Main kannst Du exemplarisch einige Werte testen:

public static void main(final String... args) {
int[] a = new int[]{1,1,1,1,1};
int[] b = new int[]{1,1,1,1,1};
print(add(a,b));
}

Übrigens: Mir hat es bei der Entwicklung von Pseudocode im Umfeld der technischen Informatik immer geholfen, die SchaltplĂ€ne fĂŒr die Umsetzung der arithmetischen Operationen zu studieren und daraus die benötigten Rechenoperationen abzuleiten.

von 8,3 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage sofort und kostenfrei

x
Made by a lovely community
...