Fundamentos de Informática. Primer Curso de Ingenieros Industriales Práctica 8 Programación con Matrices en Lenguaje C 1 Introducción El objeto de la presente práctica es permitir al alumno ensayar y familiarizarse con los conceptos de programación de matrices en lenguaje C que se han desarrollado en las clases teóricas de la asignatura. Para ello se hará uso del compilador Dev-C++, que permitirá editar, compilar y montar programas desarrollados en el lenguaje de programación C. 2 Desarrollo de la Práctica Para ilustrar los conceptos de programación de matrices en C antes mencionados, esta práctica propone la realización y análisis de un programa concreto. El alumno deberá desarrollar un programa que permita obtener el producto de dos matrices, representando éste en la pantalla del ordenador, respetando el formato de filas y columnas de la matriz resultado. Pasos a seguir para el desarrollo de la práctica 1. Preparación del programa de edición y compilación Para entrar en el entorno de edición del programa de Dev-C++, no tenemos más que hacer click sobre el icono de acceso directo a Dev-C++, que a este efecto debe estar presente en el escritorio de Windows. Para comenzar la edición o escritura del nuevo programa, pulsaremos en menú desplegable Archivo->nuevo->Fichero fuente o bien pulsaremos la combinación de teclas Ctrl.+N 2. Escritura del Programa de multiplicación de matrices. Se proporciona a continuación una plantilla para la escritura del programa de multiplicación de matrices, en la que se define lo siguiente: 1. El tamaño en filas y columnas de las matrices a mutiplicar: FIL1,COL1 y FIL2,COL2 2. El nombre de las variables en las que están almacenadas las matrices: mat1 y mat2. 3. Inicialización del valor numérico de los elementos de dichas matrices. 4. El prototipo de la función de multiplicación de matrices: multiplica 5. Función de entrada al programa void main(void) Práctica 8.doc 1 Fundamentos de Informática. Primer Curso de Ingenieros Industriales 6. Variables para los índices de los bucles de cálculo del producto matricial (i,j,k) y una variable auxiliar (escalar). PLANTILLA #include <stdio.h> #include <stdlib.h> #define #define #define #define FIL1 COL1 COL2 FIL2 2 3 2 COL1 /* FIL2 debe ser igual a COL1 para poder multiplicar void multiplica(double mat1[][COL1],double mat2[][COL2]); main() { double mat1[FIL1][COL1]={{1,2,1},{3,2,4}}; double mat2[FIL2][COL2]={{5,6},{7,8},{-1,2}}; printf("Resultado de la multiplicacion\n"); . . (Completar el código en este espacio) . system(“PAUSE”); } void multiplica(double mat1[][COL1],double mat2[][COL2]) { int i,j,k; double escalar; . . . (Completar el código en este espacio) . } El alumno deberá completar el código anterior para obtener un programa que multiplique (usando la función multiplica) las matrices mat1 y mat2, declaradas e inicializadas en main(). El resultado de dicho producto deberá mostrarse por pantalla respetando el formato de filas y columnas del resultado, es decir, deberán aparecer filas y columnas correctamente alineadas. Para ello se sugiere el empleo de la siguiente función para la salida de datos, la cual garantiza una longitud fija (3 espacios para la parte entera y redondeo a 2 espacios decimales) del número que se imprima por pantalla. printf("%3.2f ",escalar); Se recuerda asimismo, que el programa deberá incluir el correspondiente retorno de carro ( printf(“\n”); ) al final de la impresión de cada fila, para que éstas aparezcan alineadas una sobre otra como corresponde. Recordemos que la expresión del producto de dos matrices viene dada por: Práctica 8.doc 2 Fundamentos de Informática. Primer Curso de Ingenieros Industriales C ij = ∑ Aik Bkj k El programa deberá constar, por tanto, de tres bucles anidados: el más interno de ellos (con índice k) deberá encargarse de efectuar el producto escalar de la fila i de A (o mat1) por la columna j de B (o mat2), acumulando el resultado en la variable auxiliar escalar, que se proporciona en la plantilla. Los dos bucles externos, con índices i , j; deberán recorrer todas las filas de A y todas las columnas de B respectivamente, para completar el producto. 3. Resultado de la ejecución del programa Antes de pasar a ver el funcionamiento del programa tecleado, es conveniente guardarlo. Puede almacenar su código fuente en cualquier directorio de la unidad local C:. Se recuerda que para que el programa sea apropiadamente compilado como código C, es necesario guardarlo con extensión .C, es decir en la ventana que se le abrirá al guardar el archivo, seleccione “C source files (*.c)” Para comprobar que el código funciona correctamente generaremos un fichero ejecutable a partir de nuestro fichero fuente empleando la opción Compilar (Ctrl.+F9) del menú desplegable Ejecutar de Dev-C++. Esto generará, si el código no contiene errores, un fichero ejecutable llamado multiplica.exe Para ejecutarlo acudiremos de nuevo al menú Ejecutar-> Ejecutar. El resultado debe ser el producto de las matrices arriba mencionadas. 4. Sugerencia final Aquellos alumnos que terminen satisfactoriamente el programa anterior, pueden como ejercicio, tratar de modificar el mismo para permitir la entrada por teclado de los elementos de las matrices. Práctica 8.doc 3