• Viernes 29 de Marzo de 2024, 01:00

Autor Tema:  duda en una función  (Leído 2009 veces)

super_eman

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
duda en una función
« en: Miércoles 15 de Diciembre de 2010, 04:22 »
0
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
  1. function bien(q:integer):boolean;
  2.  
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.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: duda en una función
« Respuesta #1 en: Miércoles 15 de Diciembre de 2010, 08:51 »
0
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
  1. funcion es_potencia_2(n: entero): booleano
  2. comienzo
  3.     si (n = 1) entonces devuelve verdadero
  4.     si (n mod 2 = 0) entonces devuelve es_potencia_2(n/2)
  5.     si no, devuelve falso
  6. fin
  7.  

super_eman

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: duda en una función
« Respuesta #2 en: Miércoles 15 de Diciembre de 2010, 10:56 »
0
Muchas Gracias!!!!
Me diste una Gran Mano. Ya lo estoy probando.
Código: Pascal
  1.  
  2. function potenciade2(n:integer):boolean;
  3. begin
  4.    if (n=1) then potenciade2:=true;
  5.    if (n mod 2 = 0) then potenciade2:=potenciade2(n/2)
  6.    else potenciade2:= false
  7. end;
  8.  

Siempre sale False?? :hitcomp:
Saludos.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: duda en una función
« Respuesta #3 en: Miércoles 15 de Diciembre de 2010, 12:03 »
0
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
  1. if (n = 1) -> falso
  2. if (n mod 2 = 0) -> verdadero -> espotenciade2(1)
  3. if (n = 1) -> verdadero -> espotenciade2 = verdadero
  4. if (n mod 2 = 0) -> falso -> espotenciade2 = falso
  5. devuelve falso
  6.  

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í:

Código: Pascal
  1. function espotenciade2(n:integer):boolean;
  2. begin
  3.    if (n=1) then espotenciade2:=true;
  4.    else if (n mod 2 = 0) then espotenciade2:=espotenciade2(n/2)
  5.    else espotenciade2:= false
  6. end;
  7.  
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.

super_eman

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: duda en una función
« Respuesta #4 en: Miércoles 15 de Diciembre de 2010, 12:33 »
0
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.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: duda en una función
« Respuesta #5 en: Miércoles 15 de Diciembre de 2010, 12:48 »
0
Suerte con ello.