UNIVERSIDAD DE ALCALÁ DEPARTAMENTO DE AUTOMÁTICA ÁREA DE ARQUITECTURA Y TECNOLOGÍA DE COMPUTADORES ASIGNATURA DE LABORATORIO DE PROGRAMACIÓN AVANZADA TELECOMUNICACIÓN Página 1 PRÁCTICA 1ª: Creación y utilización de matrices dinámicas. OBJETIVOS: Repaso de conceptos de programación vistos en cursos anteriores, especialmente punteros y asignación dinámica de memoria. PUBLICACIÓN DEL ENUNCIADO: Semana del 29 de septiembre de 2003. ENTREGA: Clase de laboratorio de la semana del 20 de octubre de 2003 junto con la práctica 2. Se deberán realizar cuatro funciones con los siguientes prototipos: int ** CrearMatriz (int nFilas, int nColumnas); Esta función creará una matriz dinámica cuyas dimensiones vendrán dadas por los parámetros de tipo entero que se le pasan. Para ello hará uso de la asignación dinámica de memoria. Devolverá un puntero a puntero a entero. Mediante este puntero se accederá a la matriz. nColumnas int** nFilas void LeerMatriz (struct matriz * pDestino); Esta función pedirá datos por pantalla y los introducirá en la matriz recibida (previamente creada con la función anterior). Como único parámetro se le pasará por referencia una variable del tipo struct matriz. Este tipo tiene la siguiente definición: struct matriz { int nFilas; int nColumnas; int ** ppnMatriz; }; // Num. de filas // Num. de columnas // Datos de la matriz Una variable de este tipo almacena en su campo nFilas el número de filas, en su campo nColumnas el número de columnas y en su campo ppnMatriz la dirección de comienzo de la matriz dinámica. Es decir, una variable de este tipo almacena toda la información necesaria para la creación y utilización de una matriz dinámica. void MostrarMatriz (struct matriz * pOrigen); UNIVERSIDAD DE ALCALÁ DEPARTAMENTO DE AUTOMÁTICA ÁREA DE ARQUITECTURA Y TECNOLOGÍA DE COMPUTADORES ASIGNATURA DE LABORATORIO DE PROGRAMACIÓN AVANZADA TELECOMUNICACIÓN Página 2 Esta función sacará los datos de una matriz dinámica por pantalla. Como único parámetro se le pasará por referencia una estructura del tipo struct matriz asociada a la matriz . void DestruirMatriz (struct matriz * pVictima); Esta función destruirá la matriz dinámica liberando la memoria asignada dinámicamente. void main (); La aplicación deberá mostrar el siguiente menú: 1. 2. 3. 4. 5. Crear matriz Leer matriz Mostrar matriz Destruir matriz Salir Todas las opciones del menú tienen que poder ser ejecutadas en cualquier orden y repetidas veces. Asimismo, cada opción del menú deberá invocar a una función que realice el proceso requerido. Todo esto será aplicable a cada una de las prácticas. Deberá probarse el programa con matrices cuadradas, matrices con más filas que columnas, y matrices con más columnas que filas. Observar que en algunas de las funciones utilizadas, la estructura se pasa por referencia, ¿podría ser pasada por valor en todos los casos? REALIZAR otra versión del programa utilizando el tipo vector<T>. Elimine las funciones que no sean necesarias para utilizar dicho tipo. NOTA: En esta práctica se permitirá el uso de los mecanismos de C para entrada/salida y asignación/liberación dinámica de memoria: printf(), scanf(), malloc(), free()... En las siguientes prácticas se deberá usar los mecanismos propios de C++: cin, cout, new, delete... NOTA: Para que el programa detecte las lagunas de memoria (memoria dinámica reservada y no liberada), y accesos a memoria no permitidos, se deben usar las macros INFORME_MEMORIA y LAGUNAS_MEMORIA proporcionadas en el fichero report_mem.h. Este fichero puede obtenerse en el laboratorio o en la página Web de la asignatura. Ejemplo de uso: UNIVERSIDAD DE ALCALÁ DEPARTAMENTO DE AUTOMÁTICA ÁREA DE ARQUITECTURA Y TECNOLOGÍA DE COMPUTADORES ASIGNATURA DE LABORATORIO DE PROGRAMACIÓN AVANZADA TELECOMUNICACIÓN Página 3 PLANTILLA PARA UTILIZAR EN SUS PROGRAMAS #include "report_mem.h" // otras directrices del preprocesador // declaraciones de funciones void main() { INFORME_MEMORIA; { // declaraciones de variables // cuerpo de la función main } LAGUNAS_MEMORIA; } La utilización de las macros será aplicable a cada una de las prácticas. Asimismo se deberá presentar el código perfectamente tabulado y documentado.