Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jamatbar en 27 Noviembre 2013, 17:55 pm



Título: Problema con programa conversor de decimal a binario
Publicado por: jamatbar en 27 Noviembre 2013, 17:55 pm
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:

Código:
//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:

Código:
#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!


Título: Re: Problema con programa conversor de decimal a binario
Publicado por: rir3760 en 27 Noviembre 2013, 18:08 pm
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?
Eso sucede porque en la función main llamas a la función "decBin" solo si el numero introducido es mayor que cero:
Código
  1. n = leeNumero();
  2. if (n > 0){
  3.   decBin(n);
  4. }
  5. 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:
Código
  1. n = leeNumero();
  2. decBin(n);
  3. printf("\n");
Una vez verifiques el correcto funcionamiento del programa con ese cambio el siguiente (cambio) es eliminar la variable "n".

Un saludo


Título: Re: Problema con programa conversor de decimal a binario
Publicado por: vangodp en 27 Noviembre 2013, 18:21 pm
metelo en un bucle si quieres es seguir pedindo numeros :D

Segun comenta rir3760 veo una posible solucion...
Seria:
Código
  1. if (n >= 0){
  2.  decBin(n);
  3. }
  4.  

¿que os parece?  :rolleyes:


Título: Re: Problema con programa conversor de decimal a binario
Publicado por: jamatbar en 27 Noviembre 2013, 18:32 pm
Hecho, muchas gracias!