No sé por qué no funciona (conversor decimal-binario)

Iniciado por pablo256, 6 Abril 2015, 23:39 PM

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

pablo256

Muy buenas a todos/as! Haciendo el ejercicio 102 de C (aunque en C++, que es lo que estoy aprendiendo), se me ocurrió utilizar una función recursiva que fuera escribiendo los valores en un array desde el índice 0 hasta el índice x, pero no sé por qué no funciona (al final con un par de bucles for escribo los datos y los muestro en pantalla). Si alguien pudiera decirme en qué falla la función le estaría muy agradecido  :D

Aquí está:

        void convbin( int num, int index ){
        if ( num <= 2 ){
              bin[index + 1] = num%2;
             }
        else {
              convbin (num/2, 0);
             }
        }


Saludos!

ivancea96

No me fijé mucho pero en la llamada recursiva, siempre envías index=0.

pablo256

Muchas gracias por tu respuesta, voy a ver si llego a alguna solución jajajalo dejaba en 0 porque no quería que aumentara el valor hasta llegar al if, pero tienes razón, así como está siempre va a ser 1 aún después de llegar al if.
Saludos!

ivancea96

Por si te interesa, modifiqué un poco el código para que quede funcional. Eso sí, el array queda invertido.

Spoiler

void convbin( int num, int index ){
    if ( num > 0 ){
        bin[index] = num%2;
        convbin (num/2, index+1);
    }
}

pablo256

Muchas gracias! Lo que no entiendo es a qué te refieres con que queda invertido, en principio el primer módulo (el que estaría a la izquierda) lo escribe en la posición
  • no? Así queda mucho mejor que le mío la verdad jajaja

ivancea96

Invertido me refería a que si leemos del 0 al X el array, queda "01011", cuando el orden de lectura normal es "11010". pero bueno, era solo un dato xD

pablo256

Aaah, pero así queda con un bucle también, luego se imprime desde el último índice escrito y ya está  :D