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

Dudas sobre el C/C++ en general
Responder
Mensaje
Autor
starkister
Mensajes: 21
Registrado: 06/11/2013 7:47 am

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

#1 Mensaje por starkister » 18/12/2013 2:27 am

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:

Código: Seleccionar todo

#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

starkister
Mensajes: 21
Registrado: 06/11/2013 7:47 am

#2 Mensaje por starkister » 18/12/2013 3:18 am

Solucionado!

Masakre
Mensajes: 249
Registrado: 06/06/2012 10:52 am

#3 Mensaje por Masakre » 20/12/2013 10:02 pm

De seguro ya lo entendiste. Pero te hago una pregunta, para reforzar tu comprensión de ello jeje.

Si el número es 0 o 1, muestras tal número y detienes la recursividad (ya no se vuelve a llamar a decBin).
Sino, se llama a decBin nuevamente y se imprime luego de ello n%2.

Me parece que n%x es n si n<x, ya que el cociente sería 0 y el residuo es el dividendo mismo. Entonces, ¿funciona bien si cambias decBin del siguiente modo?
- Eliminas las preguntas de si n es igual a 0 o 1.
- Añades una condición if(n!=0 && n!=1) que contenga a la sentencia decBin(n/2).
- Fuera de ese if usas el printf tal como está.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados