Universidad Rafael Urdaneta Facultad de Ingeniería Escuela de Ingeniería de Computación Cátedra: Programación I – Laboratorio - Semestre 2012-1 (Secci...
Universidad Rafael Urdaneta Facultad de Ingeniería Escuela de Ingeniería de Computación Cátedra: Programación I – Laboratorio - Semestre 2012-1 (Sección “C”) Profesor: Jaime Soto Examen #1 - Fecha: 07-03-2012 Cédula Nombre
: :
1.- Resuelva los siguientes ejercicios: 1.1.- ¿Cuántos bits como mínimo debe tener un computador para representar 27 letras del alfabeto, los números del 0 al 50 y los números entre 500 y 515? [2] Respuesta: Un bit puede estar en un estado de dos posibles: 0 ó 1 Un bit puede representar dos (2) símbolos: 0 ó1. El “0” puede ser la letra “a” y el “1” la letra “b” En este problema debemos calcular la cantidad de símbolos solicitados: 27 letras 27 símbolos Rango de números entre o y 50 51 símbolos Rango de números entre 500 y 515 16 símbolos ---Total de símbolos 94 Se requiere 1 bit para 2^1 = 2 Se requieren 2 bit para 2^2 = 4 Se requieren 3 bit para 2^3 = 8 Se requieren 4 bit para 2^4 = 16 Se requieren 4 bit para 2^5 = 32 Se requieren 4 bit para 2^6 = 64 Se requieren 4 bit para 2^7 = 128 Para representar los 94 símbolos requeridos se necesita que el computador tenga 7 bits.
1.2.- ¿Cuántos bits debe tener un computador que requiera contar números en un rango de números entre - 500 hasta +1200? Atención: el primer número es menos (-) 500 [2] Respuesta: Dado que se necesita representar un conjunto de números negativos, se debe incluir un bit extra para representar el conjunto de números negativos. Para contar de 0 a 1 solamente se requiere 1 bit Para contar de -1 a 1 { -1 , 0 , 1 } se requieren 2 bit (un bit para contar el 0 y el 1 y un bit para el signo) Es importante aclarar que conceptualmente tenemos un rango de 1700 números (1200-(-500)); sin embargo, realmente solamente se necesita representar un conjunto de 1200 números dado que el BIT DE SIGNO es el que va a definir si se trata de 500 o -500 Observemos la siguiente tabla para representar 1200 números con signo Número de bit Exponente Bit Sumatoria
12 SIGNO
11 10 1 2^10 1024
10 9 1 2^9 512
9 8 1 2^8 256
8 7 1 2^7 128
7 6 1 2^6 64
6 5 1 2^5 32
5 4 1 2^4 16
4 3 1 2^3 8
3 2 1 2^2 4
2 1 1 2^1 2
1 0 1 2^0 1
SUMA 2047
Con esta arquitectura se puede realizar el contador entre -500 y +1200: mínimo de 11 bits para los 1200 números y un bit de signo para un total de 12 bits.
1.4.- Realice las siguientes conversiones [2] a. binario: 10101010
a decimal
b. binario: 10101010
a hexadecimal
c.- hexadecimal: 1001
a decimal
d. hexadecimal: 11
a binario
a.- Para convertir un binario en decimal Posición Exponente
BINARIO
8 7
7 6
6 5
5 4
4 3
3 2
2 1
1 0
1 x 2^7
0 x 2^6
1 x 2^5
0 x 2^4
1 x 2^3
0 x 2^2
1 x 2^1
0 x 2^0
1
0
1
0
1
0
1
0
128
0
32
0
8
0
2
0
170
DECIMAL
b.- Para convertir un binario en hexadecimal (cada 4 bits es un nibble) Posición Exponente BINARIO DECIMAL HEXADECIMAL HEXADECIMAL
4 3
3 2
2 1
1 0
4 3
3 2
2 1
1 0
1 x 2^3
0 x 2^2
1 x 2^1
0 x 2^0
1 x 2^3
0 x 2^2
1 x 2^1
0 x 2^0
1
0
1
0
1
0
1
0
8
0
2
0
8
0
2
0
10 A
10 A AA
c. Para convertir un hexadecimal en decimal Posición
4
3
2
1
Exponente
3
2
1
0
1 x 16^3
1 x 16^2
1 x 16^1
1 x 16^0
BINARIO
1 0001
1 0001
1 0001
1 0001
DECIMAL
4096
256
16
1
HEXADECIMAL
4369
DECIMAL
d. Para convertir un hexadecimal en binario
1 0001
HEXADECIMAL BINARIO
BINARIO
1 0001 00010001
Tabla de conversión Dec
Hex
Bin
Dec
Hex
Bin
Dec
Hex
Bin
0 1 2 3 4
0 1 2 3 4
0000 0001 0010 0011 0100
5 6 7 8 9
5 6 7 8 9
0101 0110 0111 1000 1001
10 11 12 13 14 15
A B C D E F
1010 1011 1100 1101 1110 1111
1.5.- Cuantos bytes se requieren para almacenar los siguientes datos (cada uno y el total): [2] Nota =17
Nombre = “Leonidas de Esparta”
Voltaje =0.5
Respuesta: Variable Nota Nombre Temperatura
Tipo Entero Cadena de caracteres Real
Tipo en C int char Nombre[19] incluir espacios float TOTAL
Número de bytes 2 19 4 25
2.- Escriba un programa en lenguaje C reciba como entrada una cantidad en segundos, convierta el dato introducido en horas, minutos y segundos;
e imprima tales resultados. Si los segundos
introducidos exceden el total de segundos de un día, el programa debe imprimir un mensaje de error y terminar la ejecución del mismo. [10] #include #include using namespace std; /* * */ int main() { long int segundos int int int int
calc_horas calc_min calc_seg restantes
= 0; // Dato de entrada // long = Entero largo ya que se exceden los 32000 = 0; = 0; = 0; = 0; // Variable de apoyo para MOD
printf("\nIntroducir la cantidad de segundos:"); scanf("%ld",&segundos); if (segundos > 86400) { printf("\nLos segundos introducidos exceden la capacidad de cálculo!"); } else { // Se verifica que almenos haya una hora if (segundos >= 3600) { calc_horas = segundos / 3600; // Total horas restantes = segundos % 3600; // MOD calcula los segundos restantes } else { restantes = segundos; // Segundos inferiores a 1 hora } // Segundos restantes if (restantes >= 60) { calc_min = restantes / 60; // Total Minutos calc_seg = restantes % 60; // MOD calcula los segundos restantes } else { calc_seg = restantes; // Segundos inferiores a 1 minuto } printf("\nSe calcularon %d horas, %d minutos y %d segundos", calc_horas, calc_min, calc_seg); } return 0; } SALIDA:
Introducir la cantidad de segundos: 83245 Se calcularon 23 horas, 7 minutos y 25 segundos
3.- Escriba un programa en lenguaje C que sume los años comprendidos entre 2000 y 2021. El programa debe implementar una estructura cíclica. Además de calcular la suma de los años, el programa debe contar los años bisiestos comprendidos en este rango e imprimir ambos resultados. [10] RESPUESTA: #include #include using namespace std; /* * */ int main() { int anio_inf = 2000; int anio_sup = 2021; int suma = 0; int contador = 0; for (int k=anio_inf; k