Escuela Politécnica Superior de Elche Ingeniería Industrial EXAMEN DE INFORMÁTICA APLICADA PRIMERA PARTE: CUESTIONES 9 de junio de 2003 Instrucciones: esta primera parte del examen consta de 3 cuestiones teóricas (T1, T2 y T3). La puntuación global de cada una aparece antes del enunciado correspondiente. Debe indicarse claramente en las respuestas a qué cuestión y apartado corresponde. T1 (3 puntos) Dado un programa en C que contiene las siguientes sentencias: struct datoscuenta { int num_cuenta; float *ingreso_caja; float saldo; }; struct persona { char nombre[80]; struct datoscuenta cuenta; }; float dinero=32000; void main (void) { struct persona m[10], *a, *p; a=(struct persona*) malloc (5*sizeof (struct persona)); Modificar (m, a); } a) ¿Cómo sería el prototipo de la función Modificar? b) Se quiere crear una función llamada ModifElem para modificar un elemento particular del tipo de estructura persona. Dicha función sólo tiene un parámetro que es un puntero a una variable del tipo estructura persona: b.1) Escribir el prototipo de la función ModifElem. b.2) ¿Cómo sería la llamada desde la función main a la función ModifElem pasándole como parámetro el elemento 7º del vector m?. b.3) ¿Cómo sería la llamada desde la función main a la función ModifElem pasándole como parámetro el elemento 4º del vector a?. Campus de Elche. Avda. del Ferrocarril s/n – 03202 ELCHE Escuela Politécnica Superior de Elche Ingeniería Industrial b.4) ¿Es correcta la llamada ModifElem (p) (Si/No)? c) Asignación de valores c.1) ¿Qué expresión se utilizaría para leer desde el teclado mediante la función gets el nombre de la persona del 2º elemento del vector a? c.2) ¿Qué expresión se utilizaría para leer desde el teclado mediante la función scanf el número de cuenta de la persona del 2º elemento del vector a? c.3) ¿Qué expresión se utilizaría para asignarle al miembro ingreso_caja de la persona del 2º elemento del vector a la cantidad expresada por la variable global dinero? d) Visualización de valores: d.1) ¿Qué expresión se utilizaría para visualizar el nombre de la persona del 2º elemento del vector m? d.2) ¿Qué expresión se utilizaría para visualizar el número de cuenta de la persona del 2º elemento del vector m? d.3) ¿Qué expresión se utilizaría para visualizar el ingreso_caja de la persona del 2º elemento del vector m? e) Escribir la expresión necesaria para que la variable p apunte al 2º elemento del vector a. f) Una vez hecha la asignación del apartado anterior: f.1) ¿Qué expresión se utilizaría para acceder al nombre de la persona del 2º elemento del vector a través de la variable puntero p?. f.2)¿Qué expresión se utilizaría para acceder al número de cuenta de la persona del 2º elemento del vector a través de la variable puntero p?. f.3)¿Qué expresión se utilizaría para acceder al ingreso_caja de la persona del 2º elemento del vector a través de la variable puntero p?. g) Explicar brevemente la diferencia que existe entre las variables m y a. ¿Cuándo es conveniente utilizar una u otra? T2 (3,5 puntos) Sobre el algoritmo de ordenación de vectores por el método de selección directa, se pide: (a) Explicar brevemente en qué consiste. (b) Indicar si el siguiente fragmento de código es una implementación correcta del algoritmo para ordenar un vector v de números reales por selección directa de forma ascendente (de menor a mayor). En caso negativo, indicar las correcciones que deben hacerse. Campus de Elche. Avda. del Ferrocarril s/n – 03202 ELCHE Escuela Politécnica Superior de Elche Ingeniería Industrial // las variables k,j,n,i,aux son enteras // v es un vector de números reales ... for (k=0; k<n-2; k++) { i = k; for (j=k+1; j<=n+1; j++) { if (v[j] < v[i]) i = j; } k=aux; k=i; i=aux; } ... (c) Incluir el fragmento de código del apartado (b) en una función en C con los parámetros y valor de retorno que se consideren adecuados, junto con un ejemplo de función main que realice la lectura del vector por teclado y una llamada a la función. (d) Indicar cómo varía el vector v en cada iteración al ejecutar la función anterior si su contenido inicial es v={10,9,8,7}. T3 (3,5 puntos) En el siguiente fragmento de código en C++ se realiza la declaración de una clase para representar una pila de caracteres mediante un vector dinámico (puntero ppila) y dos variables enteras que indican el tamaño total del vector dinámico (tam) y la siguiente posición en la que se apilará un carácter (top), tal y como se explicó en las sesiones teóricas. Campus de Elche. Avda. del Ferrocarril s/n – 03202 ELCHE Escuela Politécnica Superior de Elche Ingeniería Industrial class CPila { private: int tam; char *ppila; int top; // tamaño de la pila // puntero a la pila // última posición ocupada +1 public: CPila(const int t=200); CPila(const CPila &pila_orig); ~CPila(void); CPila& operator = (const CPila & pila_orig); void Meter( const char c); char Sacar(void); int Vacia(void); int Llena(void); }; Se pide: (a) Escribir la definición de las funciones CPila(const int t), Meter(const char c) e int Llena(void); (b) Escribir las líneas de código necesarias para: (b.1) Declarar una pila de tamaño 200. (b.2) Declarar un pila de tamaño 220. (b.3) Apilar en la pila declarada en (b.1) los cinco caracteres correspondientes a la palabra Meter. (b.4) Imprimir el mensaje “La pila de b.2 está llena” en el caso de que la pila declarada en (b.2) esté llena. (b.5) Vaciar la pila declarada en (b.1) apilando sus caracteres en la pila declarada en (b.2). (c) Explicar brevemente qué es y para qué sirve el destructor en esta clase. Campus de Elche. Avda. del Ferrocarril s/n – 03202 ELCHE