Buscar

Aula 6

Prévia do material em texto

Aula 6 – O que são vetores e como utilizá-los
Conceito de Vetor
Os vetores, também chamados de arranjos, ou arrays unidimensionais, são estruturas capazes de armazenar inúmeros dados de um mesmo 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.
Um vetor, também chamado de arranjo, 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.
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. 
Os valores guardados pelo vetor devem ser do mesmo tipo. Por exemplo, um vetor de nomes (como se fosse uma lista) ou um vetor de número de telefones etc.
Os vetores possuem índices. Os índices são números que nos indicam qual é a posição do vetor que guarda determinado valor. Uma coisa importante que devemos lembrar, também, é que o índice de um vetor começa em zero. Isso será bem importante para quando estivermos andando por esse vetor.
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.
Lembre-se de que um vetor armazena vários dados do mesmo tipo. Imagine que queremos armazenar o cadastro de 3 pessoas, com nome, e-mail 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. 
Nas linguagens tipadas, os valores atribuídos a um vetor devem ser, obrigatoriamente, do mesmo tipo (é a abordagem que estamos adotando nesta obra). O JavaScript é uma linguagem não tipada, ou seja, o vetor pode receber vários tipos de dados. 
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 momento, o sistema reserva um espaço de memória para receber nossos dados.
Agora, basta inserirmos valores em nosso vetor e acessarmos esse conteúdo.
Manipulando vetores
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", "André", "Bruna"];
Declaramos o vetor chamado “nome” e atribuí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 André 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”.
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, tínhamos que saber os valores, ou seja, eles já foram programados assim. 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 termos 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 terminarmos (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.
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.
Voltando ao nosso exemplo, queremos inserir o nome, o e-mail e o número de telefone de 3 pessoas para um cadastro. Nesse caso, vamos 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, e-mail 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 1ª pessoa, 2ª pessoa, 3ª 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.
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.
Pesquisa de vetores
Uma vez preenchido o vetor, podemos efetuar buscas, procurando um valor específico, por exemplo. Imagine nosso vetor de idades na 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 (você poderá relembrá-la abaixo) e procurar a idade 46. Se acharmos, vamos exibir, na tela, em qual posição ele está. Se não acharmos, exibimos que a idade não está cadastrada, ok?
Observe que estamos usando a variável “achou” para saber se a idade 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, posiçã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 última 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 dizerque 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 6ª posição (índice 5).
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 idade que ele escolher, tudo bem?
Vamos observar como ficou nosso novo algoritmo:
var idade = [];
var achou = 'n', resp = 's';
var idade_procurar;
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.
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.
Esse algoritmo foi alterado para cadastrar quantas pessoas o usuário quiser:
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");
}
 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");
}

Continue navegando