...al que resuelva lo siguiente y explique el uso de los punteros con la estructura:
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;
}