¿Cómo hacer el diagrama de flujo de esta función?

Iniciado por jamatbar, 11 Enero 2014, 17:40 PM

0 Miembros y 2 Visitantes están viendo este tema.

jamatbar

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!

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

jamatbar

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


engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

jamatbar

A ver si lo he entendido, ¿entonces quedaría así?


ivancea96


jamatbar


engel lex

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.