Skip to content

Instantly share code, notes, and snippets.

@arthurxavierx
Created May 23, 2013 01:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arthurxavierx/5632265 to your computer and use it in GitHub Desktop.
Save arthurxavierx/5632265 to your computer and use it in GitHub Desktop.
Lista de exercícios 7 - Matriz
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define SIZE 3
float media_matriz(int n, float a[][SIZE]) {
float m = 0.0f;
size_t i;
for(i = 0; i < n*SIZE; i++)
m += a[i/SIZE][i%SIZE];
return m / (n*SIZE);
}
void identidade(int n, float a[][SIZE]) {
size_t i;
for(i = 0; i < n*SIZE; i++)
a[i/SIZE][i%SIZE] = 0;
for(i = 0; i < SIZE; i++)
a[i][i] = 1;
}
void transposta(int n, float a[][SIZE], float t[][SIZE]) {
size_t i;
for(i = 0; i < n*SIZE; i++)
t[i/SIZE][i%SIZE] = a[i%SIZE][i/SIZE];
}
bool simetrica(int n, float a[][SIZE]) {
bool s = true;
size_t i;
for(i = 0; i < n*SIZE; i++)
s &= (a[i/SIZE][i%SIZE] == a[i%SIZE][i/SIZE]);
return s;
}
void soma_matriz(int n, float a[][SIZE], float b[][SIZE], float s[][SIZE]) {
size_t i;
for(i = 0; i < n*SIZE; i++)
s[i/SIZE][i%SIZE] = a[i/SIZE][i%SIZE] + b[i/SIZE][i%SIZE];
}
void mult_matriz(int n, float a[][SIZE], float b[][SIZE], float p[][SIZE]) {
size_t i, j;
for(i = 0; i < n*SIZE; i++) {
p[i/SIZE][i%SIZE] = 0;
for(j = 0; j < SIZE; j++) {
p[i/SIZE][i%SIZE] += a[i/SIZE][j] * b[j][i%SIZE];
}
}
}
void imprime_matriz(int n, float a[][SIZE]) {
size_t i, j;
printf("[\n");
for(i = 0; i < n; i++) {
printf(" [");
for(j = 0; j < SIZE; j++)
printf("%f, ", a[i][j]);
printf("\b\b]\n");
}
printf("]\n");
}
int main() {
float m[SIZE][SIZE], m2[SIZE][SIZE], t[SIZE][SIZE];
size_t i;
for(i = 0; i < SIZE*SIZE; i++) {
printf("[%lu][%lu] = ", i / SIZE, i % SIZE);
scanf("%f", m[i/SIZE] + i%SIZE);
}
printf("\n");
for(i = 0; i < SIZE*SIZE; i++) {
printf("[%lu][%lu] = ", i / SIZE, i % SIZE);
scanf("%f", m2[i/SIZE] + i%SIZE);
}
printf("\n");
imprime_matriz(SIZE, m);
imprime_matriz(SIZE, m2);
printf("\nMedia: %f\n", media_matriz(SIZE, m));
printf("Simetrica: %1i\n", simetrica(SIZE, m));
printf("\nTransposta: \n");
transposta(SIZE, m, t);
imprime_matriz(SIZE, t);
printf("\nSoma: \n");
soma_matriz(SIZE, m, m2, t);
imprime_matriz(SIZE, t);
printf("\nProduto: \n");
mult_matriz(SIZE, m, m2, t);
imprime_matriz(SIZE, t);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment