#include #define MAX 10 typedef struct matriz{ int n_lin; int n_col; float m[MAX][MAX]; } matriz; void soma(matriz *C, matriz *A, matriz *B); void subtrai(matriz *C, matriz *A, matriz *B); void multiplica(matriz *C, matriz *A, matriz *B); void mostra(matriz *A); int main() { int i, j; matriz A = {3, 3, {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} }; matriz B = {3, 4, {{1, 2, 3, 4}, {5, 6, 7, 8}, {9,10,11,12}} }; matriz C = {3, 3}; matriz D = {3, 4}; soma(&C, &A, &A); mostra(&C); subtrai(&C, &A, &A); mostra(&C); multiplica(&D, &A, &B); mostra(&D); return 0; } // Obs A->n_lin é outra forma de escrever (*A).n_lin, por exemplo void mostra(matriz *A) { int i, j; for (i = 0; i < A->n_lin; ++i) { for (j = 0; j < A->n_col; ++j) printf("%5.1f ", A->m[i][j]); printf("\n"); } printf("\n"); } void soma(matriz *C, matriz *A, matriz *B) { int i, j; if (A->n_lin == B->n_lin && A->n_lin == C->n_lin && A->n_col == B->n_col && A->n_col == C->n_col) for (i = 0; i < C->n_lin; ++i) for (j = 0; j < C->n_col; ++j) C->m[i][j] = A->m[i][j] + B->m[i][j]; } void subtrai(matriz *C, matriz *A, matriz *B) { int i, j; if (A->n_lin == B->n_lin && A->n_lin == C->n_lin && A->n_col == B->n_col && A->n_col == C->n_col) for (i = 0; i < C->n_lin; ++i) for (j = 0; j < C->n_col; ++j) C->m[i][j] = A->m[i][j] - B->m[i][j]; } void multiplica(matriz *C, matriz *A, matriz *B) { int i, j, k; if (C->n_lin == A->n_lin && C->n_col == B->n_col && A->n_col == B->n_lin) for (i = 0; i < A->n_lin; ++i) for (j = 0; j < B->n_col; ++j) { C->m[i][j] = 0; for (k = 0; k < A->n_col; ++k) C->m[i][j] += A->m[i][k] * B->m[k][j]; } }