0 Daumen
1,2k 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

Avatar 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.

Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community