Está en la página 1de 9

Procedimientos selectivos de ingreso y acceso a los cuerpos docentes de profesores de

Enseanza Secundaria. ORDEN 6 DE MAYO DE 2009

Especialidad: INFORMTICA
Prueba B3: Ejercicio 2
Valoracin: 10 puntos
Tiempo mximo ejercicio 1: 145 h Pgina 1 de 9
APELLIDOS Y NOMBRE:

1. Dado el siguiente cdigo:


int i, j, k = 0;
for (i = 0; i < 4; i++)
for (j = 0; j < i; j++)
{
if (j == 2)
break;
k += i + j;
}
printf ("%d", k);
Muestra la salida por pantalla.
SOLUCIN: 13

2. Dado el siguiente cdigo:


#define N 5
int funcion (void)
{
static int valor = 0;
valor++;
return valor;
}
int main()
{
int vector[N], i, suma = 0;
for (i = 0; i < N; i++)
{
vector[i] = funcion();
suma += vector[i];
}
printf ("%d", suma);
return 0;
}
Muestra la salida por pantalla.

Procedimientos selectivos de ingreso y acceso a los cuerpos docentes de profesores de


Enseanza Secundaria. ORDEN 6 DE MAYO DE 2009

Especialidad: INFORMTICA
Prueba B3: Ejercicio 2
Valoracin: 10 puntos
Tiempo mximo ejercicio 1: 145 h Pgina 2 de 9
APELLIDOS Y NOMBRE:

SOLUCIN: 15
3. Dado el siguiente cdigo:
#define N 'N'-'A'+1

char cadena[N];
char *p;
int suma = 0;
for (p = cadena; p < cadena + N; p++)
*p = p - cadena + 'A';
for (p = cadena; p < cadena + N - 1; p++)
suma += *(p+1) - *p;
printf ("%d", suma);
Muestra la salida por pantalla.
SOLUCIN: 13

4. Dado el siguiente cdigo:


char cadena[] = "Utilizando cadenas";
char *p, *q;
p = cadena;
p = strchr (cadena, 'c');
printf ("%s ", strrev(p));
for (q = p; *q; q++)
(*q)++;
printf (" %s ", cadena);
Muestra la salida por pantalla.
SOLUCIN: sanedac Utilizando tbofebd

5. Rellena el cdigo que falta:


#define N 40
#define M 2
typedef struct {
int dia;
int mes;
int anyo;

Procedimientos selectivos de ingreso y acceso a los cuerpos docentes de profesores de


Enseanza Secundaria. ORDEN 6 DE MAYO DE 2009

Especialidad: INFORMTICA
Prueba B3: Ejercicio 2
Valoracin: 10 puntos
Tiempo mximo ejercicio 1: 145 h Pgina 3 de 9
APELLIDOS Y NOMBRE:

} tfecha;
typedef struct {
long int dni;
char nombre[N];
tfecha fecnac;
} talumno;
int main() {
talumno alumnos[M];
int i;
for (i = 0; i < M; i++)
{
printf ("\n\nAlumno %d\n", i + 1);
printf ("DNI:");
scanf (____________________________________________________);
fflush(stdin);
printf ("Nombre: ");
gets (_____________________________________________________);
printf ("Fecha de nacimiento: ");
scanf (____________________________________________________);
}

}
SOLUCIN:
talumno alumnos[M];
int i;
for (i = 0; i < M; i++)
{
printf ("\n\nAlumno %d\n", i + 1);
printf ("DNI:");
scanf ("%ld", &alumnos[i].dni);
fflush(stdin);
printf ("Nombre: ");
gets(alumnos[i].nombre);
printf ("Fecha de nacimiento: ");
scanf("%d%d%d", &alumnos[i].fecnac.dia,
&alumnos[i].fecnac.mes,
&alumnos[i].fecnac.anyo);
}

Procedimientos selectivos de ingreso y acceso a los cuerpos docentes de profesores de


Enseanza Secundaria. ORDEN 6 DE MAYO DE 2009

Especialidad: INFORMTICA
Prueba B3: Ejercicio 2
Valoracin: 10 puntos
Tiempo mximo ejercicio 1: 145 h Pgina 4 de 9
APELLIDOS Y NOMBRE:

6. Dado el siguiente cdigo:


int funcion(int a, int b)
{
int result = a;
if (a < b)
return result;
result = funcion (a - b, b);
return result;
}
int main ()
{
printf ("%d", funcion (5, 2));
}
Indica la salida por pantalla.
SOLUCIN: 1
Funcin recursiva que dados dos nmeros calcula el resto de dividir el primero
entre el segundo.

7. Dado el siguiente cdigo:


#define N 5
int funcion (int vector[])
{
int suma = 0;
int *p;
for ( p = vector; p < vector + N; p++)
if (*p % 2)
suma += *p;
return suma;
}
int main()
{

Procedimientos selectivos de ingreso y acceso a los cuerpos docentes de profesores de


Enseanza Secundaria. ORDEN 6 DE MAYO DE 2009

Especialidad: INFORMTICA
Prueba B3: Ejercicio 2
Valoracin: 10 puntos
Tiempo mximo ejercicio 1: 145 h Pgina 5 de 9
APELLIDOS Y NOMBRE:

int vector[N] = {5, 10, 15, 20, 25};


int *p;
for (p = vector; p < vector + N; p++)
*p /= 5;
printf ("%d", funcion (vector));
return 0;
}
muestra la salida por pantalla.
SOLUCIN: 9

8. Dado el siguiente cdigo:


int i, j, *pi, *pj;
pi = &i;
*pi = 5;
j = 10;
pj = pi;
*pi *= *pj;
if (*pi == *pj)
*pj = *pi + *pj;
printf ("i = %d j = %d *pi = %d *pj = %d", i, j, *pi, *pj);
Muestra la salida por pantalla.
SOLUCIN: i = 50 j = 10 *pi = 50 *pj = 50

9. Dado el siguiente cdigo:


#define N 3

int matriz[N][N] = {1, 2, 3, 4, 5, 6, 7, 8, 9};


int matriz2[N][N];
int i, j, suma = 0;
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
matriz2[j][i] = matriz[i][j];

Procedimientos selectivos de ingreso y acceso a los cuerpos docentes de profesores de


Enseanza Secundaria. ORDEN 6 DE MAYO DE 2009

Especialidad: INFORMTICA
Prueba B3: Ejercicio 2
Valoracin: 10 puntos
Tiempo mximo ejercicio 1: 145 h Pgina 6 de 9
APELLIDOS Y NOMBRE:

for (i = 0; i < N; i++)


for (j = 0; j < N; j++)
if (i == j)
suma += matriz2[i][j];
printf ("%d", suma);
getch();
Muestra la salida por pantalla.
SOLUCIN: 15

10.

Muestra la salida por pantalla del siguiente cdigo:


#define N 4

int i, j, aux;
int vector [N] = {4, 3, 2, 1};
int *p;
for ( i = 1; i < N; i++)
for ( p = vector; p < vector + N - i; p++)
if (*p > *(p + 1)) {
aux = *p;
*p = *(p + 1);
*(p + 1) = aux;
}
for (i = 0; i < N; i++)
printf ("%d", vector[i]);
Muestra la salida por pantalla.
SOLUCIN:1234
Algoritmo de ordenacin de la burbuja utilizando punteros.

Procedimientos selectivos de ingreso y acceso a los cuerpos docentes de profesores de


Enseanza Secundaria. ORDEN 6 DE MAYO DE 2009

Especialidad: INFORMTICA
Prueba B3: Ejercicio 2
Valoracin: 10 puntos
Tiempo mximo ejercicio 1: 145 h Pgina 7 de 9
APELLIDOS Y NOMBRE:

A partir de la base de datos de un laboratorio farmacutico extraemos


las siguientes tablas:
FORMULA ( Nom_Formula, caducidad, importe) .Nombre de la frmula,
periodo mximo de caducidad y el importe del producto en euros.
COMPOSICION (Nom_Formula, componente, cantidad). Almacena para
cada frmula magistral los nombres de sus componentes y la cantidad
en mililitros de cada uno de ellos necesario para la creacin.
Formular en SQL las siguientes consultas:
a) Mostrar los nombres de las frmulas cuya caducidad sea inferior a
30 das y para su generacin sean necesarias ms de 3
componentes.
b) Mostrar para cada una de las frmulas el componente cuya
cantidad sea la mayor de todos los componentes de dicha frmula.
c) Obtener la frmula que menor presentacin tenga. Existe la
posibilidad de que existan varias de ellas con la misma
presentacin.
(Se entiende por presentacin la cantidad total en mililitros de la
composicin)
d) Actualizar el componente C3, debemos cambiar su nombre por
CV3. Dichos cambios deben registrarse en la tabla COMPOSICION.
SOLUCIONES
1.)
SELECT F.Nom_Formula
FROM FORMULA F
WHERE F.CADUCIDAD<30 AND ((SELECT COUNT(*)
FROM COMPOSICION C
WHERE C.Nom_Formula=F.Nom_Formula)>3)
SELECT C.Nom_Formula
FROM FORMULA F, COMPOSICION C
WHERE C.Nom_Formula=F.Nom_Formula AND F.CADUCIDAD<30

Procedimientos selectivos de ingreso y acceso a los cuerpos docentes de profesores de


Enseanza Secundaria. ORDEN 6 DE MAYO DE 2009

Especialidad: INFORMTICA
Prueba B3: Ejercicio 2
Valoracin: 10 puntos
Tiempo mximo ejercicio 1: 145 h Pgina 8 de 9
APELLIDOS Y NOMBRE:

GROUP BY C.Nom_Formula
HAVING COUNT(*)>3
SELECT C.Nom_Formula
FROM FORMULA F
INNER JOIN COMPOSICIN C ON C.Nom_Formula=F.Nom_Formula
WHERE F.CADUCIDAD<30
GROUP BY C.Nom_Formula
HAVING COUNT(*)>3

2.)
SELECT C1.Nom_Formula , C1.Componente
FROM COMPOSICION C1
GROUP BY C1.Nom_Formula, C1.Componente, C1.cantidad
HAVING C1.cantidad>= ALL( SELECT C2.cantidad
FROM composicion C2
WHERE C1.Nom_Formula=C2.Nom_Formula )
SELECT C1.Nom_Formula , C1.Componente
FROM COMPOSICION C1
GROUP BY C1.Nom_Formula, C1.Componente, C1.Cantidad
HAVING C1.cantidad >= ALL(SELECT MAX(C2.cantidad)
FROM COMPOSICION C2
WHERE C1.Nom_Formula=C2.Nom_Formula )
SELECT C1.Nom_Formula , C1.Componente
FROM COMPOSICIN C1
GROUP BY C1.Nom_Formula , C1.Componente, C1.cantidad
HAVING C1.cantidad IN (SELECT MAX(C2.cantidad)
FROM COMPOSICION C2
WHERE C1.Nom_Formula=C2.Nom_Formula )

Procedimientos selectivos de ingreso y acceso a los cuerpos docentes de profesores de


Enseanza Secundaria. ORDEN 6 DE MAYO DE 2009

Especialidad: INFORMTICA
Prueba B3: Ejercicio 2
Valoracin: 10 puntos
Tiempo mximo ejercicio 1: 145 h Pgina 9 de 9
APELLIDOS Y NOMBRE:

3.SELECT C1.Nom_Formula
FROM COMPOSICION C1
GROUP BY C1.Nom_Formula
HAVING SUM(c1.cantidad) >= ALL(SELECT sum(cantidad) FROM COMPOSICION
GROUP BY Nom_Formula )
4.UPDATE COMPOSICION SET COMPOSICION.Componente = "CV23"
WHERE (((COMPOSICION.Componente)="C3"));