Aula 08 - Estruturas de dados homogêneas III - Matrizes
53 pág.

Aula 08 - Estruturas de dados homogêneas III - Matrizes


DisciplinaLaboratório de Programação153 materiais2.483 seguidores
Pré-visualização3 páginas
Matrizes 
Vetores multidimensionais
DCC 119 \u2013 Algoritmos
2
\ufffd Assim como os vetores, as matrizes são estruturas de 
dados homogêneas. Podem ser construídas dos 
diversos tipos básicos primitivos (real, inteiro, 
caracter).
\ufffd Principal diferença em relação aos vetores 
(unidimensionais): possui uma ou mais dimensões 
adicionais.
\ufffd Maioria dos casos: utiliza-se matrizes bidimensionais.
Estruturas de dados matriciais
3
\ufffd São utilizadas quando os dados homogêneos 
necessitam de uma estruturação com mais de uma 
dimensão.
\ufffd Exemplos:
\ufffd Programar um jogo de xadrez (o tabuleiro é naturalmente 
bidimensional)
\ufffd Estrutura para guardar caracteres de um livro (três 
dimensões: 2 para representar os caracteres de uma página 
e uma terceira para indicar as páginas)
\ufffd Problemas matemáticos matriciais
Matrizes
4
A sintaxe para declaração de uma variável deste tipo é semelhante a 
declaração dos vetores. Considera-se porém a quantidade de 
elementos da outra dimensão:
<tipo_primitivo> <identificador>[qtde_linha][qtde_col];
Exemplo:
inteiro MAT1[3][4];
// matriz 3 linhas e 4 colunas do tipo inteiro
// esta matriz tem 12 elementos
Em C:
int mat[3][4];
Os índices variam de 0 a 2 para as linhas e de 0 a 3 para as colunas 
neste caso. 
Matrizes: declaração
5
Caso geral:
<tipo_primitivo> <identificador>[dim1][dim2]...[dim n];
matriz n-dimensional
Exemplo:
real MAT[3][6][5]; // matriz 3X6X5 do tipo real
// esta matriz tem 90 elementos
Em C:
float mat[3][6][5];
Os índices variam de 0 a 2 para a 1° dimensão, 0 a 5 para a 2° 
dimensão e 0 a 4 para a 3° dimensão
Matrizes: declaração
6
Representação:
Matrizes: declaração
0 1
2
3
0 0 0 1 0 2 0 3 
1 0 1 1 1 2 1 3
2 0 2 1 2 2 2 3
0
1
2
mat[1, 2]
7
A atribuição a um valor na matriz é feito explicitando a posição da
matriz em que o valor deverá ser atribuído.
Exemplo:
real NUM[2][3];
NUM[0][0] \ufffd\ufffd\ufffd\ufffd 3.6;
NUM[0][1] \ufffd\ufffd\ufffd\ufffd 2.7;
NUM[0][2] \ufffd\ufffd\ufffd\ufffd 1.5;
NUM[1][0] \ufffd\ufffd\ufffd\ufffd 5.0;
NUM[1][1] \ufffd\ufffd\ufffd\ufffd 4.1;
NUM[1][2] \ufffd\ufffd\ufffd\ufffd 2.3;
Matrizes: atribuição
8
Os elementos das matrizes são referenciados individualmente por meio de
índices (iniciando de zero) entre colchetes
Exemplos:
mat
Dada a matriz acima tem-se:
A \ufffd\ufffd\ufffd\ufffd MAT[1][2]; 
B \ufffd\ufffd\ufffd\ufffd MAT[0][0]; 
A instrução abaixo atribui um valor ao elemento da linha zero e coluna 
um da matriz MAT:
I\ufffd\ufffd\ufffd\ufffd0; 
J\ufffd\ufffd\ufffd\ufffd1;
MAT[0][1] \ufffd\ufffd\ufffd\ufffd 15; ou MAT[I][J]\ufffd\ufffd\ufffd\ufffd15; 
Matrizes: referência
0
1
2
3 8 5
9 2 1
0 1
9
O programa a seguir, inicializa com zeros os elementos de uma 
matriz inteira N de 5 linhas e 4 colunas e a imprime.
Matrizes: exemplo
//inicializando uma matriz
principal
{
inteiro N[5][4], I, J;
para ( I \ufffd\ufffd\ufffd\ufffd 0; I < 5; I \ufffd\ufffd\ufffd\ufffd I + 1) faça
{
para ( J \ufffd\ufffd\ufffd\ufffd 0; J < 4; J \ufffd\ufffd\ufffd\ufffd J + 1) faça
{
N[I][J] \ufffd\ufffd\ufffd\ufffd 0;
}
}
imprima(\u201cMatriz&quot;);
para ( I \ufffd\ufffd\ufffd\ufffd 0; I < 5; I \ufffd\ufffd\ufffd\ufffd I + 1) faça
{
imprima(\u201cLinha &quot;, I);
para ( J \ufffd\ufffd\ufffd\ufffd 0; J < 4; J \ufffd\ufffd\ufffd\ufffd J + 1) faça
{
imprima(N[I][J]);
}
}
}
Matriz
Linha 0
0 0 0 0
Linha 1
0 0 0 0
Linha 2
0 0 0 0
Linha 3
0 0 0 0 
Linha 4
0 0 0 0 
10
O programa a seguir, inicializa com zeros os elementos de uma 
matriz inteira n de 5 linhas e 4 colunas e imprime.
Matrizes: exemplo em C
//inicializando uma matriz
#include <stdio.h>
int main()
{
int n[5][4], i, j;
for (i=0; i< 5; i++)
for(j=0; j< 4; j++)
n[i][j] = 0;
printf(&quot;%s\n&quot;, &quot;Matriz&quot;);
for (i=0; i < 5; i++)
{
printf(&quot;\nLinha %2d\n&quot;, i);
for(j=0; j < 4; j++)
printf(&quot;%d &quot;,n[i][j]);
} 
return 0;
}
Matriz
Linha 0
0 0 0 0
Linha 1
0 0 0 0
Linha 2
0 0 0 0
Linha 3
0 0 0 0 
Linha 4
0 0 0 0 
11
O programa abaixo inicializa os elementos de uma matriz m com 
os valores iguais a soma dos índices de cada elemento e 
imprime cada valor.
Matrizes: exemplo
i= 0 j= 0 elemento=0
i= 0 j= 1 elemento=1
i= 1 j= 0 elemento=1
i= 1 j= 1 elemento=2
i= 2 j= 0 elemento=2
i= 2 j= 1 elemento=3
//inicializando uma matriz
principal
{
inteiro M[3][2], I, J;
para ( I \ufffd\ufffd\ufffd\ufffd 0; I < 3; I \ufffd\ufffd\ufffd\ufffd I + 1) faça
{
para ( J \ufffd\ufffd\ufffd\ufffd 0; J < 2; J \ufffd\ufffd\ufffd\ufffd J + 1) faça
{
M[I][J] \ufffd\ufffd\ufffd\ufffd I + J;
imprima(\u201ci=\u201d, I, \u201c j=\u201d, J, \u201c elemento=\u201d, M[I][J]);
}
}
}
12
O programa abaixo inicializa os elementos de uma matriz m com 
os valores iguais a soma dos índices de cada elemento e imprime 
cada valor.
Matrizes: exemplo em C
#include <stdio.h>
int main()
{
int m[3][2], i,j;
for (i=0; i < 3; i++)
for(j=0; j < 2; j++)
{ 
m[i][j] = i+j;
printf(\u201ci=%d j=%d elemento=%d\n&quot;,i,j,m[i][j]);
} 
return 0;
}
i= 0 j= 0 elemento=0
i= 0 j= 1 elemento=1
i= 1 j= 0 elemento=1
i= 1 j= 1 elemento=2
i= 2 j= 0 elemento=2
i= 2 j= 1 elemento=3
13
Matrizes e subrotinas
\ufffd Matrizes serão passadas para subrotinas da 
mesma forma como vetores. 
\ufffd O valor das dimensões pode ser informado 
ou omitido. 
Um procedimento para imprimir uma matriz teria a 
seguinte declaração:
imprimeMatriz (real mat[][], inteiro lin, inteiro col)
ou
imprimeMatriz (real mat[3][3], inteiro lin, inteiro col)
14
Matrizes e subrotinas em C
\ufffd A declaração em C segue a mesma regra da 
pseudolinguagem, mas apenas a primeira 
dimensão pode ser omitida.
Ex.:
void imprimeMatriz(float m[][3], int lin, int col)
ou
void imprimeMatriz(float m[3][3], int lin, int col)
\ufffd Havendo mais dimensões, a mesma regra 
deverá ser seguida.
15
Exercício resolvido
\ufffd Criar uma função que receba uma matriz
2 x 3 de números reais e retorne a média 
dos valores da matriz. Crie uma função 
principal que chame a subrotina e imprima 
a média. 
\ufffd Solução:
\ufffd Todos os valores da matriz serão acumulados 
em uma variável real. A função retornará o 
valor dessa variável dividido pelo número de 
elementos de matriz.
16
Solução proposta em pseudolinguagem
real mediaMatriz( real m[2][3] )
{
inteiro i, j;
real media \ufffd\ufffd\ufffd\ufffd 0;
para ( i \ufffd\ufffd\ufffd\ufffd 0; i < 2; i \ufffd\ufffd\ufffd\ufffd i + 1) faça
{
para (j \ufffd\ufffd\ufffd\ufffd 0; j < 3; j \ufffd\ufffd\ufffd\ufffd j + 1) faça
{
media \ufffd\ufffd\ufffd\ufffd media + m[i][j];
}
}
retorne media/6.0;
}
principal
{
real mat[2][3] \ufffd\ufffd\ufffd\ufffd {{3.4,5.6,4.0},{2.0,1.1,4.9}};
real media \ufffd\ufffd\ufffd\ufffd mediaMatriz(mat);
imprima (&quot;A media da matriz foi &quot;, media);
}
17
Teste de mesa
real mediaMatriz( real m[2][3] )
{
inteiro i, j;
real media \ufffd\ufffd\ufffd\ufffd 0;
para ( i \ufffd\ufffd\ufffd\ufffd 0; i < 2; i \ufffd\ufffd\ufffd\ufffd i + 1) faça
{
para (j \ufffd\ufffd\ufffd\ufffd 0; j < 3; j \ufffd\ufffd\ufffd\ufffd j + 1) faça
{
media \ufffd\ufffd\ufffd\ufffd media + m[i][j];
}
}
retorne media/6.0;
}
principal
{
real mat[2][3] \ufffd\ufffd\ufffd\ufffd {{3.4,5.6,4.0},{2.0,1.1,4.9}};
real media \ufffd\ufffd\ufffd\ufffd mediaMatriz(mat);
imprima (&quot;A media da matriz foi &quot;, media);
}
Algoritmo começa na 
função principal
18
Teste de mesa
real mediaMatriz( real m[2][3] )
{
inteiro i, j;
real media \ufffd\ufffd\ufffd\ufffd 0;
para ( i \ufffd\ufffd\ufffd\ufffd 0; i < 2; i \ufffd\ufffd\ufffd\ufffd i + 1) faça
{
para (j \ufffd\ufffd\ufffd\ufffd 0; j < 3; j \ufffd\ufffd\ufffd\ufffd j + 1) faça
{
media \ufffd\ufffd\ufffd\ufffd media + m[i][j];
}
}
retorne media/6.0;
}
principal
{
real mat[2][3] \ufffd\ufffd\ufffd\ufffd {{3.4,5.6,4.0},{2.0,1.1,4.9}};
real media \ufffd\ufffd\ufffd\ufffd mediaMatriz(mat);
imprima (&quot;A media da matriz foi &quot;, media);
}
4.91.12.0
4.05.63.4
Matriz de números 
reais é inicializada
19
Teste de mesa
real mediaMatriz( real m[2][3] )
{
inteiro i, j;
real media \ufffd\ufffd\ufffd\ufffd 0;
para ( i \ufffd\ufffd\ufffd\ufffd 0; i < 2; i \ufffd\ufffd\ufffd\ufffd i + 1) faça
{
para (j \ufffd\ufffd\ufffd\ufffd 0; j < 3; j \ufffd\ufffd\ufffd\ufffd j + 1) faça
{
media \ufffd\ufffd\ufffd\ufffd media + m[i][j];
}
}
retorne media/6.0;
}
principal
{
real mat[2][3] \ufffd\ufffd\ufffd\ufffd {{3.4,5.6,4.0},{2.0,1.1,4.9}};
real media \ufffd\ufffd\ufffd\ufffd mediaMatriz(mat);
imprima (&quot;A media da matriz foi &quot;, media);
}
4.91.12.0
4.05.63.4
Chama função que 
calcula média
20
Teste de mesa
real mediaMatriz( real m[2][3] )
{
inteiro i, j;
real media \ufffd\ufffd\ufffd\ufffd 0;
para ( i \ufffd\ufffd\ufffd\ufffd 0; i < 2; i \ufffd\ufffd\ufffd\ufffd i + 1) faça
{
para (j \ufffd\ufffd\ufffd\ufffd 0; j < 3; j \ufffd\ufffd\ufffd\ufffd j + 1) faça
{
media \ufffd\ufffd\ufffd\ufffd media + m[i][j];
}
}
retorne media/6.0;
}
principal
{
real mat[2][3] \ufffd\ufffd\ufffd\ufffd {{3.4,5.6,4.0},{2.0,1.1,4.9}};
real media \ufffd\ufffd\ufffd\ufffd mediaMatriz(mat);
imprima (&quot;A media da matriz foi &quot;, media);
}
4.91.12.0
4.05.63.4
Matriz é passada por 
parâmetro
21
Teste de mesa
real mediaMatriz( real m[2][3] )
{
inteiro i, j;
real media \ufffd\ufffd\ufffd\ufffd 0;
para ( i \ufffd\ufffd\ufffd\ufffd 0; i < 2; i \ufffd\ufffd\ufffd\ufffd i + 1) faça
{
para (j \ufffd\ufffd\ufffd\ufffd 0; j < 3; j \ufffd\ufffd\ufffd\ufffd j + 1) faça
{
media \ufffd\ufffd\ufffd\ufffd media + m[i][j];