Está en la página 1de 3

Primer Parcial de Diseño de Sistema con Procesadores DISPRO

Con los Futuros Ingenieros Maria José Cabra, David Santiago Alfonso, Jesus Manuel Moncayo
& Ing. Juan-Carlos Giraldo, Ph.D.
2 de Septiembre de 2023

Primera Parte (Sistemas Numéricos)


Los primeros cuatro (4) problemas valen el 60% del Primer Parcial, y fueron formulados de común acuerdo con los
tres monitores de DISPRO, considerando que correspondían a ejercicios puntuales que se explicaron detalladamente
en las monitorías como una forma de ayudar a todos a quellos que hicieron el esfuerzo de estar atentos de las
mismas. No obstante lo anterior, el tema corresponde a las explicaciones teóricas del Ing. Giraldo.

PRIMER PUNTO:
Habilidad: Conversión entre diferentes bases.
Ponderación: 15%
Instrucción: Suponiendo que para un número representado en la base numérica 32 se usa para cada dígito, las 26
letras del alfabeto norteamericano comenzando por la letra A para 10, B para 11, y así sucesivamente. Por favor
convertir DISPRO a las bases binaria, octal, hexadecimal.

SEGUNDO PUNTO:
Habilidad: Codificación de un número en el formato IEEE754.
Ponderación: 15%
Instrucción: Escriba el número PI (3.1415926535897932384) en el formato de punto flotante IEEE754 de precisión
sencilla con la máxima precisión que permite este formato (10%) y explique analíticamente cuál es la precisión que
se puede lograr en un número decimal, cuando se usa esta formato (5%). Justifique muy bien sus respuestas.

TERCER PUNTO:
Habilidad: Representación de números negativos en binario.
Ponderación: 15%
Instrucciones: Determine el complemento a 2 de la representación binaria del número 3215 en base 10, cuando se
codifica con 12 bits.

Segunda Parte (Expresiones & Dcl. Complejas)


CUARTO PUNTO:
Habilidad: Hacer pruebas de escritorio para entender un código con expresiones.
Ponderación: 15%
Instrucciones:
• La línea 3 corresponde a una constante simbólica que substituye el númerop 6 en cada línea del código
fuente que se encuentre SIZE_DISPRO
• La función xor() recibe una cadena de entrada input y entrega una de salida output.
• La función print_hexa() recibe una cadena de entrada input e imprime cada entero char de la cadena en
formato hexadecimal.
• En el arreglo de la línea 7, cada elemento del arreglo guarda el número del respectivo código ASCII de cada
letra mayúscula.
• El especificador de formato "%02X " de la función printf de la línea 17 imprime una PAREJA de códigos
hexadecimal junto con un espacio en blanco.
1 #include <stdio.h>
2
3 #define SIZE_DISPRO 6
4
5 void xor( char *input, char *output )
6 {
7 char key[3] = { 'K', 'E', 'Y' };
8
9 for( int i = 0; i < SIZE_DISPRO; i++ )
10 output[i] = input[i] ^ key[i % 3];
11 }
12
13
14 void print_hexa( char *input )
15 {
16 for( int i = 0; i < SIZE_DISPRO; i++ )
17 printf( "%02X ", input[i] );
18 printf( "\n" );
19 }
20
21
22 int main()
23 {
24 char message0[] = "DISPRO";
25 char message1[] = " ";
26 char message2[] = " ";
27
28 print_hexa( message0 );
29 xor( message0, message1 );
30 print_hexa( message1 );
31 xor( message1, message2 );
32 print_hexa( message2 );
33
34 return 0;
35
36 } /* main */

En la hoja de respuestas escriba:


La salida de la línea 28: ____________________________________ (5%)
La salida de la línea 30: ____________________________________ (5%)
La salida de la línea 32: ____________________________________ (5%)

QUINTO PUNTO:
Habilidad: Uso de expresiones en C.
Ponderación: 20%
Instrucción: El siguiente código es una hermosa pieza de programación en C que se usó en el video-juego Quake
III para acelerar el cómputo del inverso de la raíz cuadrada (la cual es una operación fundamental para normalizar
vectores). Algunos consideran que lo que hace es una especie de "hacking" al formato IEEE-754, para el cálculo de
rsqrt(). A la constante literal “0x5f3759df” se le conoce como "magic number", y se cree que se llegó a ella por
fuerza bruta, es decir, como resultado de prueba y error.

1 float Q_rsqrt( float n )


2 {
3 union { float f; int i; } d = { .f = n };
4 return d.i = 0x5f3759df - ( d.i >> 1 ), d.f;
5
6 } /* Q_rsqrt */
Suponga que se desea calcular el inverso de la raíz cuadrada del número “3.729721”. Usted debe hacer un prueba
de escritorio paso a paso, y determinar el resultado expresado tanto como un número entero en formato
hexadecimal, como un número en punto flotante en notación científica de base 10.

SEXTO PUNTO:
Habilidad: Declaraciones complejas para diseñar el juego Roca, Papel, Tijera.
Ponderación: 20%
Instrucción: Diseñe un programa que pida al usuario una de tres opciones como entrada así: 0 para roca, 1 para
papel, 2 para Tijera. Una vez el programa toma la entrada, el programa genera un número aleatorio entre 0 y 2. Con
las opciones del usuario y del computador, el programa muestra las opciones de jugadores y finalmente determina
cual fue la opción ganadora o sí hubo un empate. Como un requisito importante, se debe usar declaraciones
complejas para evitar el uso de secuencias de selección y/o árboles de decisión con secuencias de selección if-else
o la secuencia switch-case.

1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <time.h>
4
5 void Rock() { printf( "Gana ROCA\n" ); }
6 void Paper() { printf( "Gana PAPEL\n" ); }
7 void Scissors() { printf( "Gana TIJERA\n" ); }
8 void Even() { printf( "Empate\n" ); }
9
10 char *option[] = {
11 "ROCA",
12 "PAPEL",
13 "TIJERA"
14 };
15
16
17
18
19
20
21
22 int main()
23 {
24 srand( time( NULL ) );
25 int user, mach = rand() % 3;
26
27
28
29
30
31
32
33 return 0;
34 } /* main */

También podría gustarte