[c++] Problema con programa de Entero a Binario

Iniciado por audiogalaxy., 8 Septiembre 2013, 23:33 PM

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

audiogalaxy.

He intentado hacer un programa que convierta de Entero a Binario:

Lo que he hecho va así:

Código (cpp) [Seleccionar]

#include <iostream>
using namespace std;

int main(void)
{
float binario[100],residuo,cociente,par,inpar;
int numentero, numbinario,i,r,b;

cout<<"\t\tEscribe tu numero entero: ";
cin>>numentero;

for (i=numentero;numentero>1;i--)
{
cociente=numentero/2;
residuo=numentero%2;
        if(residuo==0)
{
par=cociente;
par=0;
binario[b]=par;
b++;
}
else
{
inpar=cociente;
inpar=1;
binario[b]=inpar;
b++;
}
i++;
}
cout<<"\n\n\t\t";
for(r=b;r=0;r--)
{
cout<<","<<binario[b];
b--;
}
}


Lo compilo y me sale un mensaje que el programa.exe ha dejado de funcionar

¿Alguien ve el problema?
Qué sería de dios sin el Hombre.

diskontrol

El código en general no tiene ningún sentido, te veo bastante liado...

Respondiendo a tu pregunta, así a simple vista, el programa peta porque se da una violación de segmento; en el primer for numentero siempre será mayor que uno por lo que cuando se repite 100 veces el indice de binario sobrepasa su zona de memoria.
Siempre ten tus cosas cuando las necesites con @Dropbox. ¡Una cuenta de 2 GB es gratis! http://db.tt/YxRhsCI

eferion

Como te comentan, tu código no tienen ningún sentido.

Te expongo algunos ejemplos:

Ejemplo 1:


for (i=numentero;numentero>1;i--)
{

  // ...

  i++;
}


Tenemos un bucle que lo inicializa en el número que introduce el usuario y se repite mientras ese número sea mayor que 1... a todo esto i lo decrementa a cada pasada ... para incrementarlo de nuevo al final del bucle.

Resultado: El bucle se repite indefinidamente si el usuario introduce un número superior a 1, además i no cambia nunca de valor después de una iteración completa. Además i no se usa en ningún momento.

Ejemplo 2:

if(residuo==0)
{
  par=cociente;
  par=0;
  binario[b]=par;
  b++;
}


Si el número es par, almacenamos en la variable "par" el cociente ( no se por qué ), inmediatamente después se almacena en "par" el valor 0, luego par SIEMPRE vale 0... y después en "binario[ b ]" se almacena "par", es decir, "0". A todo esto "b" no se ha inicializado, por lo que las probabilidades de que tenga un valor superior a 100 o inferior a 0 son muchísimas... además, dado que el bucle del ejemplo anterior no se controla... aunque b tuviese un valor inicial válido, tarde o temprano se saldría del rango 0-100.

PD.: la línea "binario[ b ] = par" es una de las que te está dando problemas de casque de la aplicación.

Ejemplo 3:


else
{
  inpar=cociente;
  inpar=1;
  binario[b]=inpar;
  b++;
}


Idéntico al ejemplo anterior, solo que en este caso inpar ( que se escribe impar ) siempre va a valer 1. "binario[ b ]=inpar" presenta la segunda vía por la que casca la aplicación ya que b sigue sin estar inicializada.

Ejemplo 4:


for(r=b;r=0;r--)
{
  cout<<","<<binario[b];
  b--;
}


Entiendo que aquí quieres imprimir el binario resultante... o esa es la idea. Si tu código consiguiese llegar hasta aquí simplemente no se ejecutaría.

for(r=b;r=0;r--)

La línea anterior se corresponde a la de un for mal montado. Básicamente estas diciendo que el bucle empieza con r=b y que debe repetirse mientras r=0... es decir, nunca.

r=0 está mal... en tal caso debería ser una comparación, es decir, r == 0. Lo que sucede en tu caso es que quieres que el bucle recorra el vector "binario", por lo que la condición que deberías haber puesto es  r >= 0. En la primera iteración, r siempre va a tener un valor superior a cero, luego r == 0 no es una condición válida en ningún caso.

Además, dado que estás haciendo un incremento de b después de guardar un valor nuevo en "binario", b apunta a un índice que no es válido, tendrías que hacer un preincremento para que b apunte a valores correctos.

Y una cosilla más es la presentación del resultado... el poner esa coma ahí hace que, si consigues corregir todo lo anterior y tu programa consigue llegar ahí te arrojará un resultado tal que:

,1,0,0,0,1,1,1,0,1,1,0,1

No se ... pero esa coma inicial creo que no pinta nada... bueno, ni esa ni ninguna, los números binarios no se representan con comas.

Conclusión

Como puedes ver tienes que pulir unas cuantas cosas. Intenta corregirlas a ver si consigues que te funcione el programa.

Un saludo.