Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
LENGUAJE DE PROGRAMACIÓN
3er. Examen
(2do. Período del 2013)
Duración: 3 Horas.
INSTRUCCIONES:
EL ALUMNO NO PUEDE UTILIZAR NI PORTAR MATERIAL DE CONSULTA. TODAS LAS RESPUESTAS DEBEN SER
COLOCADAS EN EL CUADERNILLO, NO COLOCARLAS EN LA HOJA DE PREGUNTAS.
PREGUNTA 1: (2 puntos)
Indicar qué muestra la computadora al ejecutar la siguiente porción de programa:
int main() {
char x= '\x41';
char x2 = x + 4;
char letras[] = {'J',x2,'T',x,x2+4,'M',x2,'\0'};
*(&x+1) = 0;
char *px2= malloc(2);
*px2 = x2+4; *(px2+1) = 0;
char* p = letras;
char* a[]= {p, " T", px2,"LS", &x};
char j,**q;
q=&a[0];
for(j=0;j<5;j++,q++)
printf("%s",*q);
return 0;
}
PREGUNTA 2: (2 puntos)
Indicar qué muestra la computadora al ejecutar la siguiente porción de programa:
int main() {
int x=65;
char pala[4] = {'B','I','C',x-65};
int* a[3]={&x,"\x41", pala+1};
int j,**q;
q=&a[2];
for(j=3;j>0;--j,q--)
printf("%s\n",*q);
return 0;
}
PREGUNTA 3: (2 puntos)
Implemente en C:
(1 pto.) La función MultMat, que devuelve el resultado de la multiplicación de dos matrices a y b cuadradas de tamaño
N, de acuerdo con la siguiente sintaxis:
double* MultMat(double *a, double *b, int N)
Donde a es la primera matriz, b es la segunda matriz y N es el tamaño de cada matriz.
Página 1 de 4 CONTINÚA
Este material, de distribución gratuita, no contiene necesariamente las modificaciones que se hayan incorporado
durante la realización de las evaluaciones.
(1 pto.) Una función UpperCase que retorne una cadena de texto que es la conversión a mayúscula de la cadena de
texto ingresada en su parámetro, tenga en cuenta que sólo debe convertir a mayúscula las letras del alfabeto, los otros
caracteres se mantienen iguales:
char* UpperCase(char *texto)
Donde texto es la cadena que se desea convertir a mayúscula.
Este programa, utilizando las estructuras arriba definidas, tendrá las siguientes funcionalidades:
a) (2 puntos) Una función que permita Agregar una Película al final de la lista, dentro de esta función se deberá solicitar al
usuario “TODOS” los datos completos de la película a agregar, esto incluye los actores y taquillas obtenidas. Recuerde
reservar la memoria necesaria para los punteros que utilice y esta función recibe como parámetro únicamente la lista de
películas.
b) (2 puntos) Una función que permita ver el Detalle de una Película en particular, para ello recibirá como parámetros la
lista de películas y una cadena con el nombre de una película y con este nombre buscará e imprimirá la información asociada
Página 2 de 4 CONTINÚA
Este material, de distribución gratuita, no contiene necesariamente las modificaciones que se hayan incorporado
durante la realización de las evaluaciones.
a la película, esto incluye los actores y las taquillas obtenidas en cada país. Asuma que todas las películas tienen nombres
distintos por lo que solo encontrará una película asociada a un nombre.
c) (3 puntos) Una función que permita Ordenar el arreglo de taquillas de una película en particular para ello recibirá
como parámetros la lista de películas, una cadena con el nombre de una película, el campo por el cual se ordenará (se
colocará 1 si es por país, 2 si es por recaudación y 3 si es por fecha de estreno) y la forma como se ordenará (se colocará 1 si
es Ascendente y 2 si es Descendente) y con el nombre buscará la película en la lista de películas y ordenará el arreglo de
taquillas de acuerdo al campo y forma de ordenamiento. Tenga en cuenta que no se pide ordenar la lista de películas, sino el
arreglo de taquillas asociados a una película. Un ejemplo de una invocación a esta función seria:
campo = 1;
forma = 2;
nombrepelícula = “Rapidos y Furiosos 6”;
Ordenar(lista,nombrepelícula,campo,forma) Esto significa que se ordenará las taquillas de la película Rapidos y Furiosos 6
por país(campo=1) y de manera descendente (forma=2).
d) (1.5 puntos) Una función que permita liberar la memoria de la lista de películas utilizada. Esta función debe recibir
como parámetro la lista de películas y deberá limpiar la memoria ocupada por cada película, así como de los actores y
taquillas. Tenga mucho cuidado de no perder la referencia a los punteros al momento de liberar la memoria.
e) (1.5 puntos) Una función main que permita mostrar un menú de opciones que llame a las funciones anteriores. Tenga
en cuenta que debe tener una opción para salir del programa y que el programa se debe ejecutar hasta que se ingrese esta
opción de salida.
NOTA.- Para esta pregunta puede utilizar la librería string.h
PREGUNTA 5: (6 puntos)
La empresa MOVIEPUCP desea ofrecer su aplicación a dispositivos móviles, por ello que ahora se necesita gestionar
la información de cada película de la saga como una cadena de caracteres (secuencia de char), donde cada elemento de
una película está separado por comas, y le ha pedido a usted que desarrolle un programa en C que permita gestionar la
información de las películas de la saga. Por ello se tiene un arreglo global de 6 punteros al inicio de cada película de la
saga. Según su criterio, defina el contenido máximo de caracteres de cada película, tenga en cuenta que cada carácter
ocupa un byte.
Similar al caso expuesto con anterioridad, el contenido de una película de la saga está conformado por el nombre de la
película, su duración en minutos, cantidad de países a evaluar su taquilla, país, recaudación y fecha de estreno por
cada país, cantidad de actores, nombre y personaje por cada actor, todo lo anterior separados por comas y finaliza con
el carácter fin de cadena ‘\0’, tenga en cuenta que como máximo la cantidad de países a evaluar es 20 y la cantidad
máxima de actores es 5.
Un ejemplo de los datos de una película de la saga es:
“Rápidos y Furiosos 1, 110, 2, EEUU, 1000000, 05/07/2002, Peru, 100000, 10/10/2002, 2, Vin Diesel, Toreto, Paul
Walker, Brian OConner\0”, donde la película Rápidos y Furiosos 1 tiene una duración de 110 minutos, se ha estrenado
en 2 países, el primer país es EEUU con una recaudación de 1 millón de dólares y la fecha de estreno fue el
05/07/2002, el segundo país es Perú, con una recaudación de 100,000 dólares y su fecha de estreno fue el 10/10/2012,
la cantidad de actores es 2, el nombre del primer actor es “Vin Diesel”, su personaje es “Toreto” y el nombre del
segundo actor es “Paul Walker” y su personaje es “Brian OConner”.
Para claridad del programa, definiremos el tipo Pelicula como puntero a la secuencias de char. Y se tendrá variables
globales que indiquen el número de películas de la saga, y el número de bytes usados en total por todas las películas de
la saga, en cada instante dado. Es decir:
typedef char * Pelicula; // Tipo para puntero a una película
Pelicula movies[6]; // Secuencia de punteros a películas
int numeroPeliculas=0; // Numero de películas en memoria
long bytesUsados=0; // Bytes utilizados por las películas
Página 3 de 4 CONTINÚA
Este material, de distribución gratuita, no contiene necesariamente las modificaciones que se hayan incorporado
durante la realización de las evaluaciones.
Deberá determinar si hay memoria suficiente para una nueva película con longitud recibida en el parámetro bytes. Si
no hubiese suficiente memoria, retorna 0.
Si hay memoria suficiente, solicita un espacio de memoria en donde almacenar la nueva película, y copia byte por byte
toda la secuencia desde el buffer temporal nuevaPeli hasta el área de memoria en donde quedará grabada la
información de la película. Luego actualiza la tabla de punteros a las películas, incrementa numeroPeliculas y
bytesUsados, y retorna 1.
b) (1.5 puntos) void BorraPelicula(int numPeli)
Debido a que por error se puede haber ingresado los datos de una película de manera incorrecta, se deberá poder
eliminar la película que está en la posición numPeli (si existe) de la tabla de punteros a las películas. Deberá desplazar
los siguientes valores en dicha tabla, reducir el número de bytes usados y el número de películas en total, y liberar la
memoria que usaba dicha película.
c) (3.0 puntos) void OrdenarPorFechaEstreno(void)
Deberá reordenar la tabla de punteros a las películas por orden de fecha de estreno. En otras palabras, la tabla de
punteros a las películas terminará conteniendo los mismos punteros a cada película, pero en un distinto orden de
acuerdo con el criterio ascendente de la fecha de estreno. Esta función no modifica ninguna otra variable.
Notas:
• Asuma la inclusión de las librerías necesarias en todos sus programas.
• En cualquier pregunta puede usar la definición de alguna función definida en otra pregunta.
Página 4 de 4