Universidad Rafael Urdaneta Facultad de Ingeniería - Escuela de Ingeniería de Computación Cátedra: Programación I – Laboratorio - Semestre 2012-1 (Modelo de Prueba) Profesor: Jaime Soto Cédula Nombre : : 1.- Cuantos bytes se requieren para almacenar los datos a, b, c y d (cada uno y el total): [3] a- 32000 b.- “Udon Perez” c.- arreglo*10+; el valor del elemento 7 es ‘S’ ( listado*7+=’S’) d.- registro listado[3] El tipo de dato registro es el siguiente: typedef struct { int dato; nombre[20]; float valor; } registro; Solución: a.- int. 2 bytes b.- char. 10 bytes c.- char 10 bytes d.- registro es un nuevo tipo de dato. Este dato está conformado por tres tipos de datos: int de 2 bytes, char de 20 bytes y un float de 4 bytes para un total de 26 bytes. En vista de que el arreglo listado tiene 3 elementos y cada elemento requiere 26 bytes, el total de ese arreglo es 26 x 3 = 78. El total de los cuatro (4) datos es 2 + 10 + 10 + 78 = 100 bytes. 2.- Se utiliza un arreglo bidimensional para representar un tablero de ajedrez. ¿Cuál es la secuencia de posiciones o movimientos necesarios para que el caballo (C) se “coma” al alfil (A)?. Debe representar los movimientos o posiciones con el arreglo y los subíndices (tip: los valores de los subíndices del arreglo comienzan desde la esquina superior izquierda) [4] Solución: A C Se debe definir un arreglo bidimensional de char: char ajedrez[8][8] Las piezas se colocan desde la posición ajedrez[0][0] en la esquina superior izquierda El caballo se encuentra en la posición ajedrez[7][2]; es decir, octava fila y tercera columna. El alfil se encuentra en la posición ajedrez[0][6]; es decir, primera y séptima columna. Estas movidas dan una posible solución: o ajedrez[7][2] o ajedrez[6][4] o ajedrez[4][5] o ajedrez[2][6] o ajedrez[1][4] o ajedrez[0][6] 3.- Elaborar una tabla con los valores de los datos al “imprimir” desde el inicio hasta el fin del algoritmo. [6] valor = 2; contador = 0; arreglo[5]; mientras ( contador < 5 ) hacer k = contador arreglo[k] = valor * k valor = valor + 2; si (k > 2) entonces arreglo[k] = arreglo[k] + valor fin_si imprimir( k, valor, arreglo[k] ) contador++ fin_mientras Solución: El contador aumenta después de “imprimir” Ciclos K valor arreglo[k] Inicio 0 2 - 1 0 valor =valor+2=2+2= 4 Condiciones contador < 5 verdadero k > 2 falso. Primera “imprimir”. arreglo[0]= valor x k = 2 x 0 = 0 contador < 5 verdadero (k, valor, arreglo[0])=(0,4,0) k > 2 falso 2 1 valor =valor+2=4+2= 6 arreglo[1]= valor x k = 4 x 1 = 4 contador < 5 verdadero (k, valor, arreglo[1]) = (1,4,6) k > 2 falso 3 2 valor =valor+2=6+2= 8 arreglo[2]= valor x k = 6 x 2 = 12 contador < 5 verdadero (k, valor, arreglo[2]) = (2,8,12) 4 5 3 4 valor =valor+2=8+2=10 valor =valor+2=10+2=12 arreglo[3]= valor x k = 8 x 3 = 24 arreglo[3]= arreglo[3] + valor= 24 + 10 = 34 arreglo[3]= valor x k = 10 x 4 = 40 arreglo[3]= arreglo[3] + valor= 40 + 12 = 52 k > 2 verdadero contador < 5 verdadero (k, valor, arreglo[3])=(3,10,34) k > 2 verdadero contador < 5 verdadero (k, valor, arreglo[4])=(4,12,52) contador < 5 falso 5 (k, valor, arreglo[4])=(4,12,52) Termina el ciclo 4.- Un automóvil viaja a una velocidad de 80 km/h. El automóvil debe realizar un recorrido de 150 km. Almacene en un arreglo los kilómetros recorridos cada 10 minutos desde el inicio hasta el fin del viaje. (la formula de la velocidad es v = d / t). Realice las siguientes operaciones: Calcular la dimensión o tamaño del arreglo, definir o declarar el tipo de dato del arreglo y almacenar los valores requeridos. [4] Solución: Se requiere despejar la formula v=d/t para obtener la distancia d=v * t Hay que convertir los minutos a horas. En 1 hora hay 60 minutos; es decir, que 10 minutos son aproximadamente 0.17 horas Se requiere un arreglo de tipo FLOAT de dimensión 11 ó 12 si quiere almacenar el último valor. float distancia[12]; Distancia d = v * t = 80 * 0 = 0 d = v * t = 80 * (10/60) = 13,3 d = v * t = 80 * (20/60) = 26,7 d = v * t = 80 * (30/60) = 40,0 d = v * t = 80 * (40/60) = 53,3 d = v * t = 80 * (50/60) = 66,7 d = v * t = 80 * (60/60) = 80,0 d = v * t = 80 * (70/60) = 93,3 d = v * t = 80 * (80/60) = 106,7 d = v * t = 80 * (90/60) = 120,0 d = v * t = 80 * (100/60) = 133,3 d = v * t = 80 * (110/60) = 146,7 d = v * t = 80 * (120/60) = 160,0 Tiempo (minutos) Número dato Índice 0 10 20 30 40 50 60 70 80 90 100 110 120 1 2 3 4 5 6 7 8 9 10 11 12 0 1 2 3 4 5 6 7 8 9 10 11 distancia[0]= 13,3 distancia[1]= 26,7 distancia[2]= 40,0 distancia[3]= 53,3 distancia[4]= 66,7 distancia[5]= 80,0 distancia[6]= 93,3 distancia[7]= 106,7 distancia[8]= 120,0 distancia[9]= 133,3 distancia[10]= 146,7 distancia[11]= 160,0 5.- La Biblioteca de la URU requiere almacenar en un registro la información de los libros de programación. Escriba un programa en lenguaje C que permita el ingreso de los primeros 100 libros e imprima un listado con dicha información. Los datos solicitados para cada libro son: nombre del libro, nombre del autor, número ISBN, año de publicación. Debe utilizar obligatoriamente un dato tipo struct. [8] Nota: debe escribir un código claro, indentado y bien estructurado. Solución: #include <cstdlib> #include <stdio.h> using namespace std; typedef struct { char titulo[15]; char autor[15]; char isbn[15]; int anio; } registro; /* * */ int main(int argc, char** argv) { int total = 2; registro biblioteca[total]; /* Carga de libros */ for (int k=0; k < total; k++) { printf("Introducir datos del libro #%2i:\n", k+1); printf("Titulo libro : "); scanf("%15S" , &biblioteca[k].titulo); printf("Nombre autor : "); scanf("%15S" , &biblioteca[k].autor); printf("ISBN : "); scanf("%15S" , &biblioteca[k].isbn); printf("Ano publicacion: "); scanf("%4i" , &biblioteca[k].anio); printf("\n"); } /* Listado */ printf("LISTADO DE LIBROS\n"); for (int k=0; k < total; k++) { printf("%S\t", biblioteca[k].titulo); printf("%S\t", biblioteca[k].autor); printf("%S\t", biblioteca[k].isbn); printf("%4i\n", biblioteca[k].anio); printf("\n"); } return 0; }