Problema con programa conversor de decimal a binario

Iniciado por jamatbar, 27 Noviembre 2013, 17:55 PM

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

jamatbar

Buenas, tengo un ejercicio en el que me piden hacer un programa que pase de números positivos decimales a binario (incluyendo el 0), y yo he hecho esto:

//Incluimos las librerías propias y del sistema

#include <stdio.h>
#include "decBin.h"

//Declaramos las funciones

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

int main()
{
 int n;
 n = leeNumero();
 if (n > 0)
   {
     decBin(n);
   }
 printf("\n");

 return 0;
}


int leeNumero()
{
 int numero;
 do
   {
     printf(T_INTRODUZCA_NUMERO);
     scanf("\n%d", &numero);
   }
 while (numero < 0);           /*Con este bucle hacemos que si el numero introducido
                                  es negativo, no lo procese y vuelva a pedirlo */


 return numero;
}

//La funcion decBin realiza la conversión decimal-binario

void decBin(int n)
{
 if (n == 0)
   printf("0");

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

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


Aquí os pongo el fichero decBin.h:

#ifndef DECBIN_H
#define DECBIN_H

#define T_INTRODUZCA_NUMERO  "Introduzca un numero no negativo: "
#define T_INTRODUZCA_NUMERO2 "Introduzca un numero: "

#endif



Me compila bien, sin avisos ni nada, y funciona bien salvo cuando le digo que me convierta el 0 en binario (qué evidentemente sigue siendo 0), lo que hace es salir del programa, ¿alguna solución?

Gracias de antemano y un saludo!

rir3760

Cita de: jamatbar en 27 Noviembre 2013, 17:55 PMMe compila bien, sin avisos ni nada, y funciona bien salvo cuando le digo que me convierta el 0 en binario (qué evidentemente sigue siendo 0), lo que hace es salir del programa, ¿alguna solución?
Eso sucede porque en la función main llamas a la función "decBin" solo si el numero introducido es mayor que cero:
n = leeNumero();
if (n > 0){
   decBin(n);
}
printf("\n");


Eso es innecesario ya que en la función "leeNumero" verificas que el numero introducido no sea negativo, sustituye el fragmento anterior por:
n = leeNumero();
decBin(n);
printf("\n");

Una vez verifiques el correcto funcionamiento del programa con ese cambio el siguiente (cambio) es eliminar la variable "n".

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

vangodp

#2
metelo en un bucle si quieres es seguir pedindo numeros :D

Segun comenta rir3760 veo una posible solucion...
Seria:
Código (cpp) [Seleccionar]

if (n >= 0){
 decBin(n);
}


¿que os parece?  :rolleyes: