Operaciones con Matrices en C: Suma, Resta, Producto y Simetría
Programa en C: Operaciones con Matrices
#include <stdio.h>
#define DIM 3
void suma_resta(double a[DIM][DIM], double b[DIM][DIM], double r[DIM][DIM], char op);
int simetrica(double m[DIM][DIM]);
void producto(double a[DIM][DIM], double b[DIM][DIM], double r[DIM][DIM]);
void escalar(double e, double a[DIM][DIM], double r[DIM][DIM]);
void mostrar(char *s, double m[DIM][DIM]);
int main(void)
{
double sim[DIM][DIM] = {
{ 1.0, -1.0, 3.0},
{-1.0, 2.0, 4.0},
{ 3.0, 4.0, 7.0}
},
m1[DIM][DIM] = {
{2.0, 3.0, 7.0},
{8.0, 7.0, 4.0},
{4.0, 9.0, 5.0}
},
m2[DIM][DIM] = {
{1.0, 6.0, 0.0},
{9.0, 5.0, 2.0},
{1.0, 9.0, 3.0}
},
resultado[DIM][DIM];
mostrar("S", sim);
printf("La matriz anterior%ses simétrica\n\n", simetrica(sim) ? " SI " : " NO ");
mostrar("M1", m1);
printf("La matriz anterior%ses simétrica\n\n", simetrica(m1) ? " SI " : " NO ");
mostrar("M2", m2);
suma_resta(m1, m2, resultado, '+');
mostrar("M1 + M2 >>> R", resultado);
suma_resta(m1, m2, resultado, '-');
mostrar("M1 - M2 >>> R", resultado);
system("PAUSE");
return 0;
}
void suma_resta(double a[DIM][DIM], double b[DIM][DIM], double r[DIM][DIM], char op)
{
int f, c, signo;
switch (op) {
case '+': signo = +1;
break;
case '-': signo = -1;
break;
default: printf("\a\a\n\nOperación no reconocida\n\n\a\a");
return;
}
for (f=0; f < DIM; f++)
for (c=0; c < DIM; c++)
r[f][c] = a[f][c] + signo * b[f][c];
}
int simetrica(double m[DIM][DIM])
{
int f, c, result = 1;
for (f=0; f < DIM && result; f++)
for (c=0; c < DIM && result; c++)
if (f != c)
result = result && m[f][c] == m[c][f];
return result;
}
void producto(double a[DIM][DIM], double b[DIM][DIM], double r[DIM][DIM])
{
int f, c, k;
for (f=0; f < DIM; f++)
for (c=0; c < DIM; c++) {
r[f][c] = 0.0;
for (k=0; k < DIM; k++)
r[f][c] += a[f][k] * b[k][c];
}
}
void escalar(double e, double a[DIM][DIM], double r[DIM][DIM])
{
int f, c, k;
for (f=0; f < DIM; f++)
for (c=0; c < DIM; c++)
r[f][c] = e * a[f][c];
}
void mostrar(char *s, double m[DIM][DIM])
{
int f, c, k;
printf("%s = (\n", s);
for (f=0; f < DIM; f++) {
for (c=0; c < DIM; c++)
printf("\t%02.02f", m[f][c]);
printf("\n");
}
printf(")\n");
}