Baixe o app para aproveitar ainda mais
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
Compartilhar