You are on page 1of 4

METODOLOGA DE LA PROGRAMACIN I

METODOLOGA DE LA PROGRAMACIN I
Enunciado Examen (15 de Diciembre de 2006)

1.
2.
3.
4.
5.

En cada folio que entregue deber indicar su nombre, DNI y especialidad (Sistemas o Gestin).
Todos los folios debern estar escritos a bolgrafo, con letra clara y sin tachones.
No se corregir ninguna respuesta que no cumpla estos requisitos.
El examen tendr una duracin de 2 horas y 30 minutos.
Se deber dejar el DNI visible al profesor durante el tiempo que sea necesario.

EJERCICIO 1. Conteste a las siguientes cuestiones:

(3 puntos)

1. Tras la ejecucin del siguiente cdigo escrito en C ? (0.30 puntos)


int main( )
{ int i = 0, j = 0;
for ( ; i < 10 || j == 20; ) {
i++;
j += 2;
}
return 0;
}

a) Las variables quedaran con los valores i = 9, j = 20


b) Las variables quedaran con los valores i = 11, j = 22
c) Dicho cdigo es incorrecto al estar mal expresado el
bucle for
d) Ninguna de las anteriores es correcta

2. Cunto vale la variable z tras la ejecucin del siguiente trozo de cdigo ? (0.25 puntos)
int main()
{ int x = 3, y, z;
y = 5;
if ((x < y) || (x * y < 20 - z))
z++;
else;
z = 3;
}

3. La expresin (x && y)|| !z ser: ?


a)
b)
c)
d)

a)
b)
c)
d)

z=0
z=1
z=3
No podemos saber el valor de z ya que no est
inicializado

(0.25 puntos)

Falsa, si x es falso y z es verdadero.


Verdadera, si z es falso.
Verdadera, si x y y son al mismo tiempo verdaderos.
Todas las respuestas son correctas.

4. Cuntas veces se repite la <instruccin1> en el siguiente trozo de cdigo? (0.30 puntos)


for (int i = 1; i < 10; i = i + 2)
{ if (i / 2 > 2)
{ <instruccin1>;
i++;
}
}

a)
b)
c)
d)

1 vez
2 veces
3 veces
4 veces

5. Escriba una sola funcin con argumentos implcitos que realice lo mismo que estas tres funciones: (0.40 puntos)
float conversor(float cantidad,
float cambio, int dir)
{float final;
if (dir == 0)
cambio = 1 / cambio;
final = cantidad * cambio;
return final;
}

float conversor(float cantidad) {


return (cantidad / 166.386);
}
float conversor (float cantidad,
float cambio) {
return (cantidad / cambio);
}

METODOLOGA DE LA PROGRAMACIN I

6. Indica cmo queda la matriz del ejemplo una vez que se ejecuta el siguiente cdigo: (0.75 puntos)

9
8
7

5
6
4

2
3
1

int main( ) {
int mat[3][3] = {9, 5, 2, 8, 6, 3, 7, 4, 1};
int i = 1, j, m;
while (mat[i-1][0] > mat[i][0]) {
switch(i-1) {
case 0: if (mat[i][i] > 4) {
m = 3;
break;
}
case 1: m = 1;
break;
case 3: m = 2;
}
for(j = 0; j < 3; j++)
mat[i][j] = mat[i][j] + mat[i-1][j] / m;
mat[i-1][j-1] = mat[i-1][j-1] / 2;
if (i < 2)
i++;
}
}

7. Si tenemos el siguiente trozo de cdigo, determine que instrucciones (de las numeradas) se ejecutan en cada uno de
los casos: (0.75 puntos) (0.15 puntos por apartado)
int main ()
{ int c;
. . .
if (10 % c < 3)
<instruccin1>;
<instruccin2>;
switch(c)
{
case 1: <instruccin3>;
case 2:
case 3: if (c % 2 != 0)
break;
else
<instruccin4>;
case 4: <instruccin5>;
if (c > 2 && c <= 8)
if (c > 6)
<instruccin6>;
else if ( c < 10)
<instruccin7>;
case 5: <instruccin8>;
break;
<instruccin9>;
default: if(c >= 6 && c <= 10)
<instruccin10>;
<instruccin11>;
if (c < 8 || c > 12)
<instruccin12>;
}
<instruccin13>;
. . .
}

Qu instrucciones se ejecutarn
(0.15 puntos por apartado)
c = 1:
c = 2:
c = 3:
c = 6:
c = 11:

cuando?

METODOLOGA DE LA PROGRAMACIN I

EJERCICIO 2.

(3.5 puntos)

Disee e implemente la clase Vector, para que al ejecutar el programa siguiente se genere el dilogo que se muestra
a la derecha (los caracteres en negrita representan los datos que introduce el usuario). La clase debe tener un
constructor nico:
Inicio
v1: a a
v2: a a
v3: t t
v4: b d
v5: f e
v6: f f
v7:

int main() {
cout << "Inicio";
Vector v1;
Vector v2(4);
Vector v3(3, t);
Vector v4(4, b, 2);
Vector v5(6, f, -1);
Vector v6(9, f);
Vector v7(-2, h, 1);
cout
cout
cout
cout
cout
cout
cout
cout

<<
<<
<<
<<
<<
<<
<<
<<

endl <<
endl <<
endl <<
endl <<
endl <<
endl <<
endl <<
endl;

"v1:
"v2:
"v3:
"v4:
"v5:
"v6:
"v7:

";
";
";
";
";
";
";

v1.ver();
v2.ver();
v3.ver();
v4.ver();
v5.ver();
v6.ver();
v7.ver();

int pos, n, op, pri, ult;


char c;
cout << endl << "Elige un elemento: ";
cin >> pos;
while (pos != 0) {
if (pos >= 1 && pos <= v5.longitud())
v5.elimina(pos);
else
cout << endl << "Posicion no valida";
cout << endl << "v5: "; v5.ver();
cout << endl << "Elige un caracter: ";
cin >> c;
n = v5.buscar(c, pri, ult);
cout << "El caracter aparece "
<< n << " veces";
if (n > 0) {
cout << "\nLa 1 vez en la posicion " << pri;
cout << "\nLa ultima en la posicion " << ult;
}
cout << endl << "1 agregar, 2 eliminar: ";
cin >> op;
if (op == 1) {
if (v5.lleno() == false)
v5 = v5 + c;
else
cout << "\nEl vector esta lleno";
}
else if (op == 2)
v5 = v5 - c;
cout << endl << "v5: "; v5.ver();
cout << endl << "Elige un elemento: ";
cin >> pos;
}
cout << endl << "Fin" ;
return 0;
}

a
t
f
d
f

a
h
c b a
f f f

Elige un elemento: 1
V5: e d c b a
Elige un caracter: x
El caracter aparece 0 veces
1 agregar, 2 eliminar: 1
V5: e d c b a x
Elige un elemento: 8
Posicion no valida
V5: e d c b a x
Elige un caracter: y
El caracter aparece 0 veces
1 agregar, 2 eliminar: 1
El vector esta lleno
V5: e d c b a x
Elige un elemento: 3
V5: e d b a x
Elige un caracter: d
El caracter aparece 1 veces
La 1 vez en la posicion 2
La u1tima en la posicion 2
1 agregar, 2 eliminar: 1
V5: e d b a x d
Elige un elemento: -4
Posicion no valida
V5: e d b a x d
Elige un caracter: d
El caracter aparece 2 veces
La 1 vez en la posicion 2
La u1tima en la posicion 6
1 agregar, 2 eliminar: 2
V5: e b a x
Elige un elemento: 0
Fin

METODOLOGA DE LA PROGRAMACIN I

EJERCICIO 3.

(3.5 puntos)

Dada las siguientes definiciones de estructuras y clases:


struct VIVIENDA {
float superficie;
float precio;
char dni[10];
char nombre[30];
};
class PLANTA {
VIVIENDA casas[10];
int nc;
public:
int ncasas() { return nc; } //devuelve
void cambia_ncasas(int n) { nc = n; }
VIVIENDA& obtener_casa(int n) { return
VIVIENDA devolver_casa(int n) { return
void agregar(VIVIENDA c) { casas[nc] =
};

el n de casas de la planta
casas[n]; } //devuelve una referencia
casas[n]; }
c; nc++; }

class EDIFICIO {
PLANTA plantas[20];
int np;
public:
int num_plantas() { return np; }
PLANTA devolver_planta(int n) { return plantas[n]; }
void cargar(); // carga desde teclado los datos del edificio
};
// busca dni en las primeras n posiciones de la tabla DNIs.
// Devuelve la posicin donde se encuentra o -1 en caso de no encontrarlo
int buscar(char DNIs[200][10], char dni[10], int n);
int main() {
EDIFICIO x;
char DNIs[200][10]; // tabla con capacidad para 200 dni
float gastos[200]; // tabla que permite guardar 200 cantidades diferentes
...
x.cargar(); // carga los datos del edificio desde teclado
...
return 0;
}

y suponiendo la funcin genrica buscar() y el mtodo cargar() de la clase EDIFICIO ya implementados, completa el
programa de forma que devuelva el dni de la persona o personas ms ricas del edificio (aquellas que ms dinero se han
gastado en la compra de una o varias casas).
El programa debe obligatoriamente hacer uso de las estructuras existentes en el main().
Idea: Usa la tabla DNIs para almacenar los dni de los propietarios de las casas y la tabla gastos para acumular lo que
gasta cada persona, de forma que gastos[i] represente lo que se ha gastado la persona con dni DNIs[i] en el edificio.

You might also like