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.