Porfin, programa desarrollado =D

octubre 18, 2009 at 10:47 am (Cpp, Programación)

Bueno, tras 15 días sin haber publicado nada y habiéndome dedicado al programa conseguí sacarlo, aquí la primera versión, solo falla en el “caso 5”, al imprimir el resultado, pero bueno, quitamos los últimos carácteres dejando solo el binario y nos sale exitosamente, aquí tenemos el código, el próximo paso será meterle interfaz gráfica =), estoy aprendiendo a manejarlo ya =D:


V1

#include <
stdlib.h>
#include <math.h>
#include <iostream>
#include <string.h>
using namespace std;

void ConvertirDecimalABinario();
void ConvertirDecimalAHexadecimal();
void ConvertirBinarioADecimal();
void ConvertirBinarioAHexadecimal();
void ConvertirHexadecimalABinario();
void ConvertirHexadecimalADecimal();
int ConvertirBinADecSimple(char binario[3]);
char ConvertirDecAHexSimple(int decimal);
char* ConvertirHexABinSimple(char hexa, char* bin);

int main()
{
int sistema;
system("clear");
cout << "Bienvenido al programa, indique que operacion desea realizar: " << endl;
cout << "1.- Pasar numero de binario a decimal" << endl;
cout << "2.- Pasar numero de binario a hexadecimal" << endl;
cout << "3.- Pasar numero de decimal a binario" << endl;
cout << "4.- Pasar numero de decimal a hexadecimal" << endl;
cout << "5.- Pasar numero de hexadecimal a binario" << endl;
cout << "6.- Pasar numero de hexadecimal a decimal" << endl; cin >> sistema;
switch(sistema)
{
case 1:
ConvertirBinarioADecimal();
break;
case 2:
ConvertirBinarioAHexadecimal();
break;
case 3:
ConvertirDecimalABinario();
break;
case 4:
ConvertirDecimalAHexadecimal();
break;
case 5:
ConvertirHexadecimalABinario();
break;
case 6:
ConvertirHexadecimalADecimal();
break;
default:
cout << "No introdujo un valor válido, retornando a menu principal" << main();
break;
}
}

void ConvertirBinarioADecimal() // CORRECTO
{
char *binario;
binario = new char[32];
int decimal = 0;
int cifras;

cout << "Indique el numero binario: "; cin >> binario;

// Conocer el nº de dígitos de la cifra tecleada

if(strchr(binario, '23456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZ'))
{
for(int j = 0; binario[j]; j++)
{
cifras = j+1;
}

// ----------------------------------------------
// Pasamos el binario al decimal correspondiente

int i = 0;
int k = cifras-1;

while(i <= cifras-1)
{
decimal += (binario[k]-'0')*pow(2,i);
k--;
i++;
}

cout << "\nEl numero binario: " << binario << " es " << decimal << " en decimal" << endl;
cout << "Volver a menu principal" << endl;
system("read a");
main();

delete[] binario;
} else {
cout << "Valor incorrecto, introduzcalo de nuevo";
system("read a");
ConvertirBinarioADecimal();
}
}

char ConvertirDecAHexSimple(int decimal) // CORRECTO
{
char hexsimpl;

if(decimal == 0)
{
hexsimpl = '0';
} else if(decimal == 1)
{
hexsimpl = '1';
} else if(decimal == 2)
{
hexsimpl = '2';
} else if(decimal == 3)
{
hexsimpl = '3';
} else if(decimal == 4)
{
hexsimpl = '4';
} else if(decimal == 5)
{
hexsimpl = '5';
} else if(decimal == 6)
{
hexsimpl = '6';
} else if(decimal == 7)
{
hexsimpl = '7';
} else if(decimal == 8 )
{
hexsimpl = '8';
} else if(decimal == 9)
{
hexsimpl = '9';
} else if(decimal == 10)
{
hexsimpl = 'A';
} else if(decimal == 11)
{
hexsimpl = 'B';
} else if(decimal == 12)
{
hexsimpl = 'C';
} else if(decimal == 13)
{
hexsimpl = 'D';
} else if(decimal == 14)
{
hexsimpl = 'E';
} else if(decimal == 15)
{
hexsimpl = 'F';
}

return hexsimpl;
}

int ConvertirBinADecSimple(char binario[3]) // CORRECTO
{
int decimal = 0;
int cifras = 3+1;

// ----------------------------------------------

int i = 0;
int k = cifras-1;

while(i <= cifras-1)
{
decimal += (binario[k]-'0')*pow(2,i);
k--;
i++;
}

return decimal;
}

void ConvertirBinarioAHexadecimal() // CORRECTO
{
char *binario;
binario = new char[32];
char *hexadecimal;
hexadecimal = new char[32];
int cifras;
int restante;

cout << "Indique el numero binario: "; cin >> binario;

if(strchr(binario, '23456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZ'))
{
for(int j = 0; binario[j]; j++)
{
cifras = j+1;
}

if(cifras%4 != 0)
{
char *copia;
copia = new char[cifras+(4-cifras%4)];
restante = 4-cifras%4;

for(int i = 0; i < restante ; i++)
{
copia[i] = '0';
}

for(int i = restante; i < (cifras + restante); i++)
{
copia[i] = binario[i-restante];
}

int pos = 0;
int dec = 0;
for(int i = 4; i <= cifras + restante; i+= 4)
{
char cpy[4] = {copia[i-4], copia[i-3], copia[i-2], copia[i-1]};
dec = ConvertirBinADecSimple(cpy);
hexadecimal[pos] = ConvertirDecAHexSimple(dec);
pos++;
}
delete[] copia;

} else {
int pos = 0;
int dec = 0;
for(int i = 4; i <= cifras; i+= 4)
{
char cpy[4] = {binario[i-4], binario[i-3], binario[i-2], binario[i-1]};
dec = ConvertirBinADecSimple(cpy);
hexadecimal[pos] = ConvertirDecAHexSimple(dec);
pos++;
}
}


cout << "El numero binario " << binario << " es " << hexadecimal << " en hexadecimal" << endl;
delete[] binario;
delete[] hexadecimal;
cout << "Volver a menu principal" << endl;
system("read a");
main();
} else {
cout << "Valor incorrecto, introduzcalo de nuevo";
system("read a");
ConvertirBinarioAHexadecimal();
}
}

void ConvertirDecimalABinario() // CORRECTO
{
int decimal, dec;
char binario[64];
char *copia;
copia = new char[32];

cout << "Indique el numero decimal: "; cin >> dec;
cout << endl;

decimal = dec;

int j = 0;

while(decimal/2 >= 1)
{
if(decimal%2 == 0)
{
binario[j] = '0';
} else
{
binario[j] = '1';
}
decimal /= 2;
j++;
}

binario[j] = '1';

int i = 0;
for(int d = j; d >= 0; d--)
{
copia[i] = binario[d];
i++;
}

cout << "El numero decimal " << dec << " es " << copia << " en binario" << endl;
delete[] copia;

cout << "Volver a menu principal" << endl;
system("read a");
main();

}

void ConvertirDecimalAHexadecimal() // CORRECTO
{
int decimal, dec, cifras, restante;
char binario[64], *copia, *hexadecimal;
copia = new char[32];
hexadecimal = new char[32];

cout << "Indique el numero decimal: "; cin >> dec;

decimal = dec;

int j = 0;

// Convertimos decimal a binario
while(decimal/2 >= 1)
{
if(decimal%2 == 0)
{
binario[j] = '0';
} else
{
binario[j] = '1';
}
decimal /= 2;
j++;
}

binario[j] = '1';

int i = 0;
for(int d = j; d >= 0; d--)
{
copia[i] = binario[d];
i++;
}

// Convertimos binario a hexadecimal

for(int j = 0; copia[j]; j++)
{
cifras = j+1;
}

if(cifras%4 != 0)
{
char *ncopia;
ncopia = new char[cifras+(4-cifras%4)];
restante = 4-cifras%4;

for(int i = 0; i < restante ; i++)
{
ncopia[i] = '0';
}

for(int i = restante; i < (cifras + restante); i++)
{
ncopia[i] = copia[i-restante];
}

int pos = 0;
int dec = 0;
for(int i = 4; i <= cifras + restante; i+= 4)
{
char cpy[4] = {ncopia[i-4], ncopia[i-3], ncopia[i-2], ncopia[i-1]};
dec = ConvertirBinADecSimple(cpy);
hexadecimal[pos] = ConvertirDecAHexSimple(dec);
pos++;
}
delete[] ncopia;

} else {
int pos = 0;
int dec = 0;
for(int i = 4; i <= cifras; i+= 4)
{
char cpy[4] = {copia[i-4], copia[i-3], copia[i-2], copia[i-1]};
dec = ConvertirBinADecSimple(cpy);
hexadecimal[pos] = ConvertirDecAHexSimple(dec);
pos++;
}
}

cout << "El numero decimal " << dec << " es " << hexadecimal << " en hexadecimal" << endl;
delete[] copia;
delete[] hexadecimal;
cout << "Volver a menu principal" << endl;
system("read a");
main();
}

void ConvertirHexadecimalABinario() // CORRECTO SALVO AL IMPRIMIR
{
char *hexadecimal;
hexadecimal = new char[32];
int cifras = 0;

cout << "Indique el numero hexadecimal: "; cin >> hexadecimal;
cout << endl;

for(int i = 0; hexadecimal[i]; i++)
{
cifras = i+1;
}
char binario[cifras][4], **binsimpl;
binsimpl = new char*[cifras-1];
binsimpl[cifras] = new char[5];

// -------------------------------------

for(int j = 0; j < cifras; j++)
{
binsimpl[j] = ConvertirHexABinSimple(hexadecimal[j], binario[j]);
}

cout << "El numero hexadecimal: " << hexadecimal << " es " << binsimpl[0] << " en binario" << endl;
cout << "Volver a menu principal" << endl;
system("read a");
main();
delete[] binsimpl;
delete[] hexadecimal;
}

char* ConvertirHexABinSimple(char hexa, char* bin) // CORRECTO
{

if(hexa == '0')
{
bin[0] = '0';
bin[1] = '0';
bin[2] = '0';
bin[3] = '0';
} else if(hexa == '1')
{
bin[0] = '0';
bin[1] = '0';
bin[2] = '0';
bin[3] = '1';
} else if(hexa == '2')
{
bin[0] = '0';
bin[1] = '0';
bin[2] = '1';
bin[3] = '0';
} else if(hexa == '3')
{
bin[0] = '0';
bin[1] = '0';
bin[2] = '1';
bin[3] = '1';
} else if(hexa == '4')
{
bin[0] = '0';
bin[1] = '1';
bin[2] = '0';
bin[3] = '0';
} else if(hexa == '5')
{
bin[0] = '0';
bin[1] = '1';
bin[2] = '0';
bin[3] = '1';
} else if(hexa == '6')
{
bin[0] = '0';
bin[1] = '0';
bin[2] = '1';
bin[3] = '1';
} else if(hexa == '7')
{
bin[0] = '0';
bin[1] = '1';
bin[2] = '1';
bin[3] = '1';
} else if(hexa == '8')
{
bin[0] = '1';
bin[1] = '0';
bin[2] = '0';
bin[3] = '0';
} else if(hexa == '9')
{
bin[0] = '1';
bin[1] = '0';
bin[2] = '0';
bin[3] = '1';
} else if(hexa == 'A')
{
bin[0] = '1';
bin[1] = '0';
bin[2] = '1';
bin[3] = '0';
} else if(hexa == 'B')
{
bin[0] = '1';
bin[1] = '0';
bin[2] = '1';
bin[3] = '1';
} else if(hexa == 'C')
{
bin[0] = '1';
bin[1] = '1';
bin[2] = '0';
bin[3] = '0';
} else if(hexa == 'D')
{
bin[0] = '1';
bin[1] = '1';
bin[2] = '0';
bin[3] = '1';
} else if(hexa == 'E')
{
bin[0] = '1';
bin[1] = '1';
bin[2] = '1';
bin[3] = '0';
} else if(hexa == 'F')
{
bin[0] = '1';
bin[1] = '1';
bin[2] = '1';
bin[3] = '1';
}


return bin;
delete[] bin;

}

void ConvertirHexadecimalADecimal() // CORRECTO
{
char *hexadecimal;
hexadecimal = new char[32];
int decimal = 0, cifras = 0;

cout << "Indique el numero hexadecimal: "; cin >> hexadecimal;
cout << endl;

if(strchr(hexadecimal, 'GHIJKLMNÑOPQRSTUVWXYZ'))
{
for(int j = 0; hexadecimal[j]; j++)
{
cifras = j+1;
}

int k = 0;
int i = cifras-1;

while(i >= 0)
{
if(hexadecimal[i] >= 0 && hexadecimal[i] != 'A' && hexadecimal[i] != 'B' && hexadecimal[i] != 'C' && hexadecimal[i] != 'D' && hexadecimal[i] != 'E' && hexadecimal[i] != 'F')
{
decimal += (hexadecimal[i]-'0')*pow(16,k);
} else {
decimal += (hexadecimal[i]-'7')*pow(16,k);
}
k++;
i--;
}

cout << "El hexadecimal " << hexadecimal << " es " << decimal << " en decimal" << endl;
cout << "Volver a menu principal" << endl;
system("read a");
main();
delete[] hexadecimal;
} else {
cout << "Valor incorrecto, introduzcalo de nuevo";
system("read a");
ConvertirHexadecimalADecimal();
}

}

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: