Programación General => Pascal => Mensaje iniciado por: super_eman en Miércoles 15 de Diciembre de 2010, 04:22
Título: duda en una función
Publicado por: super_eman en Miércoles 15 de Diciembre de 2010, 04:22
Hola, este es mi primer mensaje, ante todo quiero agradecer a todos los participantes y presentarme, soy profesor de matemáticas y estoy realizando una Licenciatura donde tengo esta materia que se llama programación... La venía estudiando bien hasta que me pegue un virus y se me paralizo la mitad de la cara, por ello no podía estudiar (ni trabajar) ya que no podía centrar la vista.... Rindo este viernes y tengo muchas dudas, las voy a ir publicando y si me ayudan estaré muy agradecido, sino también. El ejercicio dice así: "Una función booleana bien que verifique si q (entero positivo) es una potencia de 2".
se que debo crear una función con argumento entero y que sea booleana, es decir, que sea de esta forma
Código: Pascal
function bien(q:integer):boolean;
pero no se que ponerle como sentencias para que me diga true o false, estaba pensando en hacer la división de q / 2 y que pare cuando llegue a 1 y que diga que es true (en el caso de que sea potencia de dos) o que...no se me ocurre como hacerlo. Muchas Gracias.
Título: Re: duda en una función
Publicado por: m0skit0 en Miércoles 15 de Diciembre de 2010, 08:51
Uf, qué chungo eso del virus :blink:
Yendo a tu cuestión. Te lo dejo en pseudo-código, ya lo pasas a Pascal, que hace siglos que no programo en Pascal y la sintaxis se olvida :P :
Código: Text
funcion es_potencia_2(n: entero): booleano
comienzo
si (n = 1) entonces devuelve verdadero
si (n mod 2 = 0) entonces devuelve es_potencia_2(n/2)
si no, devuelve falso
fin
Título: Re: duda en una función
Publicado por: super_eman en Miércoles 15 de Diciembre de 2010, 10:56
Muchas Gracias!!!! Me diste una Gran Mano. Ya lo estoy probando.
Código: Pascal
function potenciade2(n:integer):boolean;
begin
if(n=1)then potenciade2:=true;
if(n mod2=0)then potenciade2:=potenciade2(n/2)
else potenciade2:=false
end;
Siempre sale False?? :hitcomp: Saludos.
Título: Re: duda en una función
Publicado por: m0skit0 en Miércoles 15 de Diciembre de 2010, 12:03
Creo recordar que Pascal devuelve el valor cuando termina la función, no cuando se le asigna el valor de retorno. Por ejemplo, si le pasamos n = 2:
Código: Text
if (n = 1) -> falso
if (n mod 2 = 0) -> verdadero -> espotenciade2(1)
if (n = 1) -> verdadero -> espotenciade2 = verdadero
if (n mod 2 = 0) -> falso -> espotenciade2 = falso
devuelve falso
En realidad tienes el problema de que se evalúa if (n mod 2 = 0) cuando n = 1, algo que no debería suceder. Prueba así:
Te aconsejo que pongas "es" delante de funciones que retornan un valor booleano, es como una convención no escrita :P ^_^ De esta forma es como una pregunta: ¿espotenciade2(n)? Verdadero/falso ;)
Espero haberme explicado bien, un saludo.
Título: Re: duda en una función
Publicado por: super_eman en Miércoles 15 de Diciembre de 2010, 12:33
Excelente!!!! ahora anda muy bien, lastima que no te conocí antes pero bueno...el viernes rindo y tengo demasiadas dudas. Saludos, gracias por tu amabilidad y claridad.
Título: Re: duda en una función
Publicado por: m0skit0 en Miércoles 15 de Diciembre de 2010, 12:48