Examen teorico IA jun 03

Anuncio
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
Descargar