6001: Fecha de entrega: 18 de julio de 2016 Organización y Estructura del Computador I Fecha de publicación: 04 de julio de 2016 Semestre 2016-I Proyecto 1: Calculadora de Bits Características del Proyecto El siguiente proyecto debe ser realizado en el lenguaje de programación C. Tiene como finalidad familiarizarlo con las funciones básicas del lenguaje y con la representación binaria de números. Los requerimientos son sencillos: a) El programa ejecutable debe llevar por nombre CalculadoraBits. El programa debe ser desarrollado en lenguaje C, y por ende no debe poseer características del lenguaje C++. Los archivos deben poseer la extensión .c (no .cpp). Adicionalmente, debe compilar en entorno GNU/Linux, utilizando el compilador gcc. No puede emplear el compilador c++. b) No se requieren parámetros de entrada por línea de comandos. c) No se puede emplear ninguna función de C++ (por ejemplo, cout, cin). Utilice en su lugar funciones del lenguaje C (por ejemplo, printf, scanf). d) El programa le debe preguntar al usuario por una operación. Las operaciones posibles son |, &, y ^ (or, and, xor). Si la opción de entrada por parte del usuario es la letra q, entonces el programa debe terminar. Ante cualquier otra operación que el usuario introduzca, el programa debe imprimir el mensaje: “Por favor introduzca |, &, ^ o q”, luego de lo cual debe solicitar de nuevo en la línea siguiente la operación a realizar. Luego de que la operación ha sido introducida, al usuario se le preguntará por un número de enteros. El usuario debe introducir un entero válido mayor a 1 (digamos n). Luego se le debe pedir al usuario cada uno de los n enteros (observe el ejemplo que se encuentra más abajo). Los enteros deben poseer formato hexadecimal y deben ser de un máximo de 8 dígitos hexadecimales. Cualquier entero que sea introducido y tenga menos de 8 dígitos, se asumirá que posee ceros a la izquierda. Ante cualquier entrada inválida debe mostrarse el siguiente mensaje: “Por favor introduzca un entero hexadecimal de 8 dígitos”, seguido del cursor en la siguiente línea para volver a introducir el entero. Después de recibir una entrada válida, el programa debe realizar la operación sobre los números introducidos de la siguiente manera: primernumero operador segundonumero [operador tercernumero etc]. El programa deberá posteriormente mostrar como salida la operación completa (incluyendo los operandos, operación y resultado) tanto en formato binario como en formato hexadecimal. Los valores hexadecimales deben ser alineados de manera que haya 8 dígitos hexadecimales. Los valores en binario deben ser alineados de manera tal que haya 32 dígitos binarios en total, agrupados en 8 dígitos. A continuación, se muestra un ejemplo, donde la información en rojo indica valores introducidos por el usuario: Introduzca operación: | Introduzca el número de enteros: 2 Introduzca el entero 1: ADA0CAFE Introduzca el entero 2: CABA0EFE Operación en hexadecimal: ADA0CAFE | CABA0EFE = EFBACEFE Operación en binario: 10101101 10100000 11001010 | 11001010 10111010 00001110 = 11101111 10111010 11001110 Introduzca operación: q e) A continuación, otra posible Introduzca operación: @ Por favor introduzca |, Introduzca operación: & Introduzca el número de Introduzca el entero 1: Introduzca el entero 2: Por favor introduzca un Introduzca el entero 2: Por favor introduzca un Introduzca el entero 2: Introduzca el entero 3: 11111110 11111110 11111110 salida de la ejecución del programa: &, ^ o q enteros: 3 BA8E9A CABA0EZE entero hexadecimal de 8 dígitos 4F61A9D8B2C entero hexadecimal de 8 dígitos C45FA FB93D8B Operación en hexadecimal: 00BA8E9A & 000C45FA & 0FB93D8B = 0008048A Operación en binario: 00000000 10111010 & 00000000 00001100 & 00001111 10111001 = 00000000 00001000 10001110 01000101 00111101 00000100 10011010 11111010 10001011 10001010 Introduzca operación: q f) El formato establecido debe ser respetado completamente. Los mensajes desplegados deben ser exactamente los mismos, así como también los espacios en blanco empleados en los ejemplos. Después del despliegue de cada cadena de texto solicitando entrada por parte del usuario, hay un espacio en blanco. Los resultados de cada operación deben ser identados con dos espacios, asimismo la separación entre cada grupo de 8 dígitos binarios. La salida de su programa será comparada contra la salida esperada, y los errores en el formato, implicarán pérdida de puntos en la nota del proyecto. g) Siga los estándares de codificación de programas en lenguaje C 1. h) Su programa debe contener todos los archivos fuentes que emplee, y no debe contener ningún ejecutable. En su lugar utilice y configure su proyecto usando Makefile el cual construirá el ejecutable a partir de los archivos fuente. i) No se requiere un informe del proyecto, pero debe incluir un archivo denominado README.txt en el cual se explique cómo se debe compilar y ejecutar el programa. El proyecto será corregido de acuerdo a los siguientes ítems: Característica % Puntos Makefile 10% 2 puntos Archivo README.txt 5% 1 punto Correctitud del programa 50% 10 puntos Calidad de diseño/Legibilidad 15% 3 puntos Documentación en línea/Apego a 20% 4 puntos los estándares de codificación La correctitud del programa será determinada por la correcta funcionalidad del mismo, así como el respeto a las condiciones de formato establecidas. Consejos: 1. El lenguaje de programación C posee diferencias importantes con el leguaje de programación C++. Una de esas diferencias es que los comentarios de una sola línea no están permitidos en C (comentarios empleando //). Solamente están permitidos los comentarios de la forma /* */. Además, las declaraciones de variables en C, deben ser realizadas al comienzo del bloque de código: int var1; var1 = Function(); float var2; /* No es válido en C, float var2 debe ser declarado antes de que la función Function() sea invocada */ 2. Las funciones printf y scanf poseen algunos modificadores muy útiles para ayudar con los formatos de entrada y salida, incluyendo la impresión de campos con tamaños predeterminados así como también la lectura y escritura de enteros hexadecimales. 1 https://users.ece.cmu.edu/~eno/coding/CCodingStandard.html y https://www.gnu.org/prep/standards/html_node/Writing-C.html