Baixe o app para aproveitar ainda mais
Prévia do material em texto
89 M aterial para uso exclusivo de aluno m atriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e o com partilham ento digital, sob as penas da Lei. © Editora Senac São Paulo. Capítulo 6 Algoritmos – vetores Estamos na era da informação e todos os dados são de extrema importância para tomar decisões e entender padrões. Na computação, devemos ter muito cuidado ao armazenar e manipular dados. Para isso, devemos utilizar as melhores estruturas e recursos dispo- níveis em cada linguagem e em cada dispositivo. Até agora, armazena- mos dados em variáveis simples, ou seja, espaços de memória capazes de guardar apenas um valor por vez. Entretanto, em várias ocasiões, devemos guardar vários dados de uma só vez. Existem estruturas muito eficientes que nos ajudam nessas situa- ções. Veremos uma delas neste capítulo. 90 Algoritmos e programação I Ma te ria l p ar a us o ex cl us ivo d e al un o m at ric ul ad o em c ur so d e Ed uc aç ão a D is tâ nc ia d a Re de S en ac E AD , d a di sc ip lin a co rre sp on de nt e. P ro ib id a a re pr od uç ão e o c om pa rti lh am en to d ig ita l, s ob a s pe na s da L ei . © E di to ra S en ac S ão P au lo .Os vetores, também chamados de arranjos, ou arrays unidimensio- nais, são estruturas capazes de armazenar inúmeros dados de um mes- mo tipo, como uma lista de nomes de alunos ou as idades de todas as pessoas que votaram em uma seção de uma zona eleitoral. Neste capítulo, vamos estudar os conceitos dos vetores e como po- demos manipular dados nessas estruturas, principalmente inserir e pro- curar valores específicos. Para isso, devemos ficar atentos aos índices de cada posição do vetor. 1 Conceito de vetor A palavra vetor tem vários significados, dependendo da área de atua ção. O conceito de vetor pode ser utilizado na matemática, na física e até na biologia, mas nosso interesse, nesse momento, é entender os conceitos de vetores na computação. De acordo com Guedes (2014), um vetor, também chamado de ar- ranjo, ou simplesmente array, é uma estrutura de dados que agrupa vá- rios dados do mesmo tipo. O vetor também pode ser conhecido como um array unidimensional, com um tamanho (predefinido ou não) que podemos acessar por um índice. PARA SABER MAIS Algumas linguagens de programação exigem a definição do tamanho do vetor na declaração dessa variável. Esses vetores são considerados estáticos. Algumas linguagens não exigem a definição do tamanho do vetor. Esses vetores são chamados dinâmicos. O JavaScript não exige a definição do tamanho do vetor. Para saber mais sobre o assunto leia o capítulo 4 do livro de Forbellone e Eberspacher (2005), Lógica de programação: a construção de algoritmos e estruturas de dados. 91Algoritmos – vetores M aterial para uso exclusivo de aluno m atriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e o com partilham ento digital, sob as penas da Lei. © Editora Senac São Paulo. Parece difícil de entender, não é? Então, vamos simplificar toda essa teoria com uma analogia prática. Imagine que seu colega no trabalho queira fazer um churrasco na casa dele e convide todos os amigos. Você fica todo empolgado para ir ao encontro da turma, mas precisa do endereço dele para poder chegar. Ele passa o nome da rua e o número da casa. Pronto! Com essas informações, você consegue chegar até o churrasco. Em nossa analogia, a rua é o vetor, o número da casa é o índice e o churrasco é o valor guardado dentro desse espaço. Dessa forma, pode- mos nos perguntar: o vetor é uma memória? Na verdade, vetor é uma estrutura que armazena vários dados do mesmo tipo. O que nossa rua “armazena”? Várias casas, certo? Vamos dizer que essas casas são elementos do mesmo tipo (não importa o tamanho ou a cor da casa, mas que são construções que servem de lar para famílias). Entretanto, para saber qual é a casa certa (no caso, do seu amigo), precisamos de um índice que a localize nessa rua. Esse índice é o número da casa. Uma vez encontrada a casa, você pode acessar seu conteúdo (o churrasco, no caso). Simples, não? Então, vamos mostrar como um vetor funciona. A fi gura 1 mostra o esquema de um vetor unidimensional que vamos utilizar em nossos exemplos. Note que esse vetor possui um “nome”, “idade” e todas as “casas” possuem um índice (números inteiros iniciados em zero). Para encontrarmos um valor armazenado dentro de uma dessas casas, devemos “andar” cada uma das casas procurando nosso conteúdo. Figura 1 – Representação esquemática de um vetor 18 10 9 28 25 46 2 55 36 14 0 1 2 3 4 5 6 7 8 9 Caminhar (varrer) pelos índices 92 Algoritmos e programação I Ma te ria l p ar a us o ex cl us ivo d e al un o m at ric ul ad o em c ur so d e Ed uc aç ão a D is tâ nc ia d a Re de S en ac E AD , d a di sc ip lin a co rre sp on de nt e. P ro ib id a a re pr od uç ão e o c om pa rti lh am en to d ig ita l, s ob a s pe na s da L ei . © E di to ra S en ac S ão P au lo .E, para caminhar (ou varrer) um vetor, usaremos uma estrutura já conhecida por nós: o laço de repetição “for”. O que acontece, na prática, é começarmos no primeiro índice (zero) e verificarmos o conteúdo dessa casa. Se for o que procuramos, saímos do laço, se- não andamos uma casa e verificamos o conteúdo da próxima casa e assim por diante. Caso cheguemos até o final e não encontremos o conteúdo que queríamos, podemos dizer que o vetor não possui o valor procurado. Por exemplo, imagine que o usuário queira buscar a idade de um idoso nesse vetor (ou seja, idades acima de 60 anos). Vamos varrer o vetor inteiro e não vamos encontrar essa idade. Ao sair do laço, basta- ria exibirmos, na tela, que não há nenhum idoso registrado no sistema, por exemplo. 1.1 Declarando um vetor Conseguiu compreender o conceito de vetor? Vamos dar alguns exemplos práticos para que você possa entender a aplicabilidade des- sa importante estrutura utilizada por todos os programadores. Lembre- se de que um vetor armazena vários dados do mesmo tipo. Imagine que queremos armazenar o cadastro de 3 pessoas, com nome, email e número do telefone. Essas informações têm tipos diferentes: nome e e-mail são do tipo caractere e número de telefone é inteiro. O que fazer nesse caso? Vamos utilizar 3 vetores, um para cada tipo de dado. Qual o tamanho de cada vetor? Nesse caso, nossos vetores terão tamanho 3 (pois vamos armazenar 3 pessoas). Porém, segundo Flanagan (2013), o JavaScript não exige a definição desse tamanho, portanto não vamos nos preocupar com isso. 93Algoritmos – vetores M aterial para uso exclusivo de aluno m atriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e o com partilham ento digital, sob as penas da Lei. © Editora Senac São Paulo. PARA SABER MAIS Nas linguagens tipadas, os valores atribuídos a um vetor devem ser, obrigatoriamente, do mesmo tipo (é a abordagem que estamos ado- tando nesta obra). O JavaScript é uma linguagem não tipada, ou seja, o vetor pode receber vários tipos de dados. Para saber mais sobre o assunto, leia o capítulo 9 do livro de Flanagan (2013), JavaScript: o guia definitivo. Para declararmos um vetor em JavaScript, basta definir seu nome e atribuir colchetes a esta variável: var nome = []; Quando atribuímos os colchetes a uma variável, estamos avisando à IDE que se trata de um vetor (array unidimensional). Nesse momen- to, o sistema reserva um espaço de memória para receber nossos da- dos. Como não sabemos quantos dados vamos atribuir a esse vetor, a memória trabalha dinamicamente, ou seja, ela vai reservando espa- ço conformea necessidade. Não precisamos nos preocupar com esta questão, mas, por trás de tudo isso, existem algoritmos, intrínsecos à linguagem, trabalhando para tudo funcionar perfeitamente. Agora, basta inserirmos valores em nosso vetor e acessarmos esses conteúdos. 2 Manipulando vetores Manipular dados é umas das coisas mais importantes em computa- ção. Segundo Xavier (2014), existem operações básicas para manipula- ção de dados, como inserção e busca, muito utilizadas em arrays unidi- mensionais. Podemos brincar um pouco com essas operações com a ajuda da estrutura de repetição “for” (usada para varrer o vetor). 94 Algoritmos e programação I Ma te ria l p ar a us o ex cl us ivo d e al un o m at ric ul ad o em c ur so d e Ed uc aç ão a D is tâ nc ia d a Re de S en ac E AD , d a di sc ip lin a co rre sp on de nt e. P ro ib id a a re pr od uç ão e o c om pa rti lh am en to d ig ita l, s ob a s pe na s da L ei . © E di to ra S en ac S ão P au lo . 2.1 Inserindo dados no vetor Existem várias maneiras de inserir dados em um vetor utilizando JavaScript. Vamos começar com a mais simples e inserir os dados na declaração do vetor. var nome = [“Allen”, “Andre”, “Bruna”]; Entendeu o que fizemos? Declaramos o vetor chamado “nome” e atri- buímos 3 valores a ele. Isso significa que a “casa” indicada pelo índice zero (0) possui o valor Allen, a “casa” indicada pelo índice um (1) possui o valor Andre e a “casa” indicada pelo índice dois (2) possui o valor Bruna. Se quisermos exibir na tela o primeiro conteúdo, basta exibir o nome da variável e seu índice entre colchetes. Veja o exemplo: var nome = [“Allen”, “Andre”, “Bruna”]; alert (nome[0]); O comando alert (nome[0]) vai exibir, na tela, o conteúdo do vetor chamado “nome”, mas no índice zero(0). Portanto, será exibido “Allen”. Se usarmos o comando alert (nome[1]) será exibido “Andre” e assim por diante. Outra forma de atribuirmos os valores ao nosso vetor é inserindo os dados depois, ao longo do programa. Por exemplo: var nome = []; // OUTROS COMANDOS nome = [“Allen”, “Andre”, “Bruna”]; Nesse caso, atribuímos os valores depois, no meio do programa. De qualquer forma, tanto no primeiro exemplo quanto nesse anterior, 95Algoritmos – vetores M aterial para uso exclusivo de aluno m atriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e o com partilham ento digital, sob as penas da Lei. © Editora Senac São Paulo. tínhamos que saber os valores, ou seja, eles já foram programados as- sim. Mas não é assim que acontece em sistemas reais. É o usuário que vai digitar os valores a serem inseridos no sistema, quando realizar um cadastro, por exemplo. Nesse caso, teremos que utilizar um laço de repetição e “andar” cada posição do vetor inserindo os valores desejados. Para isso, basta ter- mos uma variável simples indicando o índice da “casa”. A cada inserção, essa variável é incrementada em 1. E podemos parar o laço quando chegarmos ao fim (no caso de vetores estáticos) ou quando o usuário não quiser mais inserir valores. Veja como ficaria um exemplo para preencher os nomes de alunos no vetor “nome”: var nome = []; var resp = ‘s’; for (i=0; resp == ‘s’; i++){ nome[i] = prompt (“Digite o nome do aluno”); resp = prompt (“Deseja continuar? s/n”); } Observe o que fizemos: dentro do laço “for”, pedimos para o usuário digitar o nome do aluno. Esse valor foi atribuído ao vetor “nome” posição “i” (i é a variável que guardará o índice do vetor). Ele começa em zero e é incrementado em 1 (i++) a cada iteração. “Resp” é uma variável que guardará a resposta do usuário se deseja continuar a inserir valores. Caso ele digite “s” (sim), o laço continua. Caso digite “n” (não), o laço para de ser executado e o programa continua. 96 Algoritmos e programação I Ma te ria l p ar a us o ex cl us ivo d e al un o m at ric ul ad o em c ur so d e Ed uc aç ão a D is tâ nc ia d a Re de S en ac E AD , d a di sc ip lin a co rre sp on de nt e. P ro ib id a a re pr od uç ão e o c om pa rti lh am en to d ig ita l, s ob a s pe na s da L ei . © E di to ra S en ac S ão P au lo .Observe que, para que o laço “for” seja executado pela primeira vez, o valor de “resp” deve ser “verdadeiro”. Por isso, atribuímos “s” assim que a declaramos. Rode esse algoritmo e veja o resultado. Voltando ao nosso exemplo, queremos inserir o nome, o email e o número de telefone de 3 pessoas para um cadastro. Nesse caso, va- mos declarar 3 vetores e manipulálos juntos, no mesmo “for”. Veja o algoritmo: var nome = [], email = [], tel = []; for (i=0; i < 3; i++){ nome[i] = prompt (“Digite o nome da “ + (i+1) + “a pessoa”); email[i] = prompt (“Digite o email da “ + (i+1) + “a pessoa”); tel[i] = prompt (“Digite o telefone da “ + (i+1) + “a pessoa”); alert (“\n”); } Na primeira linha, declaramos os 3 vetores: nome, email e telefone. No laço “for”, a condição de parada é o “i” ser 3 ou mais (pois sabemos exatamente quantas pessoas queremos cadastrar). Observe que, no meio da frase de cada prompt (), colocamos um (i+1). É só para dar um efeito de 1a pessoa, 2a pessoa, 3a pessoa. A última linha (antes de fechar chave) tem o comando alert (“\n”). Sempre que você colocar essa barra invertida seguida da letra n, significa que, nesse ponto, você quer pular uma linha. Caso queira pular duas linhas, coloque dois \n\n. Quando rodamos o algoritmo, produziremos o seguinte resultado: 97Algoritmos – vetores M aterial para uso exclusivo de aluno m atriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e o com partilham ento digital, sob as penas da Lei. © Editora Senac São Paulo. Observe um detalhe: na condição lógica do laço de repetição “for”, colocamos “i < 3”. Por que não “i <= 3”? Porque o vetor nunca terá índice 3 (apesar de ter 3 posições). Isso porque o índice sempre começa em zero. Daqui a pouco aprenderemos a saber o tamanho de um vetor, caso o usuário decida inserir vários valores. 2.2 Pesquisa em vetores Uma vez preenchido o vetor, podemos efetuar buscas, procurando um valor específico, por exemplo. Imagine nosso vetor de idades, no qual queremos verificar a idade igual a 46 anos. Como procurar esse valor? E o que podemos exibir na tela? Vamos fazer o seguinte: criar o vetor “idade” com os mesmos valores da figura 1 e procurar a idade 46. Se acharmos, vamos exibir, na tela, em qual posição ele está. Se não acharmos, exibiremos que a idade não está cadastrada, OK? 98 Algoritmos e programação I Ma te ria l p ar a us o ex cl us ivo d e al un o m at ric ul ad o em c ur so d e Ed uc aç ão a D is tâ nc ia d a Re de S en ac E AD , d a di sc ip lin a co rre sp on de nt e. P ro ib id a a re pr od uç ão e o c om pa rti lh am en to d ig ita l, s ob a s pe na s da L ei . © E di to ra S en ac S ão P au lo .Como temos o valor específico que estamos procurando, basta “olharmos” para cada posição do vetor e comparar com o valor 46. Nesse caso, temos duas condições de parada: 1. O laço vai parar quando encontrarmos o valor. 2. O laço vai parar quando chegarmos ao final e não encontrarmos nada. Temos que considerar os dois casos na expressão lógica do laço “for”. Vamos ver como ficaria nosso algoritmo: var idade = [18, 19, 9, 28, 25, 46, 2, 55, 36, 14]; var achou = ‘n’; for (i=0; (achou == ‘n’ && i < 10); i++){ if (idade[i] == 46){ achou = ‘s’; } } if (achou == ‘n’){ alert (‘Não consta o cadastro dessa idade’); } else{ alert (‘A idade 46 está cadastrada na posição ‘ + i); } 99Algoritmos – vetores M aterial para uso exclusivo de aluno m atriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente.Proibida a reprodução e o com partilham ento digital, sob as penas da Lei. © Editora Senac São Paulo. Observe que estamos usando a variável “achou” para saber se a ida- de está cadastrada ou não. Ela começa com o valor “n” para entrar no laço de repetição. Dentro do laço, perguntamos se o valor da idade, po- sição “i”, é igual a 46. Caso seja, a variável “achou” muda para “s” e o laço se encerra. Caso contrário, continuamos varrendo o vetor. A segunda condição é se “i” for igual a 10. Como nosso vetor tem 10 posições, seus índices vão de 0 a 9. Quando o valor de “i” for igual a 10 e não achamos a idade, significa que ela não está cadastrada. Porém, isso pode gerar um problema: e se o valor procurado for encontrado na últi- ma posição? A variável “i” será 10 e a idade foi encontrada. Como você resolveria isso? Pense um pouco, vamos resolver no próximo exemplo. A estrutura “if” depois do laço quer saber por qual motivo saímos do laço “for”: se “i” for igual a 10, quer dizer que não encontramos a idade, por isso exibimos a frase “Não consta o cadastro dessa idade”. Caso contrário, encontramos a idade e vamos exibir em qual posição ela está. Observe que a idade 46 está cadastrada na 6a posição (índice 5). Ao rodar esse algoritmo, obteremos o seguinte resultado: Entretanto, nesse exemplo, sabemos quantas posições o vetor tinha. E se não soubéssemos? Como ficaria? Vamos refazer esse algoritmo para que o usuário insira quantas idades ele quiser e procuremos a ida- de que ele escolher, tudo bem? Vamos observar como ficou nosso novo algoritmo: var idade = []; var achou = ‘n’, resp = ‘s’; var idade_procurar; (cont.) 100 Algoritmos e programação I Ma te ria l p ar a us o ex cl us ivo d e al un o m at ric ul ad o em c ur so d e Ed uc aç ão a D is tâ nc ia d a Re de S en ac E AD , d a di sc ip lin a co rre sp on de nt e. P ro ib id a a re pr od uç ão e o c om pa rti lh am en to d ig ita l, s ob a s pe na s da L ei . © E di to ra S en ac S ão P au lo . for (i=0; resp == ‘s’; i++){ idade[i] = prompt (“Digite uma idade”); resp = prompt (“Deseja continuar? s/n”); } idade_procurar = parseInt (prompt (“Qual idade deseja procurar?”)); for (i=0; (achou == ‘n’ && idade.length > i); i++){ if (idade[i] == idade_procurar){ achou = ‘s’; } } if (achou == ‘n’){ alert (“Não consta o cadastro dessa idade”); } else{ alert (“A idade “ + idade_procurar + “ está cadastrada na posição “ + i); } Observe que, como não sabemos o tamanho do vetor, precisamos utilizar o length para indicálo e comparálo com o valor de “i”. Caso a variável “i” seja menor que o tamanho do vetor e a idade não tiver sido encontrada, continua no laço. Para qualquer uma dessas expressões que se tornar “falsa”, o laço se encerra e o programa continua. 101Algoritmos – vetores M aterial para uso exclusivo de aluno m atriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e o com partilham ento digital, sob as penas da Lei. © Editora Senac São Paulo. Observe também que, para corrigir o problema de encontrarmos o valor na última posição, mudamos a expressão lógica do último “if”. Se “achou” não alterar seu valor, significa que realmente não encontramos o valor no vetor. Entendeu o que fizemos nesse exemplo? If (resp == “SIM”) { Alert (“Maravilha. Você está indo muito bem!”); } else { Alert (“Tenha calma. Releia os capítulos e faça todos os exercícios.”); } Antes de terminarmos este capítulo, vamos completar nosso exercí- cio do cadastro das 3 pessoas e exibir os dados na tela. Veja o exercício terminado: var nome = [], email = [], tel = []; var resp = ‘s’; for (i=0; resp == ‘s’; i++){ nome[i] = prompt (“Digite o nome da “ + (i+1) + “a pessoa”); email[i] = prompt (“Digite o email da “ + (i+1) + “a pessoa”); tel[i] = prompt (“Digite o telefone da “ + (i+1) + “a pessoa”); alert (“\n”); resp = prompt (“Deseja continuar? s/n”); alert (“\n”); (cont.) 102 Algoritmos e programação I Ma te ria l p ar a us o ex cl us ivo d e al un o m at ric ul ad o em c ur so d e Ed uc aç ão a D is tâ nc ia d a Re de S en ac E AD , d a di sc ip lin a co rre sp on de nt e. P ro ib id a a re pr od uç ão e o c om pa rti lh am en to d ig ita l, s ob a s pe na s da L ei . © E di to ra S en ac S ão P au lo . } alert (“Essas são as pessoas cadastradas em nosso sistema:\n”); for (i=0; nome.length > i; i++){ alert (“O(A) sr(a) “ + nome[i] + “ possui o telefone: “ + tel[i] + “ e email: “ + email[i] + “\n”); } Esse algoritmo foi alterado para cadastrar quantas pessoas o usu- ário quiser. Dê uma boa estudada em cada comando, em cada linha de código e faça as alterações que achar necessário para tornar nosso sistema cada vez melhor e mais eficiente. Por fim, temos uma tarefa a fazer: continue nosso projeto de software do boletim acadêmico do aluno. Você tem, praticamente, todas as es- truturas necessárias para completar o projeto. Caso queira deixar o pro- grama mais profissional, leia as bibliografias indicadas em cada capí- tulo. Lá tem muita coisa interessante para você se tornar um excelente profissional de tecnologia da informação. 103Algoritmos – vetores M aterial para uso exclusivo de aluno m atriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e o com partilham ento digital, sob as penas da Lei. © Editora Senac São Paulo. Considerações finais As estruturas de armazenamento conhecidas como vetores ou arrays unidimensionais são muito utilizadas na programação e ajudam muito na manipulação de dados. Os vetores possuem índices, que são as indicações das “casas” onde os valores são armazenados. Para “varrer” um vetor, ou seja, andar da primeira até a última casa, po- demos fazer uso da estrutura de repetição “for”, na qual iniciamos o índice em zero e o incrementamos em 1 à medida que avançamos com o vetor. Para inserir valores em um vetor, basta indicar o nome do vetor e a posição na qual o valor será inserido. O índice deve estar entre colche- tes. Lembre-se de sempre de criar uma condição de saída do laço de repetição para evitarmos ficar presos nele no chamado loop infinito. Para buscar um valor em um vetor, precisamos compará-lo a cada posição do vetor. Nesses casos, temos duas condições de saída do laço: a primeira se encontrarmos o valor procurado e a segunda caso não en- contremos o valor, mesmo tendo varrido toda a estrutura. Atente-se a contemplar as duas possibilidades de saída na estrutura de repetição. É muito importante que você treine bastante e entenda cada passo da manipulação de dados com o uso de array unidimensional. Ele será muito útil para que você possa construir seu projeto de software. Referências FLANAGAN, David. JavaScript: o guia definitivo. 6. ed. Porto Alegre: Bookman, 2013. FORBELLONE, André Luiz Villar; EBERSPACHER, Henri Frederico. Lógica de programação: a construção de algoritmos e estruturas de dados. São Paulo: Pearson Prentice Hall, 2005. 104 Algoritmos e programação I Ma te ria l p ar a us o ex cl us ivo d e al un o m at ric ul ad o em c ur so d e Ed uc aç ão a D is tâ nc ia d a Re de S en ac E AD , d a di sc ip lin a co rre sp on de nt e. P ro ib id a a re pr od uç ão e o c om pa rti lh am en to d ig ita l, s ob a s pe na s da L ei . © E di to ra S en ac S ão P au lo .GUEDES, Sérgio. Lógica de programação algorítmica. São Paulo: Pearson Prentice Hall, 2014. XAVIER, Gley Fabiano Cardoso. Lógica de programação. São Paulo: Editora Senac São Paulo, 2014.
Compartilhar