¿Alguien me puede explicar este programa en C? (Dec-Binario)

Iniciado por jamatbar, 18 Diciembre 2013, 11:46 AM

0 Miembros y 1 Visitante están viendo este tema.

jamatbar

Buenas, tengo un programa que pasa de decimal (solo números positivos) a binario, pero no entiendo muy bien como hace la conversión, este es el código:

#include <stdio.h>

int leeNumero();
void decBin(int n);

int main()
{
  int n;
  n = leeNumero();
  decBin(n);
  printf("\n);

 return 0;
}

int leeNumero()
{
   int numero;
   do
      {
        printf("Introduzca un número no negativo: ");
        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);
       }
}



Yo el programa lo entiendo de esta manera:

Declaramos las funciones leeNumero y decBin, entramos en la función main, a través de la función leeNumero se comprueba que el número no sea negativo, volvemos a la función main y entramos en la función decBin, y es ahí donde me surge la duda, ya que no entiendo muy bien como hace la conversión a binario :S

¿Alguna ayuda?, gracias de antemano!

P.D: El programa funciona perfectamente

Almapa

Por el nombre de la función se puede intuir más o menos lo que va a hacer.

Citarif (n == 0)
        printf("0");

Si el número introducido es 0, imprime 0. Pues 0 en binario es 0.

Citarelse if (n == 1)
        printf("1");

Lo mismo con el 1.

Citarelse
        {
           decBin(n / 2);
           printf("%d", n % 2);
        }


Para el resto de números se pasa de decimal a binario mediante una función recursiva que se dedica a dividir el número entre 2 (Procedimiento para pasar de decimal a binario  http://recursostic.educacion.es/secundaria/edad/4esotecnologia/quincena5/4q2_contenidos_2c.htm ).


Y eso es todo.

Un saludo!

jamatbar

Cita de: Almapa en 18 Diciembre 2013, 12:02 PM
Por el nombre de la función se puede intuir más o menos lo que va a hacer.

Si el número introducido es 0, imprime 0. Pues 0 en binario es 0.

Lo mismo con el 1.


Para el resto de números se pasa de decimal a binario mediante una función recursiva que se dedica a dividir el número entre 2 (Procedimiento para pasar de decimal a binario  http://recursostic.educacion.es/secundaria/edad/4esotecnologia/quincena5/4q2_contenidos_2c.htm ).


Y eso es todo.

Un saludo!

Muchas gracias, no me había mirado el tema de funciones recursivas y por eso no caía xD