Buenas, tengo este programa que pasa de decimal a binario:
#include <stdio.h>
#include "decBin.h"
void decBin(int n);
int leeNumero();
int main ()
{
int n;
n = leeNumero();
decBin(n);
printf("\n");
return 0;
}
int leeNumero()
{
int numero;
do{
printf(T_INTRODUZCA_NUMERO);
scanf("%d", &numero);
}
while(numero < 0);
return numero;
}
void decBin (int n)
{
if (n == 0)
printf("0");
else if (n == 1)
printf("1");
else
{
decBin (n/2);
printf("%d", n % 2);
}
}
El diagrama de flujo de la función main como de la función leeNumero sé hacerlos, pero no sé como hacer el de la función recursiva decBin, ¿alguna ayuda?
Gracias de antemano y saludos!
cuando llamas a decBin dentro de esa misma funcion, para efectos del diagrama de flujo es como si llamaras a una función externa, ya que a fin de cuentas eso es lo que está haciendo, que la función que llame seaexactamente igual, no tiene nada que ver :P
Cita de: engelx en 12 Enero 2014, 08:27 AM
cuando llamas a decBin dentro de esa misma funcion, para efectos del diagrama de flujo es como si llamaras a una función externa, ya que a fin de cuentas eso es lo que está haciendo, que la función que llame seaexactamente igual, no tiene nada que ver :P
A ver si lo he entendido, yo lo he hecho así xD
(http://i352.photobucket.com/albums/r334/javierinho1000/diagrama_zpsbe20f525.png) (http://s352.photobucket.com/user/javierinho1000/media/diagrama_zpsbe20f525.png.html)
no :P porque eso seria un equivalente a
void decBin (int n){
while(1){
if (n == 0){
printf("0");
return 0; //finalizar la funcion
}else if (n == 1){
printf("1");
return 1; //finalizar la funcion
}else{
decBin (n/2);
printf("%d", n % 2);
}
}
}
fijate que en el diagrama dices
inicio
n es igual a 0?
-si, entonces imprime y fin
-no, continua
n es igual a 1?
-si, entonces imprime y fin
-no, continua
hacer funcion decBin
imprimir 0 o 1 n%2
volver al inicio
y te crea un bucle infinito si n>1 (ya que n siempre tendrá el mismo valor)
como te dije, ejecuta a ese recursivo como una función externa, tu función no tiene bucles como para que algo vuelva al inicio, todo apunta hacia el fin
un recursivo no es un bucle a nivel de control de flujo... es una llamada a otra función, esa otra función, tiene su propio alcance (scope) y sus propios valores
inténtalo de nuevo :P
A ver si lo he entendido, ¿entonces quedaría así?
(http://i352.photobucket.com/albums/r334/javierinho1000/diagramita_zpsb3b8b764.png) (http://s352.photobucket.com/user/javierinho1000/media/diagramita_zpsb3b8b764.png.html)
Ahora falta el print n%2 :O
Cita de: ivancea96 en 12 Enero 2014, 16:59 PM
Ahora falta el print n%2 :O
A ver si a la tercera es la vencida xD
(http://i352.photobucket.com/albums/r334/javierinho1000/diafgramafinal_zps773b89fb.png) (http://s352.photobucket.com/user/javierinho1000/media/diafgramafinal_zps773b89fb.png.html)
eso, correcto :P
si tienes duda avisa :P