Buscar

Matrizes em C, Multiplicação Matrizes, Diagonal Principal, Media dos Vizinhos

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

main.cpp
/* 
 * File: main.cpp
 * Author: joao
 * 
 * a- Escreva uma função que recebe como parâmetros uma matriz real Anxm, 
 * e uma posição (i,j) da matriz, e calcula a média aritmética dos vizinhos de (i,j), 
 * ou seja, a média entre A[i-1][j], A[i+1][j], A[i][j-1] e A[i][j+1]. 
 * Desconsidere os vizinhos que não pertencem a matriz (por exemplo, os vizinhos de (0,0) 
 * são somente (0,1) e (1,0)).
 * b- Escreva uma função que recebe como parâmetro uma matriz real Anxm e devolve uma matriz Amédia, 
 * onde Amédia[i][j] é a média aritmética dos vizinhos de (i,j). Para isto, utilize a função do item anterior.
 */
#include <stdlib.h>
#include <stdio.h>
#include<math.h>
#include<time.h>
#define M 10
#define N 10
using namespace std;
//----------------------------------
void preencheMatriz(int mat[M][N], int m, int n) {
 int randon;
 for (int i = 0; i < m; i++) {
 for (int k = 0; k < n; k++) {
 mat[i][k] = (rand() % ((5 - 1) + 1)) + 1;
 }
 }
}
int mediaDosVizinhos(int mat[M][N], int m, int n, int i, int j) {
 int cont = 0, soma = 0;
 // Soma o valor da posição à esquerda
 if ((j - 1) >= 0) {
 cont += 1;
 soma += mat[i][j - 1];
 }
 // Soma o valor da posição à direita
 if ((j + 1) < n) {
 cont += 1;
 soma += mat[i][j + 1];
 }
 // Soma o valor da posição acima
 if ((i - 1) >= 0) {
 cont += 1;
 soma += mat[i - 1][j];
 }
 // Soma o valor da posição abaixo
 if ((i + 1) < m) {
 cont += 1;
 soma += mat[i + 1][j];
 }
 return soma / cont;
}
void diagonalPrincipal(int mat[M][N], int m, int n, int vet[10]) {
 int k = 0;
 for (int i = 0; i < m; i++) {
 for (int j = 0; j < n; j++) {
 if (i == j) {
 vet[k++] = mat[i][j];
 }
 }
 }
}
void multiplica(int matA[M][N], int matB[M][N], int matC[M][N], int m, int n) {
 int soma = 0;
 for (int i = 0; i < m; i++) {
 for (int j = 0; j < n; j++) {
 soma = 0;
 for (int k = 0; k < n; k++) {
 soma += matA[i][k] * matB[k][j];
 }
 matC[i][j] = soma;
 }
 }
}
void matrizMedia(int matA[M][N], int matB[M][N], int m, int n) {
 for (int i = 0; i < m; i++) {
 for (int j = 0; j < n; j++) {
 matB[i][j] = mediaDosVizinhos(matA, m, n, i, j);
 }
 }
}
void transporMatriz(int mat[M][N], int vet[M*N], int m, int n) {
 int k = 0;
 for (int i = 0; i < m; i++)
 for (int j = 0; j < n; j++) {
 vet[k++] = mat[i][j];
 }
}
void exibeMatriz(int mat[M][N], int m, int n) {
 printf("\nMatriz\n");
 for (int i = 0; i < m; i++) {
 printf("\n");
 for (int j = 0; j < n; j++) {
 printf("[%4d] ", mat[i][j]);
 }
 }
 printf("\n");
}
int main(int argc, char** argv) {
 int cont = 0, m = 4, n = 4;
 int matriz[10][10], matB[10][10], matC[10][10];
 int vet[10];
 preencheMatriz(matriz, m, n);
 exibeMatriz(matriz, m, n);
 multiplica(matriz, matriz, matC, m, n);
 exibeMatriz(matC, m, n);
 matrizMedia(matC, matB, m, n);
 exibeMatriz(matB, m, n);
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais