2^10 2^9 2^8 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 SUMA

Universidad Rafael Urdaneta Facultad de Ingeniería Escuela de Ingeniería de Computación Cátedra: Programación I – Laboratorio - Semestre 2012-1 (Secci...
3 downloads 0 Views 557KB Size
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.3.-- Calcule la siguiente expresión aritmética: [2] Respuesta: a. 6 * 2 / 4 * 2 + 1 + 15 / 3 * 2 + 2 – 1 * 7 6 * 2 / 4 * 2 + 1 + 15 / 3 * 2 + 2 – 1 * 7 Misma prioridad –Izquierda “*” 12 / 4 * 2 + 1 + 15 / 3 * 2 + 2 – 7 Misma prioridad –Izquierda “/” 3 * 2 + 1 + 15 / 3 * 2 + 2 – 7 6 + 1 + 15 / 3 * 2 + 2 – 7 Misma prioridad –Izquierda “/” 6 + 1 + 5 * 2 + 2 – 7 6 + 1 + 10 + 2 – 7 = 12

b. 6 * 2 / 4 % 2 + 1 + 15 / 3 * 2 + 2 – 1 * 7 6 * 2 / 4 % 2 + 1 + 15 / 3 * 2 + 2 – 1 * 7 Misma prioridad –Izquierda “*” 12 / 4 % 2 + 1 + 15 / 3 * 2 + 2 – 7 Misma prioridad –Izquierda “/” 3 % 2 + 1 + 15 / 3 * 2 + 2 – 7 1 + 1 + 15 / 3 * 2 + 2 – 7 Misma prioridad –Izquierda “/” 1 + 1 + 5 * 2 + 2 – 7 1 + 1 + 10 + 2 – 7 = 7

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

Suggest Documents