Esercizio algoritmi

Pablitos23
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))

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

}

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.