Dev - C++ - Como hacer un Convertidor de Binario a Decimal solo con iostream y string

   
Vista:
Imágen de perfil de diosarcano

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;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder