Prévia do material em texto
ALGORITMO
ETAPA 4
ESTRUTURAS DE DADOS HOMOGÊNEAS
CENTRO UNIVERSITÁRIO
LEONARDO DA VINCI
Rodovia BR 470, Km 71, nº 1.040, Bairro Benedito
89130-000 - INDAIAL/SC
www.uniasselvi.com.br
Curso sobre Algoritmo
Centro Universitário Leonardo da Vinci
Organização
Greisse Moser Badalotti
Autor
Marcio Poffo
Reitor da UNIASSELVI
Prof. Hermínio Kloch
Pró-Reitoria de Ensino de Graduação a Distância
Prof.ª Francieli Stano Torres
Pró-Reitor Operacional de Ensino de Graduação a Distância
Prof. Hermínio Kloch
Diagramação e Capa
Renan Willian Pacheco
Revisão
José Roberto Rodrigues
Caro acadêmico, parabéns por ter chegado a esta etapa. Agora você já conhece
os conceitos fundamentais para a construção de algoritmos, a criação de variáveis e
seus tipos de dados, além das estruturas de condições e comandos de repetição (loop).
A partir desta etapa, focaremos nas estruturas de dados homogêneas, que são
caracterizadas por um conjunto de variáveis do mesmo tipo de dado, as quais podem
ser unidimensionais ou multidimensionais. Estas estruturas facilitam o trabalho de
programação, pois em alguns casos em que se necessite a criação de várias variáveis,
cria-se uma estrutura destas para resolver o problema.
Mas, para isso, não esqueça, faça todos os exercícios propostos, analise e refaça os
exemplos demonstrados que você vai conseguir aprender a utilizar estas estruturas de
forma correta. A prática facilita e muito o desenvolvimento da lógica de programação.
Este é o caminho para o bom aprendizado de programação. Portanto, bons estudos!
2 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
1 INTRODUÇÃO
Até aqui você aprendeu como utilizar os tipos de dados primitivos e uma
breve conceituação de vetores e matrizes. Além disso, você aprendeu também as
estruturas condicionais e de repetição, as quais são fundamentais para as linguagens
de programação.
Nesta etapa vamos nos aprofundar nas estruturas de dados chamadas de vetor
(array) e matrizes, que são muito importantes para o desenvolvimento de software.
Esta técnica de programação nos permite trabalhar com estas estruturas que são um
agrupamento de dados, referenciado no código-fonte por uma mesma variável. Para o
nosso estudo, consideraremos apenas as estruturas de dados que sejam formadas por
grupo de dados do mesmo tipo, chamadas de estruturas de dados homogêneas.
As estruturas de dados homogêneas são conhecidas no desenvolvimento de
software por diversos nomes, como variáveis indexadas, variáveis compostas, arranjos,
vetores, matrizes, arrays (do inglês) etc. Aqui serão denominadas de vetores (MANZANO;
OLIVEIRA, 2014).
2 ESTRUTURA UNIDIMENSIONAL (VETORES OU ARRAYS)
As estruturas de dados unidimensionais são os conhecidos arrays, também
chamados de vetores ou matrizes de uma dimensão, e representam um conjunto de
dados que estejam em uma determinada posição (índice) de valores homogêneos, isto
é, valores do mesmo tipo de dado (inteiro, real, caractere, booleano ou lógico).
Neste sentido, vetores ou matrizes de uma dimensão são considerados estruturas
de dados que são referenciados por um mesmo nome e que necessitam de um único
índice para que seus elementos sejam acessados. Neste contexto, você pode imaginar
um vetor como sendo uma tabela com apenas uma coluna, e para acessar seus dados,
basta informar o número da linha (índice). Lembrando que para acessar a posição de um
vetor em linguagem de programação real utiliza-se o número da linha menos um (n-1),
isso porque vetor inicia-se da posição zero. Veja o exemplo a seguir que ilustra um vetor.
3
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
FIGURA 4.1 – ILUSTRAÇÃO DE UM VETOR
FONTE: O autor
No exemplo da Figura 4.1, o índice do modelo “Palio” é o 2, e do veículo “Fusca”
é o índice 0 (zero).
2.1. UTILIZAÇÃO DE VETORES
Agora que aprendemos o que são vetores e para que servem, vamos aprender
como utilizá-los. A utilização de vetores independe da linguagem de programação, isto
é, todo vetor funciona da mesma forma, podendo apenas haver alguma diferença de
sintaxe de uma linguagem de programação para outra.
Como podemos notar, uma variável do tipo vetor armazena vários dados
ao mesmo tempo, porém a manipulação de cada um deles é individual, pois o
armazenamento é realizado para cada valor em um índice do vetor, além do acesso
de cada elemento que também é realizado pelo índice de cada um deles. Conforme já
foi mencionado, a posição de cada elemento no vetor é chamada de índice, que nada
mais é do que o número da posição, que é um intervalo da quantidade de elementos
definida para um vetor.
Neste contexto, para realizar o acesso a um elemento de um vetor, utiliza-se o
nome da variável (vetor) seguido do número do índice do elemento entre colchetes
“[x]”. Veja a seguir um exemplo de como acessar um elemento de um vetor.
4 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
TABELA 4.1 – EXEMPLO DE ACESSO A UM ELEMENTO DE UM VETOR PELO SEU ÍNDICE
Algoritmo armazenaModelos
Declara
vetorExemplo: vetor [0..2] de inteiro
Inicio
vetorExemplo [0] ← 200
vetorExemplo [1] ← 125
vetorExemplo [2] ← 1999
Escreva (“Escreva número: ”, vetorExemplo [0])
Escreva (“Escreva número: ”, vetorExemplo [1])
Escreva (“Escreva número: ”, vetorExemplo [2])
Fim
FONTE: O autor
A saída do programa acima está listada a seguir. Note que definimos a variável
“vetorExemplo” com o tipo vetor de inteiro. Isso significa que apenas podem ser
adicionados números inteiros como elemento deste vetor.
TABELA 4.2 – SAÍDA DO VETOR ANTERIOR
200
125
1999
FONTE: O autor
Este tipo de estrutura de dados é disponibilizado em uma única variável
dimensionada com um determinado tamanho, o qual define-se em sua declaração. Neste
sentido, a declaração de um vetor é determinada por constantes inteiras e positivas
(MANZANO; OLIVEIRA, 2014). Este conceito de ter apenas um único índice é chamado
de variável indexada unidimensional, que pode ser entendida como a estrutura de dados
que a partir de um nome e um único índice permite o armazenamento e a localização
de um conjunto de dados.
Digamos o caso de um prédio, por exemplo, que possui 10 andares, contando com
o térreo. Cada andar possui um número, por exemplo, térreo, primeiro andar, segundo
andar, e assim por diante. No térreo deste prédio encontra-se a recepção, e no quinto
andar encontra-se um consultório odontológico. É necessário que haja uma placa no
térreo informando em qual andar e sala está situado cada negócio. Por exemplo, uma
pessoa que quer ir ao odontologista vai utilizar esta placa, que serve como mapa, para
descobrir que o que ela está procurando situa-se no quinto andar.
5
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
O mesmo do exemplo do prédio acontece quando se deseja armazenar em
memória uma lista de valores, todos do mesmo tipo de dado. Por exemplo, a Figura 4.1
possui uma lista de modelos de carros. Caso fôssemos criar uma variável para armazenar
cada modelo, nosso código-fonte ficaria mais complexo. Veja um exemplo no algoritmo
a seguir, no qual atribuímos os valores para cada variável e depois escrevemos na tela
o valor de cada variável.
TABELA 4.3 – EXEMPLO DE ALGORITMO PARA ARMAZENAR LISTA DE MODELOS
EM VARIÁVEIS NORMAIS
Algoritmo armazenaModelos
Declara
varFusca,
varGol,
varPalio,
varMontana,
varJetta,
varGolf,
varSaveito,
varTucson :caractere
Inicio
varFusca ← “Fusca”
varGol ← “Gol”
varPalio ← “Palio”
varMontana ← “Montana”
varJetta ← “Jetta”
varGolf ← “Golf”
varSaveiro ← “Saveiro”
varTucson ← “Tucson”
Escreva(“Escreva modelo: ”, varFusca)
Escreva(“Escreva modelo: ”, varGol)
Escreva(“Escreva modelo: ”, varPalio)
Escreva(“Escreva modelo: ”, varMontana)
Escreva(“Escreva modelo: ”, varJetta)
Escreva(“Escreva modelo: ”, varGolf)Escreva(“Escreva modelo: ”, varSaveiro)
Escreva(“Escreva modelo: ”, varTucson)
Fim
FONTE: O autor
6 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
Agora desenvolvemos um algoritmo utilizando a estrutura de um vetor, código
diferente, mas com o mesmo resultado final. Veja como o código-fonte torna-se mais
legível e menos trabalhoso.
TABELA 4.4 – EXEMPLO DE ALGORITMO PARA ARMAZENAR LISTA DE MODELOS
EM UM VETOR
Algoritmo armazenaModelos
Declara
linha: inteiro
vetorModelos: vetor [0..7] de caractere
Inicio
vetorModelos[0] ← “Fusca”
vetorModelos[1] ← “Gol”
vetorModelos[2] ← “Palio”
vetorModelos[3] ← “Montana”
vetorModelos[4] ← “Jetta”
vetorModelos[5] ← “Golf”
vetorModelos[6] ← “Saveiro”
vetorModelos[7] ← “Tucson”
para linha de 0 ate 7 faca
Escreva(“Escreva modelo: ”, vetorModelos[linha])
fim_para
Fim
FONTE: O autor
2.2. REPRESENTAÇÃO DE VETOR NA MEMÓRIA DE UM COMPUTADOR
Quando um vetor é definido, requisita-se ao sistema operacional do computador
que seja realizada uma reserva com área contínua de memória, cujo objetivo é armazenar
uma lista de valores que tenham o mesmo tipo de dado (SOUZA et al., 2015). Esta área
de memória reservada é, na realidade, um conjunto de posições simples e contínuas de
memória reservadas uma após a outra (SOUZA et al., 2015). Neste sentido, você pode
imaginar esta reserva de memória como se fosse uma caixa ao lado da outra, ou uma
embaixo da outra, cada uma com seu endereçamento físico de memória. Cada um destes
espaços (caixas) de memória possui um único índice para acesso a seu dado, isto é, cada
dado armazenado possui um único índice.
7
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
FIGURA 4.2 – ARMAZENAMENTO DE UMA VARIÁVEL SIMPLES NA MEMÓRIA
FONTE: Souza et al. (2015, p. 168)
Observe a Figura 4.2, a qual ilustra o armazenamento de dados em memória por
uma variável comum. No caso desta variável “A”, que possui o valor 15 como seu dado,
está alocada no endereçamento 100 da memória (SOUZA et al., 2015). Neste sentido, caso
tivéssemos criado várias variáveis, seria alocada uma variável em cada endereçamento da
memória, ou seja, no endereço 100 teríamos a variável “A”, no endereço “102” teríamos
a variável “B” e assim por diante.
Agora, consideremos que criamos um vetor com cinco posições, cujos elementos
possuem os valores -3, 4, 5 e 0, nesta ordem (SOUZA, et al., 2015). Neste caso, os valores
são armazenados nas “caixas” de memória, um após o outro, a partir de um determinado
endereçamento da memória, por exemplo, no endereço de memória 100, 101, 102, cuja
variável da memória é a mesma (SOUZA, et al., 2015).
FIGURA 4.3 – ARMAZENAMENTO DE UM VETOR NA MEMÓRIA
FONTE: Souza et al. (2015, p. 169)
8 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
Note na Figura 4.3, acima, o vetor, chamado de “A”, o qual foi definido com quatro
posições, recebeu a reserva na memória de quatro endereçamentos físicos. Neste caso,
cada endereçamento da memória é para armazenar os dados de cada índice do vetor.
É desta forma que um vetor é armazenado em memória.
2.3. EXEMPLO PRÁTICO 1
Vamos agora desenvolver um exemplo prático? Vamos desenvolver para este
problema desde o algoritmo passo a passo até o fluxograma e pseudocódigo, assim
passamos a relembrar os conteúdos passados. Para facilitar a programação, vamos
utilizar comandos de repetição.
Problema: Implementar um programa que leia as 10 notas de um aluno e então
calcule a média das notas. Como saída do programa deve ser listado o nome do aluno
mencionando sua situação (“aprovado” ou “reprovado”), sendo que a média mínima
para aprovação é 7. Após esta saída, o programa deve listar todas as notas informadas,
uma por linha.
Vamos iniciar escrevendo as instruções passo a passo do algoritmo, as quais
seguem na próxima tabela.
TABELA 4.5 – INSTRUÇÕES PARA O ALGORITMO
Início
1. Solicitar o nome do aluno e armazenar em uma variável.
2. Solicitar as dez notas do aluno, armazenando em uma lista.
3. Calcular a média das notas e armazenar o resultado em uma variável. Fórmula do
cálculo:
4. Fazer um desvio condicional para verificar se o aluno foi aprovado ou não, exibindo
seu nome e situação na tela.
5. Listar todas as notas informadas, uma por linha
Fim
FONTE: O autor
Agora que temos as instruções de nosso algoritmo, desenvolvemos um
fluxograma, apresentado a seguir.
9
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
FIGURA 4.4 – FLUXOGRAMA PARA REPRESENTAR O ALGORITMO
FONTE: O autor
Analise o diagrama acima, no qual foi realizado o início do processo, solicitado
o nome do aluno, em seguida foi inserido um loop validando se a variável “i” é menor
ou igual a 9, pois estamos tratando vetor da posição zero, isto é, índice zero. Sendo esta
expressão verdadeira, a primeira vez sempre será, pois iniciamos a variável “i” com zero,
e então é solicitada a nota do aluno e em seguida realizada a soma da nota à variável
“media”. E então é validada a expressão “i <= 9” novamente, sendo esta verdadeira,
o fluxo segue novamente para ser solicitada a próxima nota, a soma desta à variável
“media” e em seguida a validação da expressão novamente. Assim que a expressão
retornar false, devido a variável “i” ter o valor > 9, então será realizado o cálculo da
média, feita a tomada de decisão para saber se o valor da variável “media” é maior igual
a 7 para então apresentar a mensagem correta, e finalmente listar as notas informadas.
A seguir está nosso algoritmo implementado através de pseudocódigo, utilizando
o portugol, facilitando o entendimento.
10 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
TABELA 4.6 – PSEUDOCÓDIGO PARA O ALGORITMO DA SOLUÇÃO
Algoritmo calculaMediaAluno
Declara
i: inteiro
media: real
nome: caractere
vetNotas: vetor [0..9] de real
Inicio
media ← 0
Escreva(“Escreva o nome do aluno”)
Leia(nome)
para i de 0 ate 9 faca
Escreva(“Escreva a próxima nota do aluno”)
Leia( vetNotas[i] )
media ← media + vetNotas[i]
fim_para
media ← media / (i + 1)
se media >= 7 então
Escreva(“Aluno ”, nome, “ aprovado”)
senão
Escreva(“Aluno ”, nome, “ reprovado”)
fim_se
para i de 0 ate 9 faca
Escreva(“Nota ”, vetNotas[i])
fim_para
Fim
FONTE: O autor
11
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
Agora, analise o código-fonte acima. Esta é a solução para o problema apresentado.
Perceba o quão importante é um vetor, que neste caso nos auxiliou em armazenar a lista
de notas do aluno, e não precisamos criar uma variável para cada nota, que resultariam
em dez variáveis. Ao invés disso, criamos apenas uma variável do tipo vetor. Note
ainda que, caso tivéssemos criado uma variável para cada nota, teríamos a replicação
de linhas, uma para cada variável, tanto para atribuir cada nota quanto para, no final,
listar cada nota que foi informada pelo usuário.
2.4. EXEMPLO PRÁTICO 2
Vamos seguir nosso raciocínio lógico e desenvolver a solução para mais um
problema através de vetores.
Problema: Implementar um programa que solicite ao usuário quatro marcas de
carros. Após cada marca informada, deve ser solicitado um modelo da marca. Ambos
devem ser gravados em listas diferentes para manter a mesma posição nas listas,
facilitando a leitura. Após o usuário concluir a digitação, devem ser listados cada marca
e seu modelo, por exemplo “Fiat Palio”, em uma única linha.
TABELA 4.7 – INSTRUÇÕES PARA O ALGORITMO
Início
1. Solicitar ao usuário as marcas e modelos, armazenando em listas diferentes.
2. Listar todas as marcas com seus modelos, uma marca/modelo por linha
Fim
FONTE: O autor
Agora que temos as instruções de nosso algoritmo, desenvolvemos o fluxograma,
apresentado a seguir.12 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
FIGURA 4.5 – FLUXOGRAMA PARA REPRESENTAR O ALGORITMO
FONTE: O autor
O fluxograma, acima, representa o nosso algoritmo, sendo que inicialmente
ele inicia em um loop, solicitando ao usuário a primeira marca, após primeira marca
informada é solicitado um modelo desta marca, e então o fluxo do programa retorna
para a expressão do loop, que se for ainda verdadeira, isto é, a variável “i” for menor ou
igual a 3, solicita outra marca e modelo ao usuário novamente. Essa repetição continua
até a variável “i” obter o valor 4, que então o fluxo é desviado para o próximo loop, em
que serão listadas as marcas com os modelos, até que novamente a variável “i” tenha
valor 4, enviando o fluxo do programa para o final.
A seguir está nosso algoritmo implementado através de pseudocódigo, utilizando
o portugol, facilitando o entendimento.
13
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
TABELA 4.8 – PSEUDOCÓDIGO PARA O ALGORITMO DA SOLUÇÃO
Algoritmo listaMarcaModelos
Declara
i: inteiro
vetMarca: vetor [0..3] de caractere
vetModelo: vetor [0..3] de caractere
Inicio
para i de 0 ate 3 faca
Escreval("Escreva a próxima marca")
Leia( vetMarca[i] )
Escreval("Escreva o próximo modelo")
Leia( vetModelo[i] )
fim_para
para i de 0 ate 3 faca
Escreval("Marca: ", vetMarca[i], " - Modelo: ", vetModelo[i])
fim_para
Fim
FONTE: O autor
Conforme pode-se observar, nosso algoritmo foi implementado de uma forma
muito simples graças aos vetores. Neste caso teríamos que criar quatro variáveis para
marcas e mais quatro para armazenar os modelos.
3. ESTRUTURA BIDIMENSIONAL (MATRIZES)
Estruturas de dados bidimensionais são referenciadas como tabelas, que é o
termo normalmente utilizado em gerenciamento de banco de dados para a estrutura
de gravação de dados (MANZANO; OLIVEIRA, 2014). Nesta seção são apresentadas
as operações de entrada (atribuição de valores), processamento e saídas nas matrizes
(estruturas bidimensionais) (MANZANO; OLIVEIRA, 2014). Nesta seção, sempre que
mencionado o termo matriz, entenda como estrutura bidimensional (tabela). As matrizes
também podem ser chamadas de variáveis indexadas bidimensionais.
3.1. MATRIZ BIDIMENSIONAL
Uma matriz pode ser descrita como uma tabela de valores, isto é, os valores são
atribuídos entre linhas e colunas, como uma planilha, por exemplo. Para procurar um
valor em uma matriz, é necessário saber em qual linha e em qual coluna o valor está
14 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
armazenado, sendo esta a origem da nomenclatura bidimensional (SOUZA et al., 2015).
Neste sentido, a matriz bidimensional possui duas dimensões, e possui mais de uma
coluna e mais de uma linha.
Observe a matriz que está sendo apresentada na Figura 4.6, a qual possui seis
linhas e seis colunas. Além disso, como está sendo apresentado, a contagem inicia-se
do zero, isto é, linha 0 e coluna 0, linha 1 e coluna 0 etc.
FIGURA 4.6 – FLUXOGRAMA PARA REPRESENTAR O ALGORITMO
FONTE: O autor
Observe o exemplo na Figura 4.7 a seguir, o qual é uma tabela de valores ou
uma matriz. Neste caso, para pegar o valor “Gol”, por exemplo, é necessário saber que
este se encontra na linha 1 e coluna 1, iniciando pelo zero. Outro exemplo seria o valor
“Palio”, o qual está armazenado na linha 2 e coluna 1, iniciando a contagem pelo zero.
FIGURA 4.7 – FLUXOGRAMA PARA REPRESENTAR O ALGORITMO
FONTE: O autor
Em quais situações pode ser utilizada uma matriz? Um exemplo seria no algoritmo
de modelos de veículos, desenvolvido anteriormente, no qual não precisaríamos de dois
vetores, mas sim de apenas uma matriz com duas colunas, uma seria para a marca e
outra para o modelo. Facilita ainda mais o trabalho na programação. Para pegar o valor
de uma matriz, chama-se o nome da variável seguida do número da linha vírgula o
número da coluna, ambos entre colchetes, por exemplo: matriz[0, 4]. Veja a seguir um
exemplo para utilização de uma matriz.
15
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
FIGURA 4.7 – FLUXOGRAMA PARA REPRESENTAR O ALGORITMO
TABELA 4.9 – EXEMPLO DE UTILIZAÇÃO DE UMA MATRIZ
Algoritmo "matrizModeloMarca"
Var
i: inteiro
matriz : vetor[0..3, 0..1] de caractere
Inicio
para i de 0 ate 3 faca
Escreval("Informe a marca")
Leia( matriz[i, 0] )
Escreval("Informe o modelo")
Leia( matriz[i, 1] )
Fimpara
para i de 0 ate 3 faca
Escreval("Marca ", matriz[i, 0], " - Modelo ", matriz[i, 1])
fimpara
Fimalgoritmo
FONTE: O autor
Perceba que no exemplo acima, o programa solicita ao usuário que informe a
marca, a qual é armazenada na posição 0 (zero) da matriz, e logo em seguida solicita um
modelo para que o usuário o informe, o qual é armazenado na posição 1 da matriz. No
final, as marcas, juntamente com os modelos que estão na mesma linha, são impressos na
tela. Porém, podemos tornar nossa lógica um pouco mais dinâmica, a última repetição,
que lista as marcas e seus modelos, poderíamos implementar um comando “para”
interno, assim não precisamos chamar a coluna com valor fixo. Veja como ficou.
16 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
TABELA 4.10 – EXEMPLO DE UTILIZAÇÃO DE UMA MATRIZ
Algoritmo "matrizModeloMarca"
Var
i: inteiro
matriz : vetor[0..3, 0..1] de caractere
Inicio
para i de 0 ate 3 faca
Escreval("Informe a marca")
Leia( matriz[i, 0] )
Escreval("Informe o modelo")
Leia( matriz[i, 1] )
Fimpara
para i de 0 ate 3 faca
para j de 0 ate 1 faca
Escreval("Marca ", matriz[i, j], " - Modelo ", matriz[i, j])
fimpara
fimpara
Fimalgoritmo
FONTE: O autor
3.2. LEITURA DOS DADOS DE UMA MATRIZ
Um exemplo exposto por Manzano e Oliveira (2014) é o caso da leitura de quatro
notas (colunas da matriz) de oito alunos (linhas da matriz), que neste caso armazena 32
valores ou elementos. Neste exemplo, citado por Manzano e Oliveira (2014), utiliza-se a
variável “i” para controle das linhas e a variável “j” para controlar as colunas. Analise
o diagrama apresentado, que representa o algoritmo.
17
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
FIGURA 4.8 – FLUXOGRAMA PARA LEITURA DOS ELEMENTOS DE UMA
MATRIZ
FONTE: Manzano e Oliveira (2014)
A inicialização das variáveis “i” e “j” é com 1 neste caso, pois a matriz foi definida
como de uma até oito linhas e de uma até quatro colunas. O diagrama acima nos mostra
que a leitura é realizada na primeira linha da primeira coluna. Logo depois é iniciado
o laço de repetição da variável “i”, controlando os elementos das linhas, e dentro deste
laço de repetição é realizado um segundo laço de repetição para a variável “j”, a qual
controla as colunas (MANZANO; OLIVEIRA, 2014).
Ao serem iniciados os valores para o preenchimento da matriz, eles são colocados
na posição Notas [1, 1], sendo o primeiro valor a linha e o segundo a coluna, então
informa-se para o primeiro aluno a sua primeira nota. Depois disso, incrementa-se 1 na
variável “j” (coluna), sendo colocada a posição Notas[1, 2], sendo informada ao aluno
1 a sua segunda nota (MANZANO; OLIVEIRA, 2014).
Assim que a variável “j” atingir o valor 4, o loop interno acaba, sendo incrementado
1 na variável “i” que começará a executar a segunda vez o seu loop, ou seja, pegando a
linha 2 da matriz. Neste caso, inicia-se o loop interno da variável “j” novamente, pegando
a posição Notas[2, 1], ou seja, linha 2 (aluno) e a coluna 1 (primeira nota). Estas repetições
acontecem até que a variável “i”,contador de linhas atinja seu número máximo, 4. Veja
a seguir a implementação deste algoritmo em pseudocódigo.
18 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
TABELA 4.11 – EXEMPLO DE UTILIZAÇÃO DE UMA MATRIZ
Algoritmo "lerElementos"
Var
i, j : inteiro
Notas : vetor[1..8, 1..4] de real
Inicio
para i de 1 ate 8 faca
para j de 1 ate 4 faca
Leia ( Notas[i, j] )
fimpara
fimpara
Fimalgoritmo
FONTE: O autor
Este algoritmo funciona jogando o valor inicial para todas as posições, linhas
e colunas, para zero na inicialização. O programa aguarda o usuário informar,
sequencialmente, as notas de cada aluno. Assim que digitadas as quatro notas de um
determinado aluno, inicia-se o próximo aluno, e assim sucessivamente até concluir a
digitação das quatro notas dos oito alunos. É um algoritmo simples, mas que representa
a mesma lógica desenvolvida no fluxograma acima. Este algoritmo nos apresenta como
utilizamos uma matriz.
3.3. EXEMPLO PRÁTICO
Vamos aqui demonstrar uma aplicação prática de uma matriz.
Problema: Implementar um programa que utilize a estrutura de uma matriz
para armazenar o contato de quatro pessoas, contendo o nome, e-mail e o seu telefone,
os quais devem ser armazenados em coluna. Neste sentido, cada linha refere-se a uma
pessoa diferente. No final, listar os dados de cada contato em uma única linha.
TABELA 4.12 – INSTRUÇÕES PARA O ALGORITMO ATUAL
Início
1. Solicitar ao usuário o nome do contato e armazenar na coluna zero.
2. Solicitar ao usuário o e-mail do contato e armazenar na coluna 1.
3. Solicitar ao usuário o telefone do contato e armazenar na coluna 2.
4. Listar todos os dados de cada usuário em uma única linha.
Fim
FONTE: O autor
19
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
Agora que desenvolvemos as instruções para a solução do problema atual, segue
o fluxograma que representa nosso algoritmo.
FIGURA 4.9 – FLUXOGRAMA PARA SOLUÇÃO DO PROBLEMA ATUAL
FONTE: O autor
Este algoritmo inicia-se com o loop da variável “i”, a qual é inicializada com
zero, que se refere às linhas de nossa matriz, isto é, cada contato. Logo, um segundo
loop, interno, para a variável “j” é iniciado, que equivale a cada coluna sendo passada
na matriz. A cada incremento da variável “j”, é um campo que está sendo solicitado ao
usuário. Quando a variável “j” estiver com zero, é solicitado o nome; quando estiver
com 1, é solicitado o e-mail, e quando estiver com 2, é solicitado o telefone. Assim que
concluir o loop interno, da variável “j”, é incrementado 1 na variável “i”, e realizada
nova repetição, até que a variável “i” alcance seu valor máximo aceito, que neste caso
é 4, isto é, quatro contatos a serem armazenados.
Veja a seguir o algoritmo atual em pseudocódigo.
20 ALGORITMO
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
TABELA 4.13 – PSEUDOCÓDIGO PARA O ALGORITMO ATUAL
Algoritmo "armazenaContatos"
Var
i, j : inteiro
auxiliar : caractere
contato : vetor[0..3, 0..2] de caractere
Inicio
para i de 0 ate 3 faca
para j de 0 ate 2 faca
se j = 0 entao
auxiliar <- "nome"
senao
se j = 1 entao
auxiliar <- "e-mail"
senao
auxiliar <- "telefone"
fimse
fimse
Escreval("Informe o ", auxiliar)
Leia ( contato[i, j] )
fimpara
fimpara
para i de 0 ate 3 faca
auxiliar <- ""
para j de 0 ate 2 faca
auxiliar <- auxiliar + " " + contato[i, j]
fimpara
Escreval(auxiliar)
fimpara
Fimalgoritmo
FONTE: O autor
Analise a lógica utilizada no código-fonte acima. Conforme representado pelo
fluxograma, temos dois laços de repetição, um dentro do outro, sendo o mais externo o
que sinaliza a próxima linha da matriz e o segundo troca a coluna da matriz. Apenas por
uma questão visual, foi criada a variável “auxiliar”, do tipo caractere, a qual serve para
receber o nome do campo atual que será solicitado para o usuário. No final do algoritmo,
quando são listados na tela todos os contatos, a variável “auxiliar” é reutilizada com
outro propósito, isto é, para serem concatenados todos os campos do contato atual,
para a seguir ser impressa.
21
Copyright © UNIASSELVI 2016. Todos os direitos reservados.
ALGORITMO
REFERÊNCIAS
MANZANO, J. A. N. G.; OLIVEIRA, J. F. Algoritmos: lógica para desenvolvimento de
programação de computadores. São Paulo: Érica, 2014.
SOUZA, M. A. F. et al. Algoritmos e lógica de programação: um texto introdutório para a
engenharia. São Paulo: Cengage Learning, 2015.
Centro Universitário Leonardo da Vinci
Rodovia BR 470, km 71, n° 1.040, Bairro Benedito
Caixa postal n° 191 - CEP: 89.130-000 - lndaial-SC
Home-page: www.uniasselvi.com.br