Matrizes são estruturas de dados que armazenam dados em linhas e colunas. A matriz é uma estrutura de dados bidimensional, ou seja, ela possui duas dimensões. A primeira dimensão é a linha e a segunda dimensão é a coluna. A matriz é uma estrutura de dados muito utilizada em algoritmos e estruturas de dados.
Uma das principais aplicações de matrizes é na representação de imagens. Uma imagem é composta por pixels, que são pontos de cor. Cada pixel é representado por uma matriz de 3 posições, onde cada posição representa uma cor. Por exemplo, uma imagem em tons de cinza é representada por uma matriz de 2 dimensões, onde cada posição representa um pixel. Uma imagem colorida é representada por uma matriz de 3 dimensões, onde cada posição representa um pixel.
Podemos representar uma matriz de 3 linhas e 3 colunas da seguinte forma:
int matriz[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};em que, acessamos o elemento da linha 1 e coluna 2 da seguinte forma:
matriz[1][2];A alocação dinâmica é uma técnica utilizada para alocar memória em tempo de execução. A alocação dinâmica é muito utilizada em algoritmos e estruturas de dados, pois permite que o tamanho da estrutura seja definido em tempo de execução.
Para alocar dinamicamente uma matriz de 3 linhas e 3 colunas, podemos fazer da seguinte forma:
int colunas = 3;
int linhas = 3;
int **matriz = (int **) malloc(linhas * sizeof(int *)); // aloca as linhas
for (int i = 0; i < 3; i++) { // aloca as colunas
matriz[i] = (int *) malloc(colunas * sizeof(int));
}Você pode criar uma função para alocar dinamicamente uma matriz.
int **alocaMatriz(int linhas, int colunas) {
int **matriz = (int **) malloc(linhas * sizeof(int *));
for (int i = 0; i < linhas; i++) {
matriz[i] = (int *) malloc(colunas * sizeof(int));
}
return matriz;
}A função acima recebe o número de linhas e o número de colunas da matriz e retorna a matriz alocada dinamicamente.
Para liberar a memória alocada dinamicamente para uma matriz, podemos fazer da seguinte forma:
for (int i = 0; i < 3; i++) { // libera as colunas
free(matriz[i]);
}
free(matriz); // libera as linhasPara passar uma matriz para uma função, devemos passar o número de linhas e o número de colunas da matriz. Por exemplo, para passar uma matriz de 3 linhas e 3 colunas para uma função, podemos fazer da seguinte forma:
void imprimeMatriz(int **matriz, int linhas, int colunas) {
for (int i = 0; i < linhas; i++) {
for (int j = 0; j < colunas; j++) {
printf("%d ", matriz[i][j]);
}
printf("\n");
}
}A função acima recebe uma matriz de inteiros, o número de linhas e o número de colunas da matriz. Em seguida, ela imprime a matriz na tela.
Para somar duas matrizes, devemos percorrer as duas matrizes e somar os elementos de mesma posição. Por exemplo, para somar as matrizes abaixo:
int matriz1[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int matriz2[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};Podemos fazer da seguinte forma:
int matriz3[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
matriz3[i][j] = matriz1[i][j] + matriz2[i][j];
}
}Com alocação dinâmica:
int colunas = 3;
int linhas = 3;
int **matriz1 = (int **) malloc(linhas * sizeof(int *)); // aloca as linhas
for (int i = 0; i < 3; i++) { // aloca as colunas
matriz1[i] = (int *) malloc(colunas * sizeof(int));
}
int **matriz2 = (int **) malloc(linhas * sizeof(int *)); // aloca as linhas
for (int i = 0; i < 3; i++) { // aloca as colunas
matriz2[i] = (int *) malloc(colunas * sizeof(int));
}
int **matriz3 = (int **) malloc(linhas * sizeof(int *)); // aloca as linhas
for (int i = 0; i < 3; i++) { // aloca as colunas
matriz3[i] = (int *) malloc(colunas * sizeof(int));
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
matriz3[i][j] = matriz1[i][j] + matriz2[i][j];
}
}Exemplo 1: Nomes completos
Exemplo 2: Frutas e Preços
Questão 1) Escreva um programa que calcula a soma de duas matrizes MxN, considerando matrizes quadradas. As dimensões deve ser fornecidas pelo o usuário. Use alocação dinâmica e escreva uma função que somará as matrizes; Acesse a resposta
Questão 2) Escreva um programa que aloque dinamicamente uma matriz de inteiros definida pelo o usuário. Em seguida, implemente uma função que receba um valor, retorne 1, caso esteja na matriz ou retorne 0 caso não esteja. Dica: implemente uma função que faz essa verificaçã. Acesse a resposta
