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);
}
}