• Welcome to Test Foro de elhacker.net SMF 2.1.
 

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

Started by jamatbar, 11 January 2014, 17:40 PM

0 Members and 1 Guest are viewing this topic.

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

Quote from: engelx on 12 January 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

Code (c) Select

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



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.