Esercizio algoritmi
Input: due array A e B che rappresentano valori binari in Big-Endian.
Scrivere lo pseudo codice che somma i due elementi e li inserisce in un array C di n+1 elementi, con n uguale alla lunghezza massima fra A e B.
Mia soluzione:
Questa è la procedura che somma due bit che ritorna il valore e attiva il flag per il riporto:
(evito di scrivere il codice per tutti i casi (1,1)(1,0)(0,1)(0,0))
Ancora non ho controllato se funziona.
Avete qualche idea per risolverlo diversamente???
Scrivere lo pseudo codice che somma i due elementi e li inserisce in un array C di n+1 elementi, con n uguale alla lunghezza massima fra A e B.
Mia soluzione:
Questa è la procedura che somma due bit che ritorna il valore e attiva il flag per il riporto:
(evito di scrivere il codice per tutti i casi (1,1)(1,0)(0,1)(0,0))
sum(a,b) -> int
somma_binaria(A,B) { r=0 #riporto max = max(A.lenght , B.lenght) min = min(A.lenght, B.lenght) for i=max to 1 do #il primo indice dell'array è 1 e non 0 j=i-min if j>0 then if r==1 then C[i]=sum(1,sum(A[i],B[j])) else C[i]=sum(A[i],B[j]) endif else if r==1 then C[i]=sum(A[i],1) else C[i]=A[i] endif endif endfor if r==1 C[1]=1 endif }
Ancora non ho controllato se funziona.
Avete qualche idea per risolverlo diversamente???
Risposte
Scritto in Java e sembra funzionante:
public class Binary_Sum { static int r; public Binary_Sum(){}; static int sumB(int a, int b) { if (a==1 && b==1) {r=1; return 0;} if( (a==1 && b==0) || (a==0 && b==1)) {return 1;} else return 0; } public static void sum(int[] A, int[] B) { int max = Math.max(A.length, B.length); int min = Math.min(A.length, B.length); int[] C = new int[max+1]; for(int i=max-1, j=min-1; i>=0 ; i-- ,j--) { System.out.println("R="+r); System.out.println("A[i] ="+A[i]); System.out.println("B[j] ="+B[j]); if (j>=0) { if (r==1) { r=0; C[i+1]=sumB(1,sumB(A[i],B[j])); } else { C[i+1]=sumB(A[i],B[j]); } } else { if (r==1) { r=0; C[i+1]=sumB(A[i],1); } else { C[i+1]=A[i]; } } } if(r==1){C[0]=1;} System.out.println(Arrays.toString(C)); } public static void main(String[] args) { int[] A = new int[] {1,1,1}; int[] B = new int[] {1,0,1}; sum(A,B); } }