
Como hacer un Convertidor de Binario a Decimal solo con iostream y string
Publicado por diosarcano (4 intervenciones) el 19/01/2014 07:18:58
Ejercicio a programar
Debe desarrollar un algoritmo que dado un número (B) binario de 8 dígitos, calcular su valor decimal (X), el valor decimal (Y) del bit de paridad del número binario ingresado anteriormente y luego escribir por salida estándar el resultado de la resta entre el valor decimal del número y el valor decimal de su bit de paridad.
Por ejemplo, dado un número binario: 00000100
Su valor decimal es 4 y el valor decimal de su bit de paridad es 1 (debido a que tiene una cantidad impar de 1), por lo tanto el resultado es 3.
Detalles de entrada
Número B, binario de 8 dígitos.
Detalles de la salida
Número (R), decimal resultado de restar el valor decimal (X) del número binario y el valor decimal (Y) de su bit de paridad.
Ejemplo :
ENTRADA :
00000100
SALIDA :
3
Solo me mandaron a usaro la libreria iostream y string alguien sabe como debo ser porfavor
Saludo .
Lo que tengo hasta ahora es esto :
___________________________________________________________________________________________
#include <iostream>
#include <string>
int main(int argc, char **argv) {
if (argc < 2) {
std::cout << "Faltan Parametros. Ingrese numero binario." << std::endl;
return -1;
}
std::string strBinario(argv[1]);
if (strBinario.length() != 8) {
std::cout << "Formato invalido. Debe introducir un numero binario de 8 bits." << std::endl;
return -1;
}
long valorDecimal = 0;
unsigned short paridadControl = 0;
// Descomponemos en caracteres el string con el numero binario (Obtenemos digitos)
for (unsigned i=0; i<strBinario.length(); i++) {
if (strBinario.at(i) == '1') {
unsigned digPos = (strBinario.length()-i-1); // Invertir posicion del digito dentro de la cadena
if (digPos == 0) { valorDecimal += 1; } // Caso especial!
else { valorDecimal += 2<<(digPos-1); }
paridadControl++;
}
}
/** Si habilitado C++11 comentar el bucle anterior y descomentar estas lineas. **/
//valorDecimal = std::stol(strBinario);
//for (unsigned i=0; i<strBinario.length(); i++) { if (strBinario.at(i) == '1') { paridadControl++; } }
std::cout << "- BINARIO DE ENTRADA: " << strBinario << std::endl;
std::cout << "- PARIDAD: " << ((paridadControl%2==0)?0:1) << std::endl;
std::cout << "- VALOR DECIMAL: " << valorDecimal << std::endl;
std::cout << "--- RESULTADO FINAL: " << (valorDecimal-((paridadControl%2==0)?0:1)) << std::endl;
return 0;
}
Debe desarrollar un algoritmo que dado un número (B) binario de 8 dígitos, calcular su valor decimal (X), el valor decimal (Y) del bit de paridad del número binario ingresado anteriormente y luego escribir por salida estándar el resultado de la resta entre el valor decimal del número y el valor decimal de su bit de paridad.
Por ejemplo, dado un número binario: 00000100
Su valor decimal es 4 y el valor decimal de su bit de paridad es 1 (debido a que tiene una cantidad impar de 1), por lo tanto el resultado es 3.
Detalles de entrada
Número B, binario de 8 dígitos.
Detalles de la salida
Número (R), decimal resultado de restar el valor decimal (X) del número binario y el valor decimal (Y) de su bit de paridad.
Ejemplo :
ENTRADA :
00000100
SALIDA :
3
Solo me mandaron a usaro la libreria iostream y string alguien sabe como debo ser porfavor
Saludo .
Lo que tengo hasta ahora es esto :
___________________________________________________________________________________________
#include <iostream>
#include <string>
int main(int argc, char **argv) {
if (argc < 2) {
std::cout << "Faltan Parametros. Ingrese numero binario." << std::endl;
return -1;
}
std::string strBinario(argv[1]);
if (strBinario.length() != 8) {
std::cout << "Formato invalido. Debe introducir un numero binario de 8 bits." << std::endl;
return -1;
}
long valorDecimal = 0;
unsigned short paridadControl = 0;
// Descomponemos en caracteres el string con el numero binario (Obtenemos digitos)
for (unsigned i=0; i<strBinario.length(); i++) {
if (strBinario.at(i) == '1') {
unsigned digPos = (strBinario.length()-i-1); // Invertir posicion del digito dentro de la cadena
if (digPos == 0) { valorDecimal += 1; } // Caso especial!
else { valorDecimal += 2<<(digPos-1); }
paridadControl++;
}
}
/** Si habilitado C++11 comentar el bucle anterior y descomentar estas lineas. **/
//valorDecimal = std::stol(strBinario);
//for (unsigned i=0; i<strBinario.length(); i++) { if (strBinario.at(i) == '1') { paridadControl++; } }
std::cout << "- BINARIO DE ENTRADA: " << strBinario << std::endl;
std::cout << "- PARIDAD: " << ((paridadControl%2==0)?0:1) << std::endl;
std::cout << "- VALOR DECIMAL: " << valorDecimal << std::endl;
std::cout << "--- RESULTADO FINAL: " << (valorDecimal-((paridadControl%2==0)?0:1)) << std::endl;
return 0;
}
Valora esta pregunta


0