Programación General > Pascal

 duda en una función

(1/2) > >>

super_eman:
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.

m0skit0:
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): booleanocomienzo    si (n = 1) entonces devuelve verdadero    si (n mod 2 = 0) entonces devuelve es_potencia_2(n/2)    si no, devuelve falsofin 

super_eman:
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 mod 2 = 0) then potenciade2:=potenciade2(n/2)   else potenciade2:= falseend; 
Siempre sale False?? :hitcomp:
Saludos.

m0skit0:
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) -> falsoif (n mod 2 = 0) -> verdadero -> espotenciade2(1)if (n = 1) -> verdadero -> espotenciade2 = verdaderoif (n mod 2 = 0) -> falso -> espotenciade2 = falsodevuelve 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í:


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

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa