Escribir un programa para la realización de operaciones de suma y multiplicación de matrices con las siguientes condiciones:
- El programa debe ser modular
- Los datos de las matrices se leen de un archivo donde aparecerán en primero lugar las dimensiones de la primera matriz, después sus datos, las dimensiones de la segunda matriz y a continuación sus datos.
- Las matrices no tienen tamaño limitado y se reserva memoria para ellas de forma dinámica, una vez leídos los datos de sus dimensiones.
- Usando funciones de la biblioteca time.h el programa debe imprimir el tiempo empleado en cada ejecución.
El código base ya lo tengo y es el siguiente, habría que transformarlo y usar una estructura del tipo:
Código:
struct matriz{ float *datos; int fil; int col; };
Programa base:
Código:
#include <stdio.h> #define MAXF 4 //Define o tamaño máximo de filas da matriz #define MAXC 4 //Define o tamaño máximo de columnas da matriz main() { int filA, colA, filB, colB, i, j, k, op, A[MAXF][MAXC], B[MAXF][MAXC], C[MAXF][MAXC]; printf("..::: SUMA E MULTIPLICACION DE MATRICES :::..\n\n"); printf(" >> Filas da matriz A: "); scanf("%d", &filA); printf(" >> Columnas da matriz A: "); scanf("%d", &colA); printf("\n >> Filas da matriz B: "); scanf("%d", &filB); printf(" >> Columnas da matriz B: "); scanf("%d", &colB); putchar('\n'); // COMPROBACIÓN DO TAMAÑO MÁXIMO DA MATRIZ (4X4) if(filA>MAXF||filB>MAXF||colA>MAXF||colB>MAXC||filA<0||filB<0||colA<0||colB<0) printf(" Erro: este programa so fai calculos sobre matrices de %dx%d como maximo.\n", MAXF, MAXC); // INTRODUCIÓN DOS ELEMENTOS DAS MATRICES else { for(i=0; i<filA; i++) { for(j=0; j<colA; j++) { printf(" -> Introduza o elemento (%d, %d) da matriz A: ",i+1, j+1); scanf("%d", &A[i][j]); } } printf("\n"); for(i=0; i<filB; i++) { for(j=0; j<colB; j++) { printf(" -> Introduza o elemento (%d, %d) da matriz B: ", i+1, j+1); scanf("%d", &B[i][j]); } } // SELECCIÓN DA OPERACIÓN A LEVAR A CABO printf("\n\n Escolla a operacion a realizar sobre as duas matrices: \n 1. Multiplicar\n 2. Sumar\n\n Seleccion: "); scanf("%d", &op); switch(op) { // OPERACIÓN DE MULTIPLICACIÓN case 1: { if(colA!=filB) printf("\n As matrices introducidas non poden ser multiplicadas.\n"); else{ for(i=0; i<filA; i++) { for(j=0; j<colB; j++) { C[i][j]=0; for(k=0; k<colA; k++) { C[i][j]=(C[i][j]+(A[i][k]*B[k][j])); } } } printf("\n\n\t Matriz A"); putchar('\n'); for(i=0; i<filA; i++){ printf("\n\t"); for(j=0; j<colA; j++){ printf(" %d ", A[i][j]); } } printf("\n\n\t Matriz B"); putchar('\n'); for(i=0; i<filB; i++){ printf("\n\t"); for(j=0; j<colB; j++){ printf(" %d ", B[i][j]); } } printf("\n\n\t Matriz C"); putchar('\n'); for(i=0; i<filA; i++){ printf("\n\t"); for(j=0; j<colB; j++){ printf(" %d ", C[i][j]); } } putchar('\n'); } } break; // OPERACIÓN DE SUMA case 2: { if(colA!=colB || filA!=filB) printf("\n As matrices introducidas non poden ser sumadas.\n"); else{ for(i=0; i<filA; i++) { for(j=0; j<colB; j++) { C[i][j]=0; C[i][j]=(A[i][j]+B[i][j]); } } printf("\n\n\t Matriz A"); putchar('\n'); for(i=0; i<filA; i++){ printf("\n\t"); for(j=0; j<colA; j++){ printf(" %d ", A[i][j]); } } printf("\n\n\t Matriz B"); putchar('\n'); for(i=0; i<filB; i++){ printf("\n\t"); for(j=0; j<colB; j++){ printf(" %d ", B[i][j]); } } printf("\n\n\t Matriz C"); putchar('\n'); for(i=0; i<filA; i++){ printf("\n\t"); for(j=0; j<colB; j++){ printf(" %d ", C[i][j]); } } putchar('\n'); } } break; // ERRO SE NON SELECCIONAMOS '1' OU '2' default: printf("\n Erro: a opcion escollida non esta definida.\n"); } } return 0; }