20230
20230
Nombre Nº de folios
entregados
completo: (incluido este)
Hay que entregar este folio y todos los folios de examen adicionales que se necesiten para resolver el problema.
No hay que entregar el enunciado del problema.
Nota media: Ha de obtenerse una nota mínima de 4 sobre 10 en el test y de 4 sobre 10 en el problema para hacer media.
Test (5 puntos)
Las respuestas deben marcarse en el cuadro siguiente. En cada pregunta, solo una de las respuestas es correcta.
Nota test (sobre 10): 1.25*(PreguntasBien - (PreguntasMal / 3))
R E S P U E S T A S
1 2 3 4 5 6 7 8
a
b
c
d
Pregunta 1
Se implementa el TAD Cola con las siguientes representaciones en un vector con ocupación variable:
Pregunta 2
Una matriz diagonal es aquella que tiene valor 0 en todas las posiciones que no están en la diagonal principal. ¿Qué fallo tiene la
siguiente función para determinar si la matriz cuadrada A es diagonal? (TAM es la dimensión de la matriz.)
bool esDiagonal (tipoMatriz A) {
int i, j;
bool diag;
diag = false;
for (i=0; i < TAM; i++) {
for (j=0; j < TAM; j++) {
if (i != j && A[i][j] == 0)
diag = true;
}
}
return diag;
}
a) Es correcta b) No comprueba algunos valores de la matriz c) La bandera está mal diseñada d) Devuelve siempre false
Pregunta 3
En el vector con ocupación variable V hay cinco valores almacenados: A B C D E. Se ejecuta el siguiente módulo:
void desplazar (vov &V) {
int i;
for(i=V.ocupadas-1;i>0;i--) {
V.vector[i] = V.vector[i-1];
}
}
¿Qué información queda en V?
a) A A A A A b) A B C D E c) B C D E E d) A A B C D
Pregunta 4
Dada esta definición de tipos y las siguientes funciones:
typedef int vector[100];
int mayor1 (vector v) { int mayor2 (vector v) {
int i, may; int i, pmax;
may = 0; pmax = 0;
for (i = 0; i <100; i++) { for (i = 1; i<100; i++) {
if (v[i] > may) if (v[i] > v[pmax])
may = v[i]; pmax = i;
} }
return may; return v[pmax];
} }
¿Cuál es la diferencia principal entre las funciones mayor1 y mayor2 si se le pasan vectores con todos los elementos negativos?
a) ambas devuelven el resultado correcto, el elemento negativo mayor (más cercano a 0)
b) mayor1 devolverá 0 y mayor2 devolverá el elemento negativo mayor (más cercano a 0)
c) mayor2 devolverá 0 y mayor1 devolverá el elemento negativo mayor (más cercano a 0)
d) ambas devuelven 0
Introducción a la programación Parcial 2 -23-11-2023
Pregunta 5
Los mejores algoritmos para buscar un elemento dado en un vector tienen complejidad:
a) O(1) si el vector está ordenado y O(n) si es un vector sin ordenar
b) O(log n) si el vector está ordenado y O(n) si es un vector sin ordenar
c) O(log n), independientemente de que el vector esté ordenado o sin ordenar
d) O(n), independientemente de que el vector esté ordenado o sin ordenar
Pregunta 6
¿Cuál es la complejidad del siguiente trozo de código, suponiendo que N es una variable, con un valor positivo, de la que depende
directamente el tamaño del problema?
x = 0;
for (i = 0; i < N/2; i++) {
for (j = N; j > i; j--) {
x = x + i + j;
}
}
Pregunta 7
Dada la siguiente definición de tipos y variables:
const int MAX=20;
typedef int tvector[MAX];
typedef char tcadena[MAX];
struct datos{
tcadena nombre;
int codigo;
tvector v;
};
typedef datos tsecuencia[MAX];
//variable
tsecuencia sec;
¿Cuál de las siguientes asignaciones es correcta?
a) sec[5].v[3] = 5; b) sec[5].codigo[1] = 5; c) sec[5].nombre = 'x'; d) sec.codigo[5] = 7;
Pregunta 8
En la implementación del TAD Cola con prioridad en un vector con ocupación variable, según las distintas representaciones
relacionadas con las distintas formas de insertar los elementos, ¿cuál es el coste de la operación de consultar el primero (el más
prioritario) implementada de forma eficiente?
a) Siempre O(1), independientemente de si los elementos se insertan en orden de prioridad (ascendente o descendente) o
por orden de llegada por el final
b) Siempre O(n), independientemente de si los elementos se insertan en orden de prioridad (ascendente o descendente) o
por orden de llegada por el final
c) O(1) si los elementos se insertan en orden de prioridad descendente, y O(n) si se insertan en orden de prioridad
ascendente o por orden de llegada por el final
d) O(1) si los elementos se insertan en orden de prioridad (ascendente o descendente) y O(n) si se insertan por orden de
llegada por el final
Las notas saldrán el lunes, 4 de diciembre, antes de las 20:00, en el aula virtual de la asignatura. Las revisiones se realizarán
en tutorías antes del 19 de diciembre.
El problema se resuelve en folios separados que deben venir numerados e identificados con el nombre completo. Solo hay que
entregar aquellos folios que hay que corregir. (No se entregan los folios en sucio.)
Introducción a la programación Parcial 2 -23-11-2023
Problema: Monitorización de emisiones de carbono (5 puntos)
Una organización ambiental global está desarrollando un sistema para monitorizar las emisiones de CO2 de
diferentes países con el fin de combatir el cambio climático. Te han contratado para que escribas un programa que
ayude a la gestión de estos datos.
Ya tienen definido e implementado un TAD Emision que gestiona la información de las emisiones anuales por
país. En cada dato de este tipo se almacena el nombre del país (un string), el año de los datos (un entero) y la
cantidad de emisiones de CO2 en toneladas (un real).
Las cabeceras de las operaciones del TAD Emision son las siguientes:
// Crea la información sobre una emisión a partir del país, el año y la cantidad de
emisiones de CO2.
void nueva (string pais, int year, float co2, Emision &e);
// Devuelve el nombre del país
string obtenerPais (Emision e);
// Devuelve el año de la emisión
int obtenerYear (Emision e);
// Devuelve la cantidad total de toneladas de CO2 emitido
float obtenerToneladas (Emision e);
Podemos suponer que este TAD Emision ya está implementado y que todas las operaciones tienen coste O(1).
La especificación de las operaciones del TAD Monitor que debes implementar es la siguiente:
TAD
Monitor : iniciar, insertar, mediaPais, eliminar, totalEmisiones
Operaciones
iniciar salida Monitor
efecto Inicia la estructura sin información.
insertar (m: Monitor, pais: string, year: int, co2: float)
modifica m
efecto Inserta la información de una nueva emisión del país indicado, en
el año indicado, con la cantidad de co2 indicada. Si ya existe una emisión
del mismo país y año, se sustituye por esta nueva. Si no hay ninguna con
esas características, se inserta (excepto si la estructura está llena, que
entonces esta operación no hace nada).
mediaPais (m: Monitor, pais: string) salida float
efecto Devuelve la media aritmética de las emisiones registradas para el
país indicado en los distintos años para los que hay datos. Si no hubiera
ninguna emisión de ese país, devolverá -1.
eliminar (m: Monitor, pais: string, year: int) modifica m
salida bool
efecto Elimina de la estructura la información del país y año indicados.
Además, devolverá true si se ha podido eliminar esa emisión o false si no
existía una emisión con esos datos.
totalEmisiones (m: Monitor) salida float
efecto Devuelve el total de toneladas de CO2 que se tienen registradas en el
sistema. Esta operación debe tener coste constante.
1. Definir la estructura de datos necesaria para implementar el TAD Monitor y las operaciones indicadas (1.5 puntos).
2. Implementar de forma eficiente las operaciones iniciar, insertar, mediaPais, eliminar y totalEmisiones del TAD
Monitor. Calificación: iniciar (0.5), insertar (2), mediaPais (2), eliminar (2) y totalEmisiones (2).