[ Foro de Pascal ]

función para determinar si es potencia de 2

15-Dec-2010 11:33
Emanuel Bazan
1 Respuestas

Hola me pidieron una función booleana que diga si un entero positivo es potencia de 2...Lo realice pero al ejecutarlo siempre me devuelve FALSE...Alguna ayuda?

program potenciasde2;
var
n:integer;
d:boolean;

function potenciade2(k:integer):boolean;
begin
  if (k=1) then potenciade2:=true;
  if (k mod 2 = 0) then potenciade2:= potenciade2(k div 2)
  else potenciade2:= false
end;

begin
 write('ingrese un numero: ');
 readln(n);
 writeln;
 writeln('¿Es potencia de dos?');
 d:=potenciade2(n);
 writeln(d)
end.


15-Dec-2010 18:33
Antonio P.G.

Hola.

Truco: sigue el flujo del programa.

Lo que ocurre es que en el procedimiento, si le entra un "k = 1", dice:

- ¿Es k = 1? Sí. Entonces, true.
- ¿Es (k mod 2) = 0? No. Vamos al else: FALSE.

Lo único que tienes que hacer es poner la pregunta de "¿Es un "1"?" al final del procedure o meterlo en el "else" que ya tienes ahí.

¡Ciao!






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)