Você está na página 1de 21

Estrutura de Dados Homogêneas do tipo

matriz(Operações básicas)

Apresentação
A programação de computadores é uma tarefa de extrema importância na atualidade. Ao olhar para
todos os lados poderemos ver exemplos de computadores, Smartphones e outros dispositivos os
quais operam utilizando algum tipo de software. E é justamente por programas de computadores
serem tão comuns e tão importantes, que a programação precisa evoluir e estar preparada para
suportar a cada dia mais informações e dos mais variados tipos. Uma forma muito comum de
armazenar informações em programas de computadores é fazendo uso de variáveis. Contudo, uma
variável é um espaço na memória do computador que pode armazenar apenas um valor, sendo que,
quando outro valor é inserido o anterior é perdido. Além destas variáveis faz-se uso de estruturas
de dados. Estas estruturas permitem armazenar diversos valores ao mesmo tempo, na memória do
computador. Dentre as estruturas de dados mais populares encontram-se as matrizes. Estas
matrizes são também chamadas de Estrutura de Dados Homogêneas bidimensionais, porque
trabalham considerando sempre linha e coluna (assemelhando-se a uma tabela).

Nesta Unidade de Aprendizagem, você irá aprender como criar, manipular e resolver problemas
fazendo uso de matrizes.

Bons estudos.

Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:

• Resolver problemas utilizando as funções básicas de manipulação de matrizes, como


inicialização com leitura de dados do teclado e apresentação dos elementos na tela.
• Resolver problemas de somatório dos elementos da matriz, identificar o maior e o menor
elemento da matriz, calcular a média dos elementos da matriz.
• Resolver problemas reais com o uso de matrizes.
Infográfico
Conteúdo do livro
Para trabalhar com matrizes você precisa entender primeiramente que estas podem ser arranjos
com mais dimensões. Isto é muito útil, principalmente para você conseguir identificar de forma
eficiente quando precisa utilizar uma matriz. Além disso, para fixar melhor os conceitos aprendidos,
nada como ter acesso a exemplos práticos de aplicação deste conteúdo. No trecho disponibilizado
do livro "Algoritmos e Programação" você verá a aplicação de matrizes. Inicie sua leitura pelo tópico
7.3: Matrizes com mais de duas dimensões na página 200 e atente para o tópico 7.5 sobre matrizes
em Pascal, na página 209.
23
série livros didáticos informática ufrgs

algoritmos
e programação
com exemplos em Pascal e C

nina edelweiss
maria aparecida castro livi
as autoras
Nina Edelweiss é engenheira eletricista e doutora em Ciência da Computação pela Uni-
versidade Federal do Rio Grande do Sul. Durante muitos anos, lecionou em cursos de Enge-
nharia e de Ciência da Computação na UFRGS, na UFSC e na PUCRS. Foi, ainda, orientadora
do Programa de Pós-Graduação em Ciência da Computação da UFRGS. É coautora de três
livros, tendo publicado diversos artigos em periódicos e em anais de congressos nacionais
e internacionais. Participou de diversos projetos de pesquisa financiados por agências de
fomento como CNPq e FAPERGS, desenvolvendo pesquisas nas áreas de bancos de dados e
desenvolvimento de software.
Maria Aparecida Castro Livi é licenciada e bacharel em Letras, e mestre em Ciência da
Computação pela Universidade Federal do Rio Grande do Sul. Desenvolveu sua carreira pro-
fissional na UFRGS, onde foi programadora e analista de sistema, antes de ingressar na
carreira docente. Ministrou por vários anos a disciplina de Algoritmos e Programação para
alunos dos cursos de Engenharia da Computação e Ciência da Computação. Sua área de
interesse prioritário é o ensino de Linguagens de Programação, tanto de forma presencial
quanto a distância.

E22a Edelweiss, Nina.


Algoritmos e programação com exemplos em Pascal e C
[recurso eletrônico] / Nina Edelweiss, Maria Aparecida Castro
Livi. – Dados eletrônicos. – Porto Alegre : Bookman, 2014.

Editado também como livro impresso em 2014.


ISBN 978-85-8260-190-7

1. Informática. 2. Algoritmos – Programação. I. Livi,


Maria Aparecida Castro. II. Título.

CDU 004.421

Catalogação na publicação: Ana Paula M. Magnus – CRB 10/2052


200 Algoritmos e Programação com Exemplos em Pascal e C

e Somatório dos elementos da diagonal secundária. Observar que, a partir do índice da


linha, é possível calcular o índice da coluna, o que, mais uma vez, permite resolver o pro-
blema usando apenas uma variável como índice:
soma ← 0
para i de 1 incr 1 até MAX faça
soma ← soma + tabela[i,((MAX – i) + 1)]
escrever('Somatório elementos da diagonal secundária = ', soma)
f Somatório de todos os elementos à esquerda da diagonal secundária:
soma ← 0
para i de 1 incr 1 até MAX faça
para j de 1 incr 1 até MAX faça
se j < (MAX – i)
então soma ← soma + tabela[i,j]
escrever
('Somatório dos elementos à esquerda da diagonal secundária = ',
soma)
g Geração de dois vetores, um com o somatório das linhas (som_lin[MAX]) e o outro com
o das colunas (som_col[MAX]):
para i de 1 incr 1 até MAX faça {INICIALIZA VETORES EM ZERO}
início
som_lin[i] ← 0
som_col[i] ← 0
fim
para i de 1 incr 1 até MAX faça
para j de 1 incr 1 até MAX faça
início
som_lin[i] ← som_lin[i] + tabela[i,j]
som_col[j] ← som_col[j] + tabela[i,j]
fim

7.3 matrizes com mais de duas dimensões


Estendendo um pouco mais o exemplo apresentado no início deste capítulo, o que se faria
para armazenar as notas de todos os alunos de mais de uma turma em uma única matriz?
Supondo que há 2 turmas, cada turma com 7 alunos, com 6 notas por aluno, a declaração da
matriz para armazenar os dados correspondentes seria a seguinte:
notas_turma (arranjo [1..2, 1..7, 1..6] de real)
As três dimensões são, na ordem em que foi feita a declaração: as turmas, os alunos e, fi-
nalmente, as notas. A Figura 7.3 mostra a representação espacial da matriz tridimensional
notas.
Capítulo 7 Variáveis Estruturadas: Arranjos Multidimensionais 201

2
notas_turma
1
1 2 3 4 5 6
a
rm 1
tu
aluno nota 2

6 7,5

notas_turma[1,6,4] é a 4ª nota do 6º aluno da 1ª turma

figura 7.3 Matriz tridimensional para notas.

Observa-se, nesse exemplo, que para acessar uma determinada nota é necessário, além do
nome da matriz, três informações adicionais que permitam identificar o elemento em cada
uma das dimensões, ou seja, um índice para cada uma das três dimensões. Por exemplo, o
elemento assinalado na Figura 7.3 requer, para sua identificação, os índices 1, 6 e 4.
Outro problema exige que se armazene, ao longo de 12 meses, a quantidade de itens de um
total de 30 produtos que estão dispostos em 10 lojas, cada qual com 5 setores. A matriz para
resolver esse problema possuirá quatro dimensões e armazenará a quantidade de itens de
cada produto vendido em cada mês, por setor e por loja.
A declaração dessa matriz de quatro dimensões é a seguinte:
numitens (arranjo [1..10, 1..5, 1..30, 1..12] de inteiro)
As quatro dimensões são, nesta ordem: a loja, o setor, o produto e, finalmente, o mês.
Matrizes multidimensionais podem ter duas ou mais dimensões, embora a grande maioria
dos problemas não envolva mais do que três ou quatro. O número de dimensões de uma ma-
triz deverá ser definido em função das necessidades do problema que está sendo analisado e
das limitações eventuais da linguagem em uso. Isso porque, embora teoricamente não exista
limitação para o número de dimensões de uma matriz, uma implementação particular de
uma linguagem pode definir um limite para esse número.
202 Algoritmos e Programação com Exemplos em Pascal e C

7.4 exercícios de fixação


exercício 7.1 Uma matriz esparsa é uma matriz que tem aproximadamente dois terços de
seus elementos iguais a zero. Escrever um programa que leia uma matriz esparsa M de 10x10
e que forme uma matriz condensada, de apenas 3 colunas, com os elementos não nulos da
matriz original, de forma que, em cada linha:
a a primeira coluna contenha um valor não nulo de M;
b a segunda coluna contenha o índice da linha de M onde foi encontrado esse valor;
c a terceira coluna contenha o índice da coluna de M onde foi encontrado esse valor.

Escrever a matriz original e a matriz condensada em formato matricial.


Observar que a matriz condensada é declarada com um número de linhas igual ao número
de elementos da matriz esparsa, para que não haja risco de faltar espaço de armazenamento
durante o processamento.
Algoritmo MatrizEsparsa
{GERAÇÃO DE UMA MATRIZ CONDENSADA A PARTIR DE UMA MATRIZ ESPARSA}
Constante: MAX = 3
Entradas: esparsa (arranjo [1..MAX, 1..MAX] de inteiro)
{MATRIZ ESPARSA}
Saída: condens (arranjo [1..(MAX*MAX), 1..3] de inteiro)
{MATRIZ CONDENSADA}
Variáveis auxiliares:
i, j (inteiro) {ÍNDICES}
cont (inteiro) {CONTADOR}
início
{PREENCHIMENTO DA MATRIZ ESPARSA POR LEITURA}
para i de 1 incr 1 até MAX faça
para j de 1 incr 1 até MAX faça
ler (esparsa[i,j])
{IMPRIME MATRIZ ESPARSA}
para i de 1 incr 1 até MAX faça
início
para j de 1 incr 1 até MAX faça
escrever (esparsa[i,j])
{POSICIONAR EM NOVA LINHA}
fim
{CRIAÇÃO DA MATRIZ CONDENSADA}
cont ← 0
para i de 1 incr 1 até MAX faça
para j de 1 incr 1 até MAX faça
se esparsa[i,j] ≠ 0 {SE VALOR NÃO FOR NULO}
Capítulo 7 Variáveis Estruturadas: Arranjos Multidimensionais 203

então início
cont ← cont + 1
condens[cont,1] ← esparsa[i,j] {VALOR NÃO NULO}
condens[cont,2] ← i {LINHA DO VALOR NÃO NULO}
condens[cont,3] ← j {COLUNA DO VALOR NÃO NULO}
fim
{IMPRESSÃO DA MATRIZ CONDENSADA, CASO EXISTA}
se cont < 1
então escrever('Matriz não possui elemento não nulo')
senão para i de 1 incr 1 até cont faça
escrever(condens[i,1],condens[i,2],condens[i,3])
fim
exercício 7.2 Processar a população da capital e dos 10 outros municípios mais populo-
sos dos 26 estados brasileiros, armazenando esses dados em uma matriz bidimensional.
Determinar:
■ a média da população das capitais;
■ o município mais populoso (excetuando capitais) e em que estado se encontra;
■ os municípios que têm população maior que a média da população das capitais.
Passos básicos para solução:
1. leitura dos dados de população das capitais e municípios mais populosos;
2. cálculo e apresentação da média da população das capitais;
3. determinação e apresentação do município mais populoso e em que estado se encontra;
4. determinação e apresentação dos municípios que têm população maior que a média da
população das capitais.
Observar que nesse problema, assim como em vários outros, a ordem de um ou mais passos
pode ser alterada sem afetar a correção dos resultados. Por exemplo, o passo 3, poderia ser
realizado como passo 2, ou 4. Igualmente, o passo 4 poderia ser realizado como passo 3. No
entanto, o passo 1 deverá preceder todos os demais passos, e o passo 4 só poderá ser reali-
zado após o passo 2. Então, ao projetar uma solução para um problema, é importante verifi-
car se ela respeita as dependências existentes entre as várias atividades a serem realizadas, de
forma a atingir com correção os resultados desejados.
Algoritmo ProcPopulEst
{PROCESSA DADOS DE POPULAÇÃO DAS CAPITAIS E MUNICÍPIOS MAIS POPULOSOS
DOS 26 ESTADOS BRASILEIROS}
Constantes:
MAX_EST = 26
MAX_MUNIC = 11
Entradas: tabpop (arranjo [1.. MAX_EST, 1.. MAX_MUNIC] de inteiro)
Saídas: mediapopcap (real)
estadomaior, municipiomaior (inteiro)
204 Algoritmos e Programação com Exemplos em Pascal e C

Variáveis auxiliares:
i, j (inteiro) {ÍNDICES}
somapopcap (inteiro) {SOMATÓRIO POPULAÇÃO CAPITAIS}
primeiravez (inteiro) {CONTROLA APRESENTAÇÃO DE CABEÇALHO}
maior (inteiro) {AUXILIA DETERMINAÇÃO MUNICÍPIO MAIS POPULOSO}
início
{LEITURA DOS DADOS DE POPULAÇÃO}
para i de 1 incr 1 até MAX_EST faça
início
escrever('Estado', i)
para j de 1 incr 1 até MAX_MUNIC faça
se j = 1 {DADOS DE CAPITAIS NA COLUNA 1}
então repita
início
escrever('População da capital')
ler (tabpop[i,j])
fim
até tabpop[i,j] > 0
senão repita
início
escrever('População do município', j)
ler (tabpop[i,j])
fim
até tabpop[i,j] > 0
fim
{CÁLCULO DA MÉDIA DA POPULAÇÃO DAS CAPITAIS}
somapopcap ← 0
para i de 1 incr 1 até MAX_EST faça
somapopcap ← somapopcap + tabpop[i, 1]
mediapopcap ← somapopcap / MAX_EST
escrever ('Média de população das capitais: ', mediapopcap)
{DETERMINAÇÃO DO MUNICÍPIO MAIS POPULOSO E EM QUE ESTADO
SE ENCONTRA}
maior ← tabpop[1,2] {COLUNA 2 EM DIANTE: MUNICÍPIOS NÃO CAPITAIS}
estadomaior ← 1
municipiomaior ← 2
para i de 1 incr 1 até MAX_EST faça
para j de 2 incr 1 até MAX_MUNIC faça
se tabpop[i, j] > maior
então início
maior ← tabpop[i, j]
estadomaior ← i
municipiomaior ← j
Capítulo 7 Variáveis Estruturadas: Arranjos Multidimensionais 205

fim
escrever ('O município mais populoso é o ' , municipiomaior – 1,
'do estado , estadomaior , 'com ', maior, 'habitantes');
{DETERMINAÇÃO E APRESENTAÇÃO DOS MUNICÍPIOS QUE TÊM POPULAÇÃO
MAIOR QUE A MÉDIA DA POPULAÇÃO DAS CAPITAIS}
primeiravez ← 1
para i de 1 incr 1 até MAX_EST faça
para j de 2 incr 1 até MAX_MUNIC faça
se tabpop[i, j] > mediapopcap
então início
se primeiravez = 1 {CABEÇALHO SÓ QUANDO FOR ESCREVER}
então início
escrever ('Municípios com população > do que ',
'população média das capitais')
primeiravez ← 0
fim
escrever('Município : ', j – 1, ' do Estado: ',
i, 'População: ', tabpop[i,j])
fim
se primeiravez = 1
então início
escrever ('Nenhum dos municípios mais populosos tem ',
'população superior à media da população das capitais. ')
fim
fim
exercício 7.3 Fazer um programa para registrar os acidentes de trânsito que acontecem na
ilha de Manhattan, na cidade de Nova York, e emitir um relatório com as 8 intersecções mais
perigosas. As ruas e avenidas da região devem ser representadas por uma matriz. As linhas na
matriz correspondem às avenidas, da Primeira à Décima (1 a 10, e as colunas correspondem
às ruas, da 30 à 58 (30 a 58). Em cada posição da matriz, deve ser registrado o número de
acidentes ocorridos, no período em processamento, nas proximidades do cruzamento corres-
pondente.
Considerar que um número desconhecido de dados de acidentes será lido. Definir uma marca
de parada para sinalizar o final da entrada de dados. O número de acidentes de um cruza-
mento deverá ser fornecido seguido de um par de números que descrevem sua localização.
Por exemplo, os valores 7, 5 e 54 significam 7 acidentes ocorridos nas vizinhanças da Quinta
Avenida com a Rua 54. Os valores lidos devem ser verificados quanto à sua correção e apenas
valores válidos devem ser aceitos.
estratégia de solução adotada: classificar os dados da matriz de acidentes e, depois, apre-
sentar os dados das intersecções desejadas. Para classificar os dados da matriz de acidentes,
gerar, a partir dessa matriz, a sua correspondente matriz condensada (Exercício de Fixação
206 Algoritmos e Programação com Exemplos em Pascal e C

7.1) que contenha apenas as intersecções com pelo menos um acidente. A classificação dos
dados acontecerá na matriz condensada. Essa solução exige um processamento elaborado
(geração da matriz condensada e classificação), mas é extremamente interessante, já que
pode atender inclusive outras solicitações, como, por exemplo, apresentação das intersecções
com menor número de acidentes, etc.).
Algoritmo AcidentesNovaYork
{PROCESSA ACIDENTES OCORRIDOS NA ILHA DE MANHATTAN}
Constantes:
MAXAVENIDAS = 10
MINRUAS = 30
MAXRUAS = 58
INTERSECPERIGO = 8
IND_AJUST = 29 {VALOR DE AJUSTE DO ÍNDICE DE RUAS}
Tipos:
mat = arranjo [1..MAXAVENIDAS, 1..((MAXRUAS – MINRUAS)+1)]
de inteiro
mat_condens = arranjo[1..MAXAVENIDAS *((MAXRUAS – MINRUAS) + 1),
1..3] de inteiro
Entradas: matriz (mat)
Saída: dados das intersecções mais perigosas ou mensagem
Variáveis auxiliares:
avenida, rua (inteiro)
{ÍNDICES}
linha, m, k (inteiro) {VARIÁVEIS GERAÇÃO DA MATRIZ CONDENSADA}
cont_com_acidentes (inteiro) {CONTADOR CRUZAMENTO COM ACIDENTES}
trocou (lógica)
aux1, aux2, aux3 (inteiro) {AUXILIARES DE CLASSIFICAÇÃO}
matriz_condensada (mat_condens)
início
{INICIALIZAÇÃO DA MATRIZ COM ZEROS}
para avenida de 1 incr 1 até MAXAVENIDAS faça
para rua de 1 incr 1 até MAXRUAS faça
matriz[avenida, rua] = 0
{PREENCHIMENTO DA MATRIZ COM OS ACIDENTES}
repita
início
escrever('Avenida de 1 a ', MAXAVENIDAS, 'ou -1 para parar: ')
ler (avenida)
se (avenida ≤ 0 ou avenida > MAXAVENIDAS) e avenida ≠ -1
então escrever('Avenida inválida')
fim
até (avenida > 0 e avenida ≤ MAXAVENIDAS) ou (avenida = −1)
Capítulo 7 Variáveis Estruturadas: Arranjos Multidimensionais 207

enquanto avenida ≠ −1 faça {MARCA DE PARADA: AVENIDA = -1}


início
repita
início
escrever('Rua de ', MINRUAS, ' a ', MAXRUAS)
ler (rua)
se rua < MINRUAS ou rua > MAXRUAS
então escrever('Rua inválida')
fim
até rua ≥ MINRUAS e rua ≤ MAXRUAS
repita
início
escrever ('Acidentes do cruzamento da avenida ',
avenida, ' com a rua ', rua, ':')
ler (matriz[avenida, rua – IND_AJUST])
se matriz[avenida, rua – IND_AJUST] ≤ 0
então escrever('Número de acidentes inválido')
fim
até matriz[avenida, rua – IND_AJUST] > 0
repita
início
escrever('Avenida de 1 a ', MAXAVENIDAS, ' ou -1 para parar')
ler (avenida)
se (avenida ≤ 0 ou avenida > MAXAVENIDAS) e avenida ≠ -1
então escrever('Avenida inválida')
fim
até (avenida > 0 e avenida ≤ MAXAVENIDAS) e (avenida ≠ −1)
fim
{GERAÇÃO DA MATRIZ CONDENSADA}
linha ← 0
para i de 1 incr 1 até MAXAVENIDAS faça
para j de 1 até MAXRUAS – IND_AJUST faça
se matriz[i , j] > 0
então início
linha ← linha + 1
cont_com_acidentes ← cont_com_acidentes + 1
matriz_condensada[linha, 1] ← matriz[i , j]
matriz_condensada[linha, 2] ← i
matriz_condensada[linha, 3] ← j + IND_AJUST
fim
escrever('Cruzamentos com acidentes: ')
escrever('Avenida Rua Acidentes')
para i de 1 incr 1 até linha faça
208 Algoritmos e Programação com Exemplos em Pascal e C

escrever(matriz_condensada[i , 1], matriz_condensada[i , 2],


matriz_condensada[i , 3])
{CLASSIFICAÇÃO DA MATRIZ CONDENSADA}
trocou ← verdadeiro
m ← linha – 1
k ← 1
enquanto trocou faça
início
trocou ← falso
para i de 1 incr 1 até m faça
se matriz_condensada[i, 1] < matriz_condensada[i+1, 1]
então início
aux1 ← matriz_condensada[i, 1]
aux2 ← matriz_condensada[i, 2]
aux3 ← matriz_condensada[i, 3]
matriz_condensada[i, 1] ← matriz_condensada[i+1, 1]
matriz_condensada[i, 2] ← matriz_condensada[i+1, 2]
matriz_condensada[i, 3] ← matriz_condensada[i+1, 3]
matriz_condensada[i+1, 1] ← aux1
matriz_condensada[i+1, 2] ← aux2
matriz_condensada[i+1, 3] ← aux3
k ← i
trocou ← verdadeiro
fim
m ← k
fim
{APRESENTAÇÃO DOS RESULTADOS}
se cont_com_acidentes > 0
então início
i ← 1
repita
início
escrever('Intersecção perigosa: ', i)
escrever (' avenida ', matriz_condensada[i, 2] )
escrever (' rua ', matriz_condensada[i, 3])
escrever (' acidentes ', matriz_condensada[i, 1])
i ←i + 1
fim
até i > linha ou i > INTERSECPERIGO
se linha < INTERSECPERIGO
então escrever('Não há mais intersecções com acidentes!')
fim
Capítulo 7 Variáveis Estruturadas: Arranjos Multidimensionais 209

senão escrever('Nenhum acidente informado!')


fim
outra estratégia possível de solução: percorrer sucessivas vezes a matriz original. A cada
varredura da matriz, fazer a determinação de uma intersecção mais perigosa. Apresentar este
valor e, em seguida, substituí-lo na matriz por um valor inválido (-1, por exemplo), para que
não seja mais considerado nas varreduras subsequentes. O processo encerra-se ou pela apre-
sentação de todas as intersecções mais perigosas solicitadas ou pelo término das intersecções
com acidentes. Se nenhuma intersecção com acidentes for informada, uma mensagem é apre-
sentada. Essa solução só é possível nos casos em que os dados estejam dentro de um inter-
valo determinado de valores, de modo que um valor extra possa ser definido para inutilizar
posições. Igualmente, ela exige a alteração da matriz original. Se a alteração não é possível,
pode-se ainda considerar a geração de uma cópia da matriz que possa então sofrer alterações,
mas, dependendo do tamanho da matriz original, essa opção pode ser pouco interessante.

7.5 em Pascal

7.5.1 declaração de uma matriz

Um tipo de dado matriz (arranjo de mais de uma dimensão) é declarado em Pascal de forma
semelhante ao tipo vetor, incluindo os limites para cada uma das dimensões:
array [<limite inferior>..<limite superior>,
<limite inferior>..<limite superior>, ...] of <tipo>
Os limites superior e inferior, índices do primeiro e do último elemento de cada dimensão,
devem ser do tipo inteiro, caractere ou enumeração (tipo que será visto no Capítulo 8).
Não existem restrições quanto aos valores que podem ser utilizados como índices. O tipo de-
clarado no final é o tipo de todos os elementos da matriz.
Exemplo de declarações de matrizes:
var
nota: array [1..7, 1..6] of real;
contagem_letras: array ['a'..'j', 1..20] of integer;
Em algumas situações, duas variáveis que tenham sido declaradas de forma independente,
com tipos não definidos explicitamente e aparentemente iguais, podem não ser reconhecidas
como variáveis de mesmo tipo pelo sistema. Por essa razão, recomenda-se que a declara-
ção de uma matriz em Pascal seja feita sempre como está a seguir, definindo primeiro a(s)
constante(s) usada(s) na declaração da matriz, em seguida o tipo definido para a matriz e,
finalmente, a variável do tipo matriz:
210 Algoritmos e Programação com Exemplos em Pascal e C

const
MAX1 = 6;
MAX2 = 8;
type
matriz = array [1..MAX1, 1..MAX2] of integer;
var
mat: matriz;

7.5.2 acesso aos elementos de uma matriz

O acesso aos elementos de uma matriz em Pascal é feito definindo-se um índice para cada
uma das dimensões. Esse índice pode ser dado por um valor constante, pelo conteúdo de
uma variável ou pelo resultado de uma expressão, devendo ser do mesmo tipo definido para
cada um dos índices, na ordem em que foram definidos. Os comandos a seguir acessam ele-
mentos das matrizes definidas na seção anterior:
{PREENCHER POR LEITURA O ELEMENTO DA LINHA 3, COLUNA 5 DA MATRIZ nota:}
readln(nota [3, 5]);
{SUPONDO A VARIAVEL INTEIRA i = 2, INFORMAR VALOR CONTIDO NA LINHA 1,
COLUNA 4 DA MATRIZ contagem_letras}
writeln(contagem_letras['a', i+2]);
{COPIAR VALOR DA LINHA 2, COLUNA 1 PARA LINHA 1, COLUNA 2 DE mat}
mat[1,2] := mat[2,1];
O trecho a seguir imprime a matriz mat, linha por linha, separando seus valores adequada-
mente. São utilizadas as variáveis inteiras lin e col para percorrer respectivamente as linhas
e as colunas da matriz:
for lin := 1 to MAX1 do {PARA CADA LINHA DA MATRIZ}
begin
writeln; {INICIA NOVA LINHA PARA CADA LINHA DA MATRIZ}
for col := 1 to MAX2 do {PARA CADA COLUNA DESTA LINHA}
write(mat[lin, col]:5, ' ') {ESCREVE UM ELEMENTO}
end;

7.5.3 inicialização de matriz na declaração

É possível inicializar matrizes na declaração, declarando-as como constantes tipadas. Cons-


tantes tipadas, apesar do nome, funcionam na realidade como variáveis, uma vez que seus
valores iniciais podem ser alterados durante o processamento.
Declaração de uma matriz como constante tipada:
Capítulo 7 Variáveis Estruturadas: Arranjos Multidimensionais 211

const
<nome da constante> : <tipo da constante> =
a a a
((valor1 da 1 linha, valor2 da 1 linha , ... , valorn da 1 linha),
a a a
(valor1 da 2 linha, valor2 da 2 linha , ... , valorn da 2 linha),
a
(valor1 da 3 linha, ...), (...));
O número de valores informados não pode ser nem menor nem maior que o número de
valores previstos para cada linha da matriz, caso contrário o código não será compilado sem
erros.
Exemplo de inicialização de uma matriz por meio de sua declaração como constante tipada:
const
MAXMERC = 5;
MAXMES = 12;
type
mt = array [1..MAXMERC , 1..MAXMES] of integer;
const
matriz : mt = ((0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1),
(50, 51, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5),
(5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5),
(100, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10),
(0, 0, 0, 0, 10, 5, 10, 5, 5, 5, 5, 5));

7.5.4 atribuição em bloco

Em Pascal é possível fazer uma atribuição em bloco de um arranjo a outro, desde que tenham
exatamente a mesma estrutura.
Supondo que matriz_original e matriz_copia tenham o mesmo número de dimensões e,
em cada uma das dimensões correspondentes (na ordem em que foram definidas), o mesmo
número de elementos, a atribuição a seguir copia todos os valores de uma para a outra:
matriz_copia := matriz_original;

7.6 em C

7.6.1 declaração de uma matriz

A declaração de uma matriz multidimensional em C é feita definindo-se, após o nome da


matriz, o número de elementos em cada uma das suas dimensões, cada um entre colchetes:
Dica do professor
Neste vídeo vamos falar sobre algumas dicas que podem tornar o seu trabalho com matrizes mais
fácil. Detalhes simples que quando levados em consideração podem proporcionar um ganho de
tempo e eficiência.

Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
Na prática
Pedro é programador de uma empresa de desenvolvimento de sistemas e, por isso, precisa estar
informado sobre as melhores práticas de desenvolvimento de sistemas.

Em um determinado dia, a empresa em que Pedro atua foi convidada a desenvolver um jogo. Este
jogo seria utilizado por uma escola de ensino fundamental, para realizar práticas pedagógicas com
seus alunos. O jogo solicitado foi o de campo minado. Por este jogo envolver um tabuleiro, onde
existem “bombas” escondidas, Pedro precisou utilizar matrizes.

CAMPOMINADO
Saiba +
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor:

Portugol - VisuALG - (Matrizes)

Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.

VisuAlg - Vetores e Matrizes

Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.

Você também pode gostar