EXAMEN FINAL. 12/2/2000. TEORÍA EJERCICIO 1 •

Anuncio
INTRODUCCIÓN A LA PROGRAMACIÓN 1. CURSO 1999/2000
EXAMEN FINAL. 12/2/2000. TEORÍA
APELLIDOS
NOMBRE
EJERCICIO 1
Se dice que una matriz A es ortogonal si el producto matricial de la matriz A por su traspuesta At es la matriz identidad
I. Es decir la matriz A es ortogonal si se cumple que A•At = I. Complete en LEA una posible implementación de la
función esOrtogonal con el siguiente prototipo.
func esOrtogonal( ent m: TMatriz) dev (ortogonal: logico)
Recuerde que:
Si B es la Matriz traspuesta de A se cumple que aij= bji (1≤ i,j ≤ n)
Si I es la Matriz identidad, se cumple que aij= 0 para i≠j y aij= 1 para i=j
Notas:
1. Considere solo matrices cuadradas.
2. No se admiten estructuras repetitivas anidadas
3. En cada línea en blanco solo se admite: 1) una llamada a función 2) una única instrucción 3) una parte de una
instrucción 4) dejarla vacía
4. No podrá definir ninguna función ni procedimiento adicional, pero si utilizar las que a continuación se indican, sin
necesidad de escribir su implementación.
const
DIM: 10
tipos
TVector: tabla[DIM] de entero
TMatriz: tabla[DIM,DIM] de entero
proc producto(ent m1, m2: Tmatriz; sal mp: TMatriz)
Pre:{m1 y m2 son cuadradas}
Pos:{mp es el producto matricial de m1 y m2}
proc obtenerFila(ent f: entero, m: Tmatriz; sal v: TVector)
Pre:{f ≤ DIM }
Pos:{Devuelve en v el contenido de la fila número f}
proc obtenerColumna(ent c: entero, m: Tmatriz; sal v: TVector)
Pre:{c ≤ DIM }
Pos:{Devuelve en v el contenido de la columna número c}
func esTriangularInferior(ent m: TMatriz) dev (b: logico)
Pre:{cierto}
Pos:{Devuelve cierto si todos los elementos que están por debajo de la diagonal principal son
cero}
func esTriangularSuperior(ent m: TMatriz) dev (b: logico)
Pre:{cierto}
Pos:{Devuelve cierto si todos los elementos que están por encima de la diagonal principal son
cero}
proc sustituirFila(ent f: entero, v: TVector; ent/sal m: TMatriz)
Pre:{f ≤ DIM}
Pos:{Sustituye los valores de la fila f de la Matriz m, con el contenido de v}
proc sustituirColumna(ent c: entero, v: TVector; ent/sal m: TMatriz)
Pre:{c ≤ DIM}
Pos:{Sustituye los valores de la columna c de la Matriz m, con el contenido de v}
proc obtenerDiagonalP(ent m: Tmatriz; sal v: TVector)
Pre:{cierto}
Pos:{Devuelve en v los valores de la diagonal principal de la Matriz m}
proc copiarTMatriz (ent m: Tmatriz; sal s: TMatriz)
Pre:{cierto}
Pos:{Devuelve en s una copia de los valores de la Matriz m}
func esOrtogonal( ent m: TMatriz) dev (ortogonal: logico)
var
mt, mp: TMatriz
prin
.................................
.................................
.................................
fin
proc obtenerTraspuesta(................................)
var
.................................
i: entero
prin
desde ...........................
.................................
.................................
fdesde
fin
func .................................
var
i: entero
.................................
prin
.................................
.................................
.................................
mientras .................................
.................................
.................................
.................................
.................................
fmientras
.................................
fin
Valoración: 1/3 de la nota total
APELLIDOS
NOMBRE
EJERCICIO 2
El método de ordenación por selección genera varias tablas intermedias antes de alcanzar su objetivo. Estamos
interesados en las tablas cuyos valores son una permutación de la tabla original, es decir, aquellas tablas generadas por
el algoritmo que contienen exactamente los mismos valores que la tabla original con el mismo número de apariciones,
aunque en posiciones distintas algunos de ellos.
a) Escriba su DNI en la primera fila (t1)
de la siguiente tabla. A continuación,
muestre los resultados de las tablas
intermedias generadas por el algoritmo
que se menciona arriba, suponiendo que el
criterio de ordenación es ascendente. (Si
no tiene DNI consulte con el profesor)
t1
t2
t3
t4
t5
t6
t7
t8
t9
t10
b) Sean las siguientes definiciones
cons
M: 8
tipos
TablaE: tabla[M] de entero
TablaS: tabla[M+1] de entero
Calcule el resultado s de aplicar la función F a las tablas t y r, donde t es la última tabla que se obtiene en el apartado a),
es decir, el DNI ordenado; r es otra tabla cuyos elementos son los dígitos de su fecha de nacimiento, en formato
ddmmaaaa; y s es la tabla que se obtiene tras la ejecución de F, que ha de satisfacer la poscondición indicada.
func F(t,r:TablaE) dev (s:TablaS)
Pre: {∀i : 1 ≤ i < M ⋅ t i ≤ t i + 1 }
[] [ ]
Pos: {∀i : 1 ≤ i ≤ M + 1 ⋅ (s[i ] = Nj : 1 ≤
j ≤ M ⋅ (∀k : 0 < k < i ⋅ t [k ] < r [ j ]∧ ∀k : i ≤ k ≤ M ⋅ r [ j ] ≤ t [k ]))}
Escriba en la siguiente tabla r su fecha de nacimiento (ponga ceros a la izquierda en el día y el mes si es necesario).
Escriba en la siguiente tabla s el resultado de F.
c) Teniendo en cuenta que no se puede utilizar la
instrucción desde para implementar F y utilizando como
variables locales de control de los bucles las mismas que
aparecen ligadas a los cuantificadores, indique cuáles
serían las condiciones o guardas que aparecerían en las
estructuras iterativas y selectivas del algoritmo.
Valoración: 1/3 de la nota total (a: 25%, b: 50%, c: 25%)
APELLIDOS
NOMBRE
EJERCICIO 3
En una competición de salto de trampolín cada saltador hace tres saltos con diferentes grados de dificultad. Cinco jueces
valoran cada salto de 0 a 10 puntos. La puntuación de cada salto se obtiene quitando las puntuaciones más alta y más baja y
sumando las restantes. La puntuación total de cada saltador al final del concurso se obtiene sumando las puntuaciones de
cada salto multiplicadas por su grado de dificultad. Los datos de la competición se han grabado en un fichero de registros
de tipo Tregsalto denominado “Campeonato.dat” que contiene la información de cada salto. Los campos de Tregsalto son
los siguientes:
Dificultad: real /* Dificultad del salto */
Puntjueces: tabla con 5 valores reales /* Puntuación de cada juez */
Nombre: cadena /* Nombre y apellidos de cada saltador */
Se pide diseñar en LEA las estructuras de datos, variables y un procedimiento (denominado imprimir_listado) que procese
la información anterior y produzca por pantalla un listado de puntuaciones ordenado por puntuación total, con la siguiente
cabecera:
NOMBRE SALTO1 SALTO2 SALTO3 TOTAL DEL CONCURSO
Para ello sólo habrá de escribirse el código de este procedimiento y el prototipo de TODAS las funciones y procedimientos
que se deban invocar para una correcta resolución del problema.
NOTAS
Se deberán tener en cuenta los siguientes condicionantes:
1. Se supone que en el fichero de entrada están situadas primero todas las puntuaciones del primer salto para todos los
saltadores, después las de los segundos saltos y a continuación las de los terceros saltos. El orden de salto se conserva,
es decir, el primer saltador de la primera tanda, es el primero en la segunda y en la tercera y así sucesivamente.
2. Se supone igualmente que no hay más de 500 saltadores y el número exacto se leerá de teclado al comienzo de la
ejecución del procedimiento.
3. Sólo se pide el código del procedimiento imprimir_listado, no así del resto de las funciones o procedimientos de los
que sólo se indicará el prototipo con los parámetros.
4. Se deben indicar todas las funciones y procedimientos aunque no sean invocadas desde el procedimiento
imprimir_listado. Es decir, funciones o procedimientos que sean invocados desde otra función o procedimiento.
5. La solución se escribirá en la siguiente página rellenando en cada línea una sola definición, sentencia o invocación
cons
N : 500
tipos:
______________________
prin
abrir (“Campeonato.dat”,ent,fich)
________________________
leer n
________________________
___________________
Tregsalto : reg
mientras No fdf (fich)
dificultad: real
leer (r, fich)
puntjueces:_______________________________
___________________
nombre: cadena
___________________
si cont <= n:
freg
__________________________
Tregtabla: reg
__________________________
nombre : cadena
| n< cont Y cont <=2 *n:
______________________
__________________________
______________________
| otras:
freg
__________________________
Ttablareg : tabla_________________________
fsi
proc imprimir_listado()
fmientras
var
cerrar(fich)
n,cont:entero
________________________
r: Tregsalto
________________________
fich: fichero de Tregsalto
________________________
______________________
fin
proc ___________________________(___________________________________________________)
proc ___________________________(___________________________________________________)
proc ___________________________(___________________________________________________)
func calcular_puntuacion (___________________________________) dev (____________________)
func __________________(___________________________________) dev (____________________)
func __________________(___________________________________) dev (____________________)
Valoración: 1/3 de la nota total
Descargar