Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: jamatbar en 11 Enero 2014, 17:40 PM

Título: ¿Cómo hacer el diagrama de flujo de esta función?
Publicado por: jamatbar en 11 Enero 2014, 17:40 PM
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!
Título: Re: ¿Cómo hacer el diagrama de flujo de esta función?
Publicado por: engel lex 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
Título: Re: ¿Cómo hacer el diagrama de flujo de esta función?
Publicado por: jamatbar en 12 Enero 2014, 13:34 PM
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)
Título: Re: ¿Cómo hacer el diagrama de flujo de esta función?
Publicado por: engel lex en 12 Enero 2014, 13:50 PM
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
Título: Re: ¿Cómo hacer el diagrama de flujo de esta función?
Publicado por: jamatbar en 12 Enero 2014, 15:39 PM
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)
Título: Re: ¿Cómo hacer el diagrama de flujo de esta función?
Publicado por: ivancea96 en 12 Enero 2014, 16:59 PM
Ahora falta el print n%2 :O
Título: Re: ¿Cómo hacer el diagrama de flujo de esta función?
Publicado por: jamatbar en 12 Enero 2014, 19:23 PM
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)
Título: Re: ¿Cómo hacer el diagrama de flujo de esta función?
Publicado por: engel lex en 12 Enero 2014, 20:45 PM
eso, correcto :P

si tienes duda avisa :P