junio 2001 - Universidad de Málaga

Anuncio
UNIVERSIDAD DE MÁLAGA
Laboratorio de Programación II
E.T.S. Ingeniería Telecomunicaones Convocatoria ordinaria de junio
Dpto. Lenguajes y CC. Computación
Apellidos, Nombre:
DNI:
Código del ordenador:
2001
Se denominan matrices dispersas aquellas matrices cuyos elementos son en su mayoría
ceros. La implementación y almacenamiento de este tipo de matrices resulta más eficiente si
sólo se almacenan los elementos distintos de cero.
Implementar un módulo para el manejo de matrices dispersas. Este módulo
deberá almacenar sólo los elementos distintos de 0 de cada matriz. Para ello deberá
utilizar una estructura de datos que permita acceder eficientemente a cada elemento de
la matriz. La estructura de datos elegida estará formada por una lista encadenada de
nodos con un nodo para cada fila de la matriz que contenga elementos distintos de 0.
Cada uno de estos nodos a su vez enlazará con una lista donde se almacenarán los
valores de los elementos distintos de 0 de cada fila. En la siguiente figura puede
observarse un esquema de esta estructura de datos:
Matriz
Tamaño x: 15
Tamaño y: 10
Fila 5
Columna 3
Valor 100
Columna 15
Valor 1
Fila 7
Columna 1
Valor 5
Columna 2
Valor 1000
Fila 8
Columna 8
Valor 10
Columna 14
Valor 3
Esta figura corresponde a una matriz con 6 valores diferentes de 0 en las filas 5, 7
y 8.
El módulo deberá implementar los siguientes procedimientos públicos:
PROCEDURE Crear( x, y: CARDINAL ): tMatriz;
(* Crea una matriz de x*y elementos y los inicializa a 0 *)
PROCEDURE Leer( fichero: ARRAY OF CHAR ): tMatriz;
(* Crea una matriz y la inicializa a los valores almacenados en 'fichero'.
Ver más adelante la estructura del fichero *)
PROCEDURE Sumar( VAR m: tMatriz; x, y: CARDINAL; v: INTEGER );
(* Suma el valor v al elemento en la posición (x, y) de la matriz. *)
PROCEDURE Valor( m: tMatriz; x, y: CARDINAL ): INTEGER;
(* Devuelve el valor del elemento en la posición (x,y) *)
PROCEDURE SumaLimpia( VAR m: tMatriz; x, y: CARDINAL; v: INTEGER );
(* Suma el valor v al elemento en la posición (x,y) de la matriz. Si el resultado
es 0 debererá eliminar el nodo correspondiente a este elemento *)
PROCEDURE SumaM( VAR r: tMatriz; m1, m2: tMatriz );
(* Suma las matrices m1 y m2 y almacena el resultado en r *)
PROCEDURE MultiplicaM( VAR r: tMatriz; m1, m2: tMatriz );
(* Almacena en r el resultado de multiplicar m1 por m2 *)
El formato del fichero de entrada para la función leer será:
<tamaño x> <tamaño y>
<nº fila> <elementos distintos de 0 en la fila>
<columa> <valor>...
...
Por ejemplo, para la matriz de la figura anterior, el formato del fichero sería:
15 10
52
3 100 15 1
73
1 5 2 1000 8 10
81
14 3
Tras la implementación del módulo de matrices dispersa, implementar un
programa cliente que muestre un menú con las siguientes funciones:
1.Leer una matriz A desde un fichero.
2.Leer una matriz B desde un fichero.
3.Mostrar el resultado de la suma de A y B
4.Mostrar el resultado de la multiplicación de A por B
5.Crear una matriz vacía A (leer el tamaño desde teclado)
6.Modificar el valor de un elemento de A (leer los datos desde teclado)
7.Mostrar el valor de un elemento de A (leer desde teclado la posición del
elemento)
8.Salir del programa
NOTAS:
los ficheros del programa deberán almacenarse en un directorio llamado
'c:\lp2td'
? Los ficheros deberán llamarse 'matrid.def', 'matrizd.mod' y 'cliente.mod'
? Todos los ficheros deberán comenzar con una serie de comentarios donde se
indique los datos personales del alumno.
? Con cada aparición del menú durante la ejecución del programa deberán aparecer
los datos personales del alumno.
? Se pueden utilizar todas las librerias de TopSpeed que se consideren oportunas.
? Para aprobar es necesario que el programa compile sin ningún error.
? Todos
? Para
aprobar es necerario que estén correctamente implementados los siguientes
procedimientos: Crear, Leer, Suma, Valor.
Para subir nota es necesario implementar correctamente los procedimientos:
SumaLimpia, SumaM y MultiplicaM.
Descargar