[Parcial][Mayo][2009][no entiendo solucion- Ejercicio 1.b]

[Parcial][Mayo][2009][no entiendo solucion- Ejercicio 1.b]

de Agustina Parnizari Lorente -
Número de respuestas: 2

Hola, no entiendo la solución que publicaron del ejercicio. 

Me gustaría saber si esta bien mi versión, si alguien lo ve le agradezco 

procedure suma1 (VAR L: LBin);

VAR

      iter: Lbin;

      dec: cardinal;

BEGIN

   dec:= BinADec(L)+1; (*binadec parte a del ej);

   iter:= L;

   while iter<>nil and dec>0 do 

       iter^.dato:= dec MOD 2;

       dec:= dec DIV 2;

      iter:= iter^.sig;

  end;

  WHILE dec>0 do (* por si hay que agregar mas elementos*)

      new(iter);

      iter^.dato:= dec mod 2;

      iter^.sig:= nil;

      dec:= dec div 2

    end;

    return L

End Suma1;









En respuesta a Agustina Parnizari Lorente

Re: [Parcial][Mayo][2009][no entiendo solucion- Ejercicio 1.b]

de Marcos Viera - InCo -
No verifiqué si tu código es correcto o no, pero te puedo decir que no cumple con las premisas del ejercicio, dado que utiliza procedimientos auxiliares y recorre más de una vez la lista.

La solución propuesta no hace más que realizar directamente la suma de binarios. Es decir, que si tiene que sumar 1 + 1 el resultado de ese dígito es 0 y se pasa un "carry" de 1 al siguiente dígito. Se sigue así hasta encontrarse con un dígito 0, donde la suma 1 + 0 = 1, o al terminarse el número, donde tendría que agregar un nuevo dígito 1.

Por ejemplo,
-si tengo que sumarle uno a 100:
comienzo con 1 + 0 = 1 y obtengo el resultado: 101

-si tengo que sumarle uno a 1011:
comienzo con 1 + 1 = 0 y paso 1 al siguiente dígito
sigo con 1 + 1 = 0 y paso 1 al siguiente dígito
tengo 1 + 0 = 1 y obtengo el resultado: 1100

- si tengo que sumarle uno a 11:
comienzo con 1 + 1 = 0 y paso 1 al siguiente dígito
sigo con 1 + 1 = 0 y paso 1 al siguiente dígito
como no hay más dígitos agrego un 1 y obtengo el resultado: 100

saludos