Proyecto 1 de Organización y Estructura del Computador I

Anuncio
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
Descargar