Você está na página 1de 33

Vetores

Programao em Java Prof. Maurcio Braga

Vetores

At agora sempre utilizamos variveis definidas a partir de tipos bsicos de dados.

Cada varivel s capaz de armazenar um dado por vez.

Existem situaes em que necessrio armazenar uma grande quantidade de dados na memria ao mesmo tempo.

Esta quantidade torna invivel a criao de variveis para cada um dos dados a ser armazenado.

Para estes casos, poderemos criar variveis a partir de tipos de dados estruturados.

Um tipo de dado estruturado aquele formado pela juno ou combinao de tipos bsicos, definindo apenas uma varivel que o represente.

2/33

Vetores

Considere o problema de ordenao de 3 valores


Variveis A, B, C : inteiro; Incio ler A; ler B; ler C; se A > B ento se B > C ento escrever A, > , B, > , C seno se A > C ento escrever A, > , C, > , B seno escrever C, > , A, > , B seno se B > C ento se A > C ento escrever B, > , A, > , C seno escrever B, > , C, > , A seno escrever C, > , B, > , A; Fim 3/33

Vetores

Agora considere o mesmo problema, porm, para ordenar de forma decrescente 10 nmeros inteiros
Este

problema apresenta 3.628.800 resultados diferentes Desconforto de trabalhar com 10 nomes de variveis diferentes necessrio o emprego de variveis do tipo vetor para a resoluo deste problema.
4/33

Vetores

Vetor (ou array) uma estrutura de dados composta por uma quantidade determinada de elementos de um mesmo tipo.
Como

armazena sempre dados do mesmo tipo, dizse que vetores so estruturas de dados homogneas.

5/33

Vetores

Ao apresentar o conceito de varivel, dissemos que ela funciona como uma caixa na memria do computador, capaz de armazenar um nico dado de um determinado tipo. Por analogia, podemos imaginar um vetor como um conjunto de variveis agrupadas sob um mesmo nome, todas de um mesmo tipo.

O vetor passa a ser um conjunto de caixinhas, contendo dados de mesma natureza e que estejam agrupados.

6/33

Vetores

Armazenamento em memria

15

-7 15 23

Varivel simples
7/33

Vetor

Vetores

Para referenciar o contedo de uma varivel simples, basta indicar o nome que foi definido. Para vetores, somente o nome no suficiente. Alm do nome, preciso indicar a posio no vetor onde est o dado que queremos acessar/utilizar.
Esta

posio denominada ndice. Os vetores so tambm chamados de variveis indexadas unidimensionais.

8/33

Vetores

Sintaxe para declarao de um vetor:


<var> : vetor[<inicio>..<fim>] de <tipo>;

No possvel acessar posies fora do intervalo definido

Sintaxe para referenciao de uma posio: <nome_vetor>[<posicao>];

Suponha que necessrio armazenar 100 preos de produtos de uma loja. Declarao: preco : vetor[1..100] de real;

Referenciao:

preco[1] = 32.50;
9/33

preco[102] = 43.80;

Vetores

Observaes

necessrio validar acessos a ndices inexistentes, evitando erros no sistema; Apenas variveis inteiras podem ser utilizadas como ndices de um vetor. Cada elemento do vetor deve ser tratado como uma varivel independente Todas as operaes que podem ser realizadas sobre variveis de tipos bsicos, podem ser aplicadas a posies de um vetor.

Ex.: ler preco[10]; escrever preco[12];

10/33

Vetores em Java

Recebem o nome de Array.


Para criar um array, 3 passos so necessrios:
Declarao;
Construo; Inicializao.

11/33

Vetores em Java

A construo feita com o operador new.

int vetor[ ] = new int[10];

Os ndices em um array em Java comeam em 0. Para inserirmos elementos, precisamos indicar a posio no array onde eles sero inseridos:

vetor[0] = 52; vetor[1] = -28;

12/33

Vetores em Java

No se especifica o tamanho do array na declarao:


int

vetor[ ]; // declarao do array

Isso deve ser feito apenas na construo:


vetor

= new int[10]; // construo do array

13/33

Vetores em Java

Exemplo:
int[]

v[0] v[1] v[2] v[3] v[4] v[5] v[6]

v = new int[10]; v[0] = 34; v[1] = 27; v[2] = 18; v[3] = -78; v[4] = 1534;

34 27 18 -78 1534

v[7]
v[8]
14/33

v[9]

Vetores em Java

No possvel acessar alm dos limites em um array.

Para sabermos o tamanho de um array, podemos usar a varivel length: Ex:


int v[ ] = new int[10]; for(int i = 0; i < v.length; i++) { System.out.println("array[" +i + "] = " +v[i]); }

15/33

Vetores em Java

Os arrays so inicializados automaticamente em java. Cada tipo de dado que podemos colocar em um array possui um valor padro, que ser usado para inicializar o array automaticamente.

16/33

Inicializao automtica de um Array


Tipo byte int float char valor 0 0 0.0f '\u0000' tipo short long double boolean valor 0 0L 0.0d false

Referncias recebem null

Vetores em Java

A declarao, construo e inicializao do array tambm pode ser feita de uma vez s:
String

frutas[ ] = {"Uva", "Melancia","Pssego"};

cdigo equivalente a:
String

frutas[ ] = new String[3]; frutas[0] = "Uva"; frutas[1] = "Melancia"; frutas[2] = "Pssego";

18/33

Vetores

Exemplo:

Uma prova de qumica foi feita por um grupo de 20 alunos. Faa um programa para ler as notas obtidas pelos alunos, e depois exibir um relatrio de notas iguais ou superiores a 7,5 no seguinte formato:
Notas >= 7.5: 7.8 9.4 10.0 7.7 8.5 7.5 9.1 8.3
19/33

Vetores

Soluo:

Este exemplo uma aplicao simples de vetores. Existe uma repetio embutida, pois necessrio ler as 20 notas. Poderamos solucionar este problema sem a utilizao de vetores, mas perderamos as notas dos alunos, o que uma m idia. Temos ento quer ler todas as notas, e em seguida varrer todo o vetor, decidindo quais devem ser impressas. Como a quantidade de leituras fixa, podemos utilizar o comando PARA nas repeties.

20/33

Vetores

Como fica o algoritmo:


cont : inteiro; nota : vetor[1..20] de real;

Variveis

Incio

// L as notas e armazena no vetor para cont de 1 at 20 faa [[ escrever Digite a , cont, nota: ; ler nota[cont]; ]]; // imprime as notas acima de 7.5 escrever Notas acima de 7.5; para cont de 1 at 20 faa se nota[cont] >= 7.5 ento escrever nota[cont];
21/33

Soluo em Java
public static void main(String[] args) { double notas[]; notas = new double[20]; for (int i=0; i < notas.length;i++) { System.out.println("Digite a " + (i+1) + " nota"); notas[i] = Leia(notas[i]); } System.out.println("Notas >= 7.5"); for (int i=0; i < notas.length;i++) { if (notas[i]>=7.5) System.out.println(notas[i]); } }
22/33

Vetores

Exerccio:

Faa um programa para ler 50 valores reais e armazenar em um vetor. Em seguida, modifique o vetor de modo que os valores armazenados nas posies mpares do vetor sejam aumentadas em 5% (ex: 1 elemento, 3 elemento, 5 elemento, etc) e os das posies pares (ex: 2 elemento, 4 elemento, 6 elemento, etc) sejam aumentados em 2%. Imprima depois o vetor resultante.

23/33

Soluo
public static void main(String[] args) { double valor[] = new double[50]; int i=0; double aux =0; // L os valores e preenche o vetor while (i < valor.length) { System.out.println(Digite o " +(i+1) + termo:"); aux = Leia(aux); valor[i] = aux; i = i +1; }

24/33

Soluo
// aumenta os valores nas posies mpares em 5% e os // pares em 2%. for (i=0; i < valor.length; i++) { if ((i+1)%2 ==1) valor[i]=valor[i]*1.05; else valor[i]=valor[i]*1.02; } // imprime o vetor for (i=0; i < valor.length; i++) System.out.println((i+1)+" termo = "+valor[i]); }

25/33

Vetores

Exerccios:

Num concurso pblico, um candidato respondeu a uma avaliao com 30 questes numricas, onde cada questo admitia respostas de 0 at 99. Faa um programa para ler o gabarito da prova e as respostas do aluno, informando quantas questes ele acertou.

26/33

Soluo
public static void main(String[] args) { int[] questoes = new int[30]; int[] gabarito = new int[30]; int soma = 0; for (int i = 0;i < questoes.length; i++ ) { System.out.println("Digite a " +(i+1) + " resposta"); questoes[i] = Leia(questoes[i]); } for (int i = 0;i < questoes.length; i++ ) { System.out.println("Digite o gabarito da " +(i+1) + " questo"); gabarito[i] = Leia(gabarito[i]); if (questoes[i] == gabarito[i]) soma = soma +1; } System.out.println("O nmero de acertos foi: " + soma); }
27/33

Vetores

Exerccio:

Faa um programa para ler no mximo 30 nmeros reais informados pelo usurio, e exibir depois a mdia destes nmeros. Considere que o valor -99 encerra a entrada dos dados.

28/33

Vetores

Soluo

Devemos cria um vetor de 30 posies para armazenar os nmeros.

Mas o usurio pode fornecer menos que 30 nmeros, e a?

29/33

Vetores

Soluo (cont.):
O

fato de nem todas as posies do array terem sido utilizadas no um problema, desde que saibamos quantas foram utilizadas. A leitura das notas no poder ser realizada com o comando FOR, e sim com o comando WHILE. O nmero -99 um sinalizador de trmino de leitura, logo no deve ser armazenado no vetor.

30/33

Algoritmo
Variveis valor : vetor[1..30] de real; cont, i : inteiro; soma, media : real; Incio cont = 0; ler aux; enquanto aux <> -99 e cont < 30 faa [[ cont = cont + 1; valor[cont] = aux; ler aux; ]]; soma = 0; para i de 1 at cont faa soma = soma + valor[i]; media = soma / cont; escrever A mdia dos valores , media; Fim.
31/33

Soluo em Java
public static void main(String[] args) { double valor[] = new double[30]; int cont=0, i =0; double soma=0,aux =0, media=0; System.out.println("Digite o " + (cont +1) + " nmero:"); aux = Leia(aux); while ( (aux != -99) && (cont < valor.length) ) { valor[cont] = aux; cont = cont +1; if (cont < valor.length) { System.out.println("Digite o " + (cont +1) + " nmero:"); aux = Leia(aux); } } for (i=0; i <cont; i++) soma = soma + valor[i]; media = soma / cont; System.out.println("A mdia dos valores digitados : " + media); } 32/33

Vetores

Programao em Java Prof. Maurcio Braga

Você também pode gostar