Ejercicio de programación en C++ (Bits to char)

Os dejo el enunciado:

Implemente un programa que lea bits (ceros y unos)
Desde teclado, hasta que se introduzca un valor negativo. Si se introduce un positivo
distinto de 0 y 1, el programa lo descartará y volverá a leer un valor.
Cada 8 valores de bits leídos, el programa calculará el número entero que representa
y lo transformará en el carácter (char) correspondiente. Debe tener en cuenta que el
primer bit leído es el más significativo.
Si no es posible completar el último bloque con 8 bits (porque se haya introducido
un negativo antes del octavo bit), se descartarán todos los bits de ese último bloque
incompleto.
Si el carácter obtenido corresponde a una letra -mayúscula o minúscula- lo mostrará
por pantalla. Una vez terminada la entrada de datos, el programa mostrará el porcentaje
de letras y otros símbolos leídos.

Por favor resuelvanlo porque yo llevo 1 dia entero dándole vueltas.

1 Respuesta

Respuesta
1

Para la parte de recoger los datos no te voy a comentar nada porque es algo trivial usando un bucle while pero para lo demás te puedo dar algunas "pistas".

Para el manejo de números binarios viene muy bien la clase bitset, la idea para manejar esto, o por lo menos como lo he hecho yo ahora (igual hay alguna solución mejor), es guardando los números binarios como un string para después hacer las conversiones pertinentes.

Para saber si un char es una letra miraremos si está en el rango ASCII de las letras mayúsculas o minúsculas siendo:

  • Mayúsculas = [64 ~ 90]
  • Minúsculas = [97 ~ 122]

De ti depende si quieres añadir también los caracteres con acentos y demás (Ç, Ä, Á, ...).

Te dejo un pequeño código de cómo usar esto para que te oriente un poco de cómo podrías hacerlo:

// Example program
#include <iostream>
#include <string>
#include <bitset>
#include <vector>
using namespace std;
bool isLetra(int asciiEntero);
int main()
{
    bitset<8> binaryItem(string("01100001"));
    int binaryToInt = (int)(binaryItem.to_ulong());
    if (isLetra(binaryToInt)) {
        cout << "El dato introducido es una letra" << endl;
    } else {
        cout << "El dato introducido NO es una letra" << endl;
    }
    char intToChar = (char) binaryToInt;
    cout << "El dato introducido es: " << intToChar << endl;
}
bool isLetra (int asciiEntero) {
    return isMayuscula(asciiEntero) || isMinuscula(asciiEntero);
}
bool isMayuscula (int asciiEntero) {
    return (asciiEntero >= 65) && (asciiEntero <= 90);
}
bool isMinuscula (int asciiEntero) {
    return (asciiEntero >= 97) && (asciiEntero <= 122);
}

Te dejo también la tabla ASCII que he usado como referencia para este ejemplo:

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas