Buscar

Guia de Estudos da Unidade 3 - Lógica de Programação Algorítmica

Prévia do material em texto

Lógica de Programação 
Algorítmica
UNIDADE 3
1
Palavras do Professor
Olá, aluno(a)!
Seja bem-vindo(a)!
Estamos iniciando a terceira unidade da nossa disciplina Lógica de Programação, cujo conteúdo já apre-
sentamos no vídeo de apresentação da disciplina. 
Na unidade anterior, vimos estruturas de repetição determinadas e indeterminadas, contadores, acumu-
ladores e tivemos um primeiro contato com os vetores, que serão abordados novamente nesta unidade.
Antes de prosseguir com esse texto, leia o capítulo 3 do livro-texto da disciplina. Depois disso, volte a este 
ponto para continuarmos o nosso estudo. 
Agora que você já leu o terceiro capítulo do nosso livro-texto, vamos iniciar os nossos estudos.
2
CoNCeITos de MaTrIZes
Na unidade anterior lidamos com vetores, ou seja, estruturas de armazenamento que tinham uma só 
dimensão. Nesta, vamos estender o conceito: vamos falar de matrizes. 
O uso de vetores é apropriado para resolver muitos problemas, mas existem alguns tipos de problemas 
que demandam o uso de estruturas mais sofisticadas. É nisso que as matrizes se encaixam. Seu uso é 
aplicável a diversos casos, e vamos ver agora um exemplo disso.
Por exemplo: suponha um prédio com 5 andares e 2 apartamentos por andar. Se quiséssemos representar 
num vetor, ficaria um pouco mais difícil de manipular.
Uma opção seria colocar os 10 apartamentos em um vetor com 10 posições, mas ficaria a pergunta: Como 
vamos enfileirar esses apartamentos dentro do vetor?
Nesse caso, cada apartamento ficaria armazenado em uma ocorrência dentro do vetor. Mas isso não seria 
a melhor forma de representar. Os apartamentos não ficam em fila, exceto quando só tem um por andar.
Os casos mais comuns têm prédios com dois ou mais apartamentos por andar. Como o mais comum é 
termos 2 por andar, vamos fazer a matriz refletir isso.
Portanto, podemos fazer isso com matrizes.
Mas, antes disso, vamos definir o que são matrizes.
definição de matrizes
Do ponto de vista da programação, uma matriz é equivalente a um conjunto de vetores empilhados. Como 
seria isso?
Suponha que você tenha 2 vetores, cada um representando um lado do prédio, e outro representando o 
outro lado.
Supondo que existem 5 andares, com 2 apartamentos por andar, poderíamos fazer assim:
O vetor LADO1 teria 5 apartamentos:
101 201 301 401 501 
O vetor LADO2 teria outros 5 apartamentos:
102 202 302 402 502 
As declarações seriam assim:
3
Var
LADO1, LADO2: VETOR [1..5] DE INTEIRO
Que tal se ao invés de ter 2 vetores você tivesse apenas 1 matriz? A matriz seria assim:
101 201 301 401 501 
102 202 302 402 502
A declaração não mudaria muito, e continuaria simples:
VAR
predio : vetor [1..5, 1..5] de inteiro
Ou seja, na prática, a matriz se comporta como 2 (ou mais) vetores empilhados.
Para preencher um vetor, você usava um PARA com a variável I, inteira, controlando a repetição, conforme 
exemplo abaixo:
ALGORITMO “REPETICAO DETERMINADA” 
VAR
I : inteiro
apto :vetor[1..10] de inteiro 
Inicio
Para i:=1 ate 10 faca 
Escreval(“informe número do apto”) 
leia(apto[i])
Fimpara
FIMALGORITMO
Agora, como você vai preencher uma matriz, precisaria de 2 variáveis de controle.
veja o vídeo!
Assista a esse vídeo com exemplo de uso de matrizes e depois volte para esse ponto 
do texto. Clique aqui para assistir. (Duração: 09:24). Para exemplificar, insira o código 
abaixo no Visualg e execute com F9. 
https://www.youtube.com/watch?v=gmtZSoyy0UI
4
ALGORITMO PRIMEIRAMATRIZ” 
VAR
I, J : inteiro
numero :vetor[1..3,1..3] de inteiro 
Inicio
Para i:=1 ate 3 faca
 Para j:=1 ate 3 faca
 Escreval(“informe numero da linha ”, i , “ coluna “, j) 
 leia(numero[i,j])
 Fimpara 
Fimpara
FIMALGORITMO
Se você inseriu o código acima no visualg e executou, percebeu que conseguiu inserir os 9 valores da 
matriz na seguinte ordem:
numero[1,1] 
numero[1,2] 
numero[1,3] 
numero[2,1] 
numero[2,2] 
numero[2,3] 
numero[3,1] 
numero[3,2] 
numero[3,3]
Ou seja, foram inseridos 9 (nove) números, já que a matriz tem 3 linhas por 3 colunas, que dá um total de 
3 X 3 = 9 elementos.
Esse é o primeiro conceito que você deve aprender sobre matrizes, que diz que o número total de elemen-
tos de uma matriz é igual ao produto do número de linhas pelo número de colunas.
No algoritmo acima, você apenas carregou os elementos da matriz. Que tal listarmos esses elementos? 
Vamos modificar o algoritmo, que agora ficará assim:
ALGORITMO “PRIMEIRAMATRIZMODIFICADO” 
VAR
I ,J : inteiro
numero :vetor[1..3,1..3] de inteiro 
Inicio
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“informe número da linha ”, i , “ coluna “, j) 
 leia(numero[i,j])
 Fimpara 
Fimpara
5
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“elemento da linha ”, i , “ coluna “, j , “ : ”, numero[i,j]) 
 Fimpara
Fimpara
FIMALGORITMO
No caso acima, usamos uma matriz com 2 dimensões. No caso de matrizes, não há limites: você pode ter 
matrizes com várias dimensões. Depende apenas do tipo de problema que você pretende resolver.
Carregando matrizes
Da mesma forma que vimos em vetores e em qualquer tipo de variável com as quais já trabalhamos, é 
possível carregar uma matriz por atribuição de valores aos seus elementos de forma direta ou lendo do 
teclado. Vamos ver alguns exemplos disso:
Carregamento de matrizes lendo pelo teclado
Insira o algoritmo abaixo no Visualg e teste. 
ALGORITMO “LENDOCIDADES”
VAR
I, J: inteiro
cidade :vetor[1..3,1..3] de literal 
Inicio
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“informe nome da cidade”, i , “ coluna “, j) 
 leia(cidade[i,j])
 Fimpara 
Fimpara
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“cidade linha ”, i , “ coluna “, j , “ : ”, cidade[i,j]) 
 Fimpara
Fimpara 
FIMALGORITMO
Vamos ver outro algoritmo que faz algo semelhante:
6
ALGORITMO “LENDONOTAS”
VAR
I, J: inteiro
nota :vetor[1..4,1..4] de literal 
Inicio
Para i:=1 ate 4 faca 
 Para j:=1 ate 4 faca
 Escreval(“informe nota “, i , “da unidade “, j) 
 leia(nota[i,j])
 Fimpara 
Fimpara
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“nota “, i , “da unidade “, j ,“:” ,nota[i,j]) 
 Fimpara
Fimpara 
FIMALGORITMO
Legal, não é? Pelo que podemos ver, não tem muita diferença do que já fizemos em outros exemplos.
Por outro lado, podemos carregar uma matriz de forma automática. É o que veremos no item abaixo.
Carregando matrizes automaticamente
Você pode colocar diversos valores de forma automática numa matriz. Por exemplo, para zerar todos os 
elementos, você poderia fazer:
ALGORITMO “ZERANDOMATRIZ” 
VAR
I ,J : inteiro
numero :vetor[1..3,1..3] de inteiro 
Inicio
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“informe número da linha ”, i , “ coluna “, j) 
 leia(numero[i,j])
 Fimpara 
Fimpara
// NESSE PONTO, VAMOS ZERAR OS ELEMENTOS DA MATRIZ:
7
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“informe numero da linha ”, i , “ coluna “, j) numero[i,j] : =0
 Fimpara 
Fimpara
// AGORA VAMOS LISTAR OS ELEMENTOS. PERCEBA QUE TODOS FICARAM IGUAIS A ZERO:
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“elemento da linha ”, i , “ coluna “, j , “ : ”, numero[i,j]) 
 Fimpara
Fimpara 
FIMALGORITMO
operações diversas com matrizes
•	 Somando elementos equivalentes de matrizes
No exemplo abaixo, vamos criar uma terceira matriz que é equivalente à soma de duas outras matrizes 
já existentes.
ALGORITMO “SOMANDOMATRIZES” 
VAR
I ,J: inteiro
M1,M2,M3 :vetor[1..4,1..4] de literal 
Inicio
Para i:=1 ate 4 faca 
 Para j:=1 ate 4 faca
 Escreval(“número “, i , “da unidade “, j , “da matriz 1”) 
 leia(M1[i,j])
 Escreval(“número “, i , “da unidade “, j ,“da matriz 2”) 
 M3[i,j] := M1[i,j] + M2[i,j]
 Fimpara 
Fimpara
// agora vamos listar a matriz 3
Para i:=1 ate 4 faca 
 Para j:=1 ate 4 faca
 Escreval(M3[i,j]) 
 Fimpara
Fimpara 
FIMALGORITMO
8
•	 Produto de elementos equivalentes de matrizes
Do mesmo jeito quefizemos para a soma, poderíamos fazer o produto (que não é o mesmo que o produto 
de matrizes que você aprendeu no ensino médio).
No exemplo abaixo, vamos criar uma terceira matriz que é equivalente ao produto de duas outras matrizes 
já existentes.
ALGORITMO “PRODUTOMATRIZES” 
VAR
I ,J: inteiro
M1,M2,M3 :vetor[1..4,1..4] de literal 
Inicio
Para i:=1 ate 4 faca 
 Para j:=1 ate 4 faca
 Escreval(“número “, i , “da unidade “, j , “da matriz 1”) 
 leia(M1[i,j])
 Fimpara 
Fimpara
Para i:=1 ate 4 faca 
 Para j:=1 ate 4 faca
 Escreval(“número “, i , “da unidade “, j ,“da matriz 2”) 
 leia(M2[i,j])
 M3[i,j]:=M1[i,j]*M2[i,j] 
 M2[i,j]
 Fimpara 
Fimpara
Para i:=1 ate 4 faca 
 Para j:=1 ate 4 faca
 Escreval(M3[i,j]) 
 Fimpara
Fimpara 
FIMALGORITMO
Na prática, a mudança é bem pequena. As demais operações podem perfeitamente ser feitas dessa for-
ma. Experimente fazer divisão e subtração dessas matrizes, e liste o resultado. Use o Visualg para isso.
Vamos ver agora que as matrizes podem ser carregadas em qualquer ordem. Vamos começar com a carga 
de uma matriz do fim para o começo.
9
Carregando matrizes de trás para frente
Você também pode carregar uma matriz ao contrário, como no algoritmo abaixo. De toda forma, a listagem 
será feita da forma normal. Insira o código abaixo no Visualg e observe o comportamento.
ALGORITMO “CARREGANDAOCONTRARIO” 
VAR
I , J : inteiro
numero :vetor[1..3,1..3] de inteiro 
Inicio
Para i:=3 ate 1 passo -1 faca 
 Para j:= 3 ate 1 passo -1 faca
 Escreval(“informe número da linha ”, i , “ coluna “, j) 
 leia(numero[i,j])
 Fimpara 
Fimpara
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“elemento da linha ”, i , “ coluna “, j , “ : ”, numero[i,j]) 
 Fimpara
Fimpara
Para i:=3 ate 1 passo -1 faca
 Para j:=3 ate 1 passo -1 faca
 Escreval(“elemento da linha ”, i , “ coluna “, j , “ : ”, numero[i,j]) 
 Fimpara
Fimpara
Ou seja, podemos fazer várias operações com diversas matrizes. Vamos agora ver um tópico muito inte-
ressante: contabilização de dados em matrizes, ou seja, contagens, somas, médias, maior, menor, etc. 
Com esse tipo de contabilização, podemos tornar bastante útil o uso de matrizes. Vejamos a seguir.
Contabilizando dados de matrizes
Observe o algoritmo abaixo:
ALGORITMO “CONTABILIZANDO MATRIZES” 
VAR
I , J: inteiro
numero :vetor[1..3,1..3] de inteiro 
Inicio
10
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“informe número da linha ”, i , “ coluna “, j) 
 leia(numero[i,j])
 Fimpara 
Fimpara
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“elemento da linha ”, i , “ coluna “, j , “ : ”, numero[i,j]) 
 Fimpara
Fimpara 
FIMALGORITMO
Nele, estamos fazendo a leitura e depois a listagem do vetor. É claro que isso não basta, ou seja, é inte-
ressante contar quantos elementos são iguais a zero, por exemplo. 
Com o exemplo, podemos perceber que temos muitas coisas a contabilizar dentro de uma matriz. É o que 
vamos ver como fazer.
Para isso, usaremos um contador chamado “qtdzero”. E colocaremos a instrução “qtdzero := qtdzero +1“ 
dentro do programa sempre que ele encontrar algum elemento igual a zero. Usaremos o comando “SE”, 
que já vimos anteriormente. O programa ficará assim:
ALGORITMO “CONTABILIZANDO MATRIZES2” 
VAR
I , J: inteiro
numero :vetor[1..3,1..3] de inteiro 
qtdzero : inteiro
Inicio
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“informe número da linha ”, i , “ coluna “, j) 
 leia(numero[i,j])
 se numero[i,j] = 0 então 
 qtdzero := qtdzero + 1
 fimse 
 Fimpara
Fimpara
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“elemento da linha ”, i , “ coluna “, j , “ : ”, numero[i,j]) 
 Fimpara
Fimpara
escreval(“nesta matriz existem “, qtdzero , “ elementos iguais a zero”) 
FIMALGORITMO
11
Legal, não é?
Já que contamos quantos elementos são iguais a zero, também podemos somar todos esses elementos. 
Para isso precisaremos de uma variável ACUMULADORA, ou seja, que soma os elementos do vetor. Pode-
mos, portanto, criar a variável SOMA que terá esse papel. Além disso, colocaremos o comando “soma := 
soma + numero[i,j]” para realizar essa soma. O algoritmo ficará assim:
ALGORITMO “CONTABILIZANDO MATRIZES2” 
VAR
I ,J : inteiro
numero :vetor[1..3,1..3] de inteiro 
qtdzero : inteiro
soma : inteiro 
Inicio
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“informe número da linha ”, i , “ coluna “, j)
 leia(numero[i,j])
 se numero[i,j] = 0 então 
 qtdzero := qtdzero + 1
 fimse
 soma : = soma + numero[i,j] 
 Fimpara
Fimpara
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“elemento da linha ”, i , “ coluna “, j , “ : ”, numero[i,j]) 
 Fimpara
Fimpara
escreval(“nesta matriz existem “, qtdzero , “ elementos iguais a zero”) 
escreval(“a soma dos elementos dessa matriz é “, soma)
FIMALGORITMO
Repare que a soma deve ficar fora do comando SE, para contar todos os elementos. Se ela ficar dentro 
do comando SE, dará zero porque dentro desse SE a matriz só tem números iguais a zero, ou seja, o que 
estiver dentro desse SE só vai ser acionado se o número for zero. E a soma de zeros só poderia dar zero 
mesmo. Por isso, a soma deve ficar FORA do se.
Ora, se temos a soma temos a média. Então, nesse caso, podemos exibir a média dos números da matriz 
simplesmente dividindo a soma pela quantidade de elementos, que no caso acima são 9 elementos com-
pondo a matriz.
O algoritmo ficaria assim:
12
ALGORITMO “CONTABILIZANDO MATRIZES3” 
VAR
I , J: inteiro
numero :vetor[1..3,1..3] de inteiro 
qtdzero : inteiro
soma : inteiro 
Inicio
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“informe número da linha ”, i , “ coluna “, j) 
 leia(numero[i,j])
 se numero[i,j] = 0 então 
 qtdzero := qtdzero + 1
 fimse
 soma : = soma + numero[i,j] 
 Fimpara
Fimpara
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“elemento da linha ”, i , “ coluna “, j , “ : ”, numero[i,j])
 Fimpara 
Fimpara
escreval(“nesta matriz existem “, qtdzero , “ elementos iguais a zero”) 
escreval(“a soma dos elementos dessa matriz é “, soma)
escreval(“a média dos elementos dessa matriz é “, soma / 9) 
FIMALGORITMO
Com certeza, é muito interessante!
E se pudéssemos descobrir qual o maior valor entre os elementos dessa matriz?
Para isso, vamos precisar de uma variável para armazenar esse maior valor. Podemos chamá-la (Isso, você 
já adivinhou!) de MAIORVALOR.
Por estar sendo utilizada para buscar o maior valor entre os elementos de um grupo de inteiros, com cer-
teza essa variável também é inteira. Declararemos dessa forma:
maiorvalor : inteiro
Mas como podemos descobrir o maior valor? Da seguinte forma:
Para cada número, perguntamos se ele é maior do que o valor que está armazenado em MAIORVALOR. Se 
não for, é porque ele é menor do que ela, e nada é alterado.
13
Mas se ele for maior do que ela, então significa que essa variável foi superada e precisa se recuperar. 
Como ela faz isso? Assumindo pra si o valor que foi maior do que ela, então nesse caso essa variável 
passará a ter o maior valor.
Como fazer isso dentro do algoritmo? É simples. Basta que você coloque a seguinte pergunta, usando o 
comando SE:
Se numeros[i,j] > maiorvalor então 
 maiorvalor:= numeros [i,j]
fimse
E, no fim do algoritmo, você exibe a variável maiorvalor. O algoritmo ficará assim:
ALGORITMO “CONTABILIZANDO MATRIZES4” 
VAR
I , J: inteiro
numero :vetor[1..3,1..3] de inteiro 
qtdzero : inteiro
soma : inteiro 
maiorvalor : inteiro 
Inicio
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“informe número da linha ”, i , “ coluna “, j) 
 leia(numero[i,j])
 se numero[i,j] = 0 então 
 qtdzero := qtdzero + 1
 fimse
 soma : = soma + numero[i,j]
 se numero[i,j] > maiorvalor então 
 maiorvalor := numero[i,j]
 fimse
 Fimpara 
Fimpara
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“elemento da linha ”, i , “ coluna “,j , “ : ”, numero[i,j])
 Fimpara
Fimpara
escreval(“nesta matriz existem “, qtdzero , “ elementos iguais a zero”) 
escreval(“a soma dos elementos dessa matriz é “, soma)
escreval(“a média dos elementos dessa matriz é “, soma / 9) 
escreval(“o maior elemento dessa matriz é “, maiorvalor )
FIMALGORITMO
14
Da mesma forma que conseguimos identificar o maior valor, podemos fazer isso para o menor valor. Mas 
como podemos descobrir o menor valor? É semelhante ao do maior? Quase. 
Tem uma pequena diferença, mas que é fundamental saber para não correr risco de o algoritmo não con-
tabilizar esse menor valor. É muito importante que você esteja atento a este detalhe.
Ele funciona da seguinte forma: para cada número, perguntamos se ele é menor do que o valor que está 
armazenado em MENORVALOR. Se não for, é porque ele é maior do que ela, e nada é alterado.
Mas se ele for menor do que ela, então significa que essa variável foi superada e precisa se recuperar. 
Como ela faz isso? Assumindo pra si o valor que foi menor do que ela, então nesse caso, essa variável 
passará a ter o menor valor.
Do mesmo jeito que fizemos para o maior valor, como fazer isso dentro do algoritmo para o menor valor?
Vamos experimentar fazendo praticamente a mesma coisa, trocando o sinal e observando.
ALGORITMO “CONTABILIZANDO MATRIZES5” 
VAR
I , J : inteiro
numero :vetor[1..3,1..3] de inteiro 
qtdzero : inteiro
soma : inteiro
maiorvalor, menorvalor : inteiro 
Inicio
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“informe número da linha ”, i , “ coluna “, j) 
 leia(numero[i,j])
 se numero[i,j] = 0 então
 qtdzero := qtdzero + 1
 fimse
soma : = soma + numero[i,j]
 se numero[i,j] > maiorvalor então 
 maiorvalor := numero[i,j]
 fimse
 se numero[i,j] < menorvalor então 
 menorvalor := numero[i,j]
 fimse 
 Fimpara
Fimpara
Para i:=1 ate 3 faca
 Para j:=1 ate 3 faca
 Escreval(“elemento da linha ”, i , “ coluna “, j , “ : ”, número[i,j]) 
 Fimpara
Fimpara
15
escreval(“nesta matriz existem “, qtdzero , “ elementos iguais a zero”) 
escreval(“a soma dos elementos dessa matriz é “, soma)
escreval(“a média dos elementos dessa matriz é “, soma / 9) 
escreval(“o maior elemento dessa matriz é “, maiorvalor ) 
escreval(“o menor elemento dessa matriz é “, menorvalor )
FIMALGORITMO
Coloque esse algoritmo no visualg e teste. Depois volte para esse texto. E aí, funcionou? NÃO?
Qual o motivo de não ter funcionado?
Se você só colocou números inteiros acima de zero, não vai conseguir achar o menor valor, sabe por quê? 
Porque o visualg atribui inicialmente valor ZERO às variáveis inteiras. 
Nesse caso, você precisará de um artifício para o algoritmo funcionar. No mundo da programação, isso é 
chamado (de forma bem humorada) de GAMBIARRA. 
Acho que você já deve ter ouvido isso em outras situações – saiba que o mundo da programação também 
tem as suas gambiarras – nem sempre são recomendadas, mas em casos de urgência acabam funcionando. 
Não estamos encorajando você a usá-las, mas todo profissional da área deve conhece-las até para saber 
quando NÃO usar. Como toda boa gambiarra, essa é bem simples. Basta atribuir inicialmente um alto 
valor para a variável MENORVALOR. Por exemplo, podemos colocar menorvalor:= 9999.
Se logo depois de “inicio” você fizer essa atribuição, o algoritmo vai funcionar. O algoritmo vai ficar assim:
ALGORITMO “CONTABILIZANDO MATRIZES6” 
VAR
I, J : inteiro
numero :vetor[1..3,1..3] de inteiro q
tdzero : inteiro
soma : inteiro
maiorvalor, menorvalor : inteiro 
Inicio
menorvalor:: = 9999 
Para i:=1 ate 3 faca
 Para j:=1 ate 3 faca
 Escreval(“informe número da linha ”, i , “ coluna “, j) 
 leia(numero[i,j])
 se numero[i,j] = 0 então 
 qtdzero := qtdzero + 1 
 fimse
 soma : = soma + numero[i,j]
 se numero[i,j] > maiorvalor então 
16
 maiorvalor := numero[i,j]
 fimse
 se numero[i,j] < menorvalor então 
 menorvalor := numero[i,j]
 fimse 
 fimse 
 Fimpara
Fimpara
Para i:=1 ate 3 faca 
 Para j:=1 ate 3 faca
 Escreval(“elemento da linha ”, i , “ coluna “, j , “ : ”, número[i,j]) 
 Fimpara
Fimpara
escreval(“nesta matriz existem “, qtdzero , “ elementos iguais a zero”) 
escreval(“a soma dos elementos dessa matriz é “, soma)
escreval(“a média dos elementos dessa matriz é “, soma / 9) 
escreval(“o maior elemento dessa matriz é “, maiorvalor ) 
escreval(“o menor elemento dessa matriz é “, menorvalor )
FIMALGORITMO
Muito interessante, não é? 
Sem dúvida, podemos ver que existem inúmeras possibilidades quando usamos matrizes. É importante 
relembrar que você pode ter matrizes de várias dimensões.
Mas também é bom lembrar que, quanto mais dimensões uma matriz tiver, mais complexa se tornará a 
sua manipulação.
Dependendo do caso, pode ser mais interessante trabalhar com mais de uma matriz e relacioná-las pelos 
números de linha e coluna.
Vamos tratar desse tema a seguir.
Trabalhando com matrizes relacionadas
Suponha que você esteja trabalhando com a contabilização das informações de um condomínio pequeno, 
com apenas 4 apartamentos, com 2 andares, ou seja, 2 apartamentos por andar. Para cada apartamento, 
você vai armazenar o valor devido de condomínio, que pode ser de zero (não deve nada) até qualquer valor.
Teremos as seguintes matrizes:
apto : vetor [1..2, 1..2] de literal, para armazenar o número do apartamento. Valordevido : vetor [1..2, 1..2] 
de real, para armazenar o valor devido por aquele apartamento. Inicialmente o programa ficaria assim, 
com a declaração das variáveis:
17
ALGORITMO “CONTABILIZANDOAPTOS” 
VAR
apto : vetor [1..2, 1..2] de literal
Valordevido : vetor [1..2, 1..2] de real 
I,J : inteiro
INICIO 
FIMALGORITMO
Naturalmente, precisaremos carregar esses vetores. Nesse caso, o algoritmo ficará assim:
ALGORITMO “CONTABILIZANDOAPTOS” 
VAR
apto : vetor [1..2, 1..2] de literal
valordevido : vetor [1..2, 1..2] de real
I,J : inteiro
INICIO
Para i:=1 ate 2 faca 
 Para j:=1 ate 2 faca
 Escreval(“informe número do apto da linha “, i, “ coluna “, j ) 
 leia(apto[i,j])
 Escreval(“informe valor devido pelo apto “ , apto[i,j])
 leia(valordevido[i,j]))
 Fimpara 
Fimpara
FIMALGORITMO
Até esse ponto, o algoritmo apenas carrega os valores nos vetores. Mas não vamos fazer apenas isso. 
Nessa contabilização, precisamos saber:
•	 Quantos apartamentos estão devendo;
•	 Qual o valor total devido;
•	 Qual a média de dívida por apartamento;
•	 Qual o apartamento que deve mais e o valor dessa dívida.
Vamos por partes:
Primeiro, vamos contar quantos apartamentos estão devendo. Criaremos a variável “qtddevedores”, que 
vai contar os apartamentos que têm dívida maior do que zero.
A declaração dela é: qtddevedores : inteiro E a sentença que faz essa contagem é: 
18
se valordevido[i,j]) >0 então
 qtddevedores := qtddevedores + 1
fimse
A mensagem que exibe isso é:
Escreval(“ a quantidade total de devedores é “, qtdevedores) 
Com isso, o algoritmo fica assim:
ALGORITMO “CONTABILIZANDOAPTOS”
VAR
apto : vetor [1..2, 1..2] de literal 
Valordevido : vetor [1..2, 1..2] de real 
qtddevedores : inteiro
I,J : inteiro
INICIO
Para i:=1 ate 2 faca 
 Para j:=1 ate 2 faca
 Escreval(“informe número do apto da linha “, i, “ coluna “, j ) 
 leia(apto[i,j])
 Escreval(“informe valor devido pelo apto “ , apto[i,j]) 
 leia(valordevido[i,j]))
 se valordevido[i,j]) > 0 então 
 qtddevedores := qtddevedores + 1
 fimse 
 Fimpara
Fimpara
Escreval(“ a quantidade total de devedores é “, qtdevedores)
FIMALGORITMO
Para obter o valor total devido, é simples: basta colocar uma variável acumuladora. A variável TOTAL-
DEVIDO serve bem a esse propósito. Declarando-a como real e colocando o comando TOTALDEVIDO := 
TOTALDEVIDO + valordevido[i,j] no programa, teremos o algoritmo assim:
ALGORITMO “CONTABILIZANDOAPTOS” 
VAR
apto : vetor [1..2, 1..2] de literal
 Valordevido : vetor [1..2, 1..2] de real 
 qtddevedores : inteiro
 totaldevido:real 
I,J : inteiro 
INICIO
19
Para i:=1 ate 2 faca 
 Para j:=1 ate 2 faca
 Escreval(“informe número do apto da linha “, i, “ coluna “, j ) 
 leia(apto[i,j])
 Escreval(“informe valor devido pelo apto “ , apto[i,j]) 
 leia(valordevido[i,j]))
 totaldevido := totaldevido + valordevido[i,j] 
 se valordevido[i,j]) > 0 então
 qtddevedores := qtddevedores + 1 
 fimse
 Fimpara 
Fimpara
Escreval(“ valor total devido é “, total devido)
Escreval(“ a quantidade total de devedores é “, qtdevedores) 
FIMALGORITMO
Para exibir a média de dívida, é só colocar o comando abaixo: 
escreval(“ o valor médio devido é “ , totaldevido /qtddevedores)
Para saber o maior valor devido pelo apartamento e qual o apartamento que deve mais, devemos utilizar 
duas variáveis: maiordivida e aptomaiordivida. A primeira variável guarda o maior valor devido e a segun-
da, o número do apto que deve mais.
Declaramos essas variáveis assim:
Maiordivida : real 
Aptomaiordivida : literal.
Além disso, inseriremos os seguintes trechos de programa:
Se valordevido[i,j] > maiordivida entao 
 Maiordivida:= valordevido[i,j] 
 Aptomaiordivida:= apto[i,j]
Fimse.
Inserindo esse código no algoritmo, ele fica assim: 
ALGORITMO “CONTABILIZANDOAPTOS” 
VAR
apto : vetor [1..2, 1..2] de literal 
Valordevido : vetor [1..2, 1..2] de real 
qtddevedores : inteiro
 totaldevido: real 
Maiordivida : real 
Aptomaiordivida : literal.
20
I,J : inteiro 
INICIO
Para i:=1 ate 2 faca 
 Para j:=1 ate 2 faca
 Escreval(“informe número do apto da linha “, i, “ coluna “, j ) 
 leia(apto[i,j])
 Escreval(“informe valor devido pelo apto “ , apto[i,j]) 
 leia(valordevido[i,j]))
 totaldevido := totaldevido + valordevido[i,j] 
 se valordevido[i,j]) > 0 então
 qtddevedores := qtddevedores + 1 
 fimse
 Se valordevido[i,j] > maiordivida entao 
 Maiordivida:= valordevido[i,j] 
 Aptomaiordivida:= apto[i,j]
 Fimse. 
 Fimpara
Fimpara
Escreval (“o total de apto devedores é”, qtddevedores) 
Escreval (“o valor total devido ”, totaldevido)
Escreval(“apto que deve mais é ”, aptomaiordivida)
escreval (“ o valor médio devido é “ , totaldevido /qtddevedores) 
FIMALGORITMO
Muito legal, não é? Teste esse algoritmo, modifique e adeque a outras situações. Teste, experimente, 
busque aprender através da construção e modificação deste algoritmo e outros.
21
Palavra fINal
Prezado(a) aluno(a)!
Chegamos à conclusão do conteúdo da terceira unidade da nossa disciplina. 
Terminamos aqui, a nossa terceira unidade. Nela vimos: 
•	 Matrizes, com seus conceitos e exemplos.
•	 Contabilizações e operações diversas em matrizes.
Aproveite para realizar os exercícios de fixação do livro. Insira suas dúvidas nos fóruns da disciplina. 
Para consolidar os seus conhecimentos, releia a unidade 3 do nosso livro-texto e depois responda aos 
exercícios no Ambiente Virtual de Aprendizagem (AVA).
Terminando os exercícios, seguiremos para a unidade 4. 
Lembre-se! Caso necessite esclarecer alguma dúvida, entre em contato com o seu tutor. 
Ele está a sua disposição para orientá-lo(a) no que for necessário.
Encontramos-nos na próxima unidade!
Desejo bons estudos.

Continue navegando

Outros materiais