Você está na página 1de 9

UNIC Tangar Tecnologia em Desenvolvimento de Software Laboratrio de Programao Prof.

Geovane Birck Girelli

Vetores
As variveis simples somente so capazes de armazenar um valor por vez. No momento que um valor atribudo a uma varivel, seu contedo anterior se perde. Agora, imagine um programa onde precisa-se armazenar as notas de 5 provas realizadas por um aluno. Com os conhecimentos que voc possui at agora, seria necessrio criar cinco variveis para armazenar as notas. Desta forma:

Inteiro: NOTA1, NOTA2, NOTA3, NOTA4, NOTA5;


No entanto, existe uma estrutura que permite que se armazene as cinco notas em uma nica estrutura: os vetores (arays). Este tipo de estrutura tambm chamado de matriz unidimensional. Um vetor representado por seu nome, tamanho e seu tipo. Sintaxe em Portugol: <nome_varivel> : vetor [tamanho] de <tipo_de_dado>; Sintaxe em Pascal: <nome_varivel> : array[tamanho] of <tipo_de_dado>; em que: nome_varivel o nome atribudo ao vetor, tamanho corresponde ao nmero de posies que o vetor ter e tipo_de_dado o tipo de elemento armazenado (inteiro, real, caractere ou lgico). Como j visto, uma varivel somente pode conter um valor por vez. No caso dos vetores, estes podero armazenar mais de um valor por vez. Os vetores s podero armazenar dados de um nico tipo. Vejamos como poderamos declarar um vetor para armazenar as cinco notas do aluno:

NOTAS: vetor[1..5] de real;


Ou em Pascal:

NOTAS: array[1..5] of real;


A leitura e exibio de vetores so feitas indicando individualmente entre colchetes e logo aps seu nome qual elemento se deseja ler ou imprimir. Vejamos como inserir as notas do aluno:

NOTA[1] NOTA[2] NOTA[3] NOTA[4] NOTA[5] NOTA[1] NOTA[2] NOTA[3] NOTA[4] NOTA[5] := := := := :=

5.2; 8.0; 9.2; 7.5; 8.3; 5.2; 8.0; 9.2; 7.5; 8.3;

Em Pascal:

Laboratrio de Programao Prof. Geovane

UNIC Tangar - Tecnologia em Desenvolvimento de Software - 1 Perodo


Observe que o nome um s, o que muda a informao indicada dentro dos colchetes. A esta informao d-se o nome de ndice, sendo este o endereo onde o valor est armazenado, ou seja, a nota do aluno. Podemos imaginar o vetor como uma tabela com cinco colunas:

5.2

8.0

9.2

7.5

8.3

Vamos analisar um programa com a utilizao de vetores: Desenvolver um programa que efetue a leitura e escrita de 5 elementos de um vetor A. Algoritmo: 1. Iniciar o contador do ndice de um vetor (A), com valor 1 at 5; 2. Ler os 5 valores, um a um; 3. Apresentar o contedo do vetor. Algoritmo EXEMPLO_VETOR01; var A : vetor[1..5] de inteiro; Inteiro: I; inicio para I 1 at 5 faa inicio escreva(Informe o valor, I); leia(A[I]); fim; para I 1 at 5 faa escreva (A[I]); fim. De modo geral, toda vez que vamos acessar as posies de um vetor de modo seqencial, utilizaremos o lao para. Vamos fazer o teste de mesa para o algoritmo acima, levando em considerao os seguintes dados de entrada: 5, 9, 12, 3 e 7.

A 1 2 3 4 5

Sada

Laboratrio de Programao Prof. Geovane

UNIC Tangar - Tecnologia em Desenvolvimento de Software - 1 Perodo


Em Pascal: Program EXEMPLO_VETOR01; var A : array[1..10] of integer; I: integer; begin {*** Entrada dos Dados ***} for I := 1 to 5 do begin write(Informe o valor, I,:); readln(A[I]); end; {*** Apresentao do contedo do vetor ***} for I := 1 to 10 do writeln(A[I]); writeln; writeln(Tecle <ENTER> para encerrar: ); readln; end.

Um pouco mais alm: Desenvolver um programa que efetue a leitura de 5 elementos de um vetor A Construir um vetor B de mesmo tipo, observando a seguinte lei de formao: se o valor do ndice for par, o valor dever ser multiplicado por 5; sendo mpar, dever ser somado com 5. Ao final, mostrar os contedos dos dois vetores. Algoritmo: 1. Iniciar o contador do ndice de um vetor (A), com valor 1 at 5; 2. Ler os 5 valores, um a um; 3. Verificar se o ndice par: a. Se for, multiplica por 5 e atualiza no vetor B; b. Se no for par, soma 5 e atualiza no vetor B. 4. Apresentar o contedo dos dois vetores. Algoritmo EXEMPLO_VETOR02; var A, B: vetor[1..5] de inteiro; Inteiro: I; inicio para I 1 at 5 faa inicio escreva(Informe o valor, I); leia(A[I]); fim; {*** Teste Par ou mpar ***} para I 1 at 5 faa se (I mod 2 = 0) ento B[I] A[I] * 5; seno B[I] A[I] + 5; Fimse; para I 1 at 5 faa escreva (A[,I,] = ,A[I], e , B[, I, ] = , B[I]); fim.

Laboratrio de Programao Prof. Geovane

UNIC Tangar - Tecnologia em Desenvolvimento de Software - 1 Perodo


Vamos fazer o teste de mesa para o algoritmo acima, levando em considerao os seguintes dados de entrada: 5, 2, 12, 3 e 6.

A 1 2 3 4 5 1 2

B 3 4 5

Sada

Em Pascal: Program EXEMPLO_VETOR02; var A, B: array[1..5] of integer; I: integer; begin {*** Entrada dos Dados ***} for I := 1 to 5 do begin write(Informe o valor, I); readln(A[I]); end; {*** Teste Par ou mpar ***} for I := 1 to 5 do if (I mod 2 = 0) then B[I] := A[I] * 5 else B[I] := A[I] + 5; writeln; {*** Apresentao do contedo do vetor ***} for I := 1 to 5 do writeln(A[,I,] = ,A[I], e , B[, I, ] = , B[I]); writeln; writeln(Tecle <ENTER> para encerrar: ); readln; end.

Laboratrio de Programao Prof. Geovane

UNIC Tangar - Tecnologia em Desenvolvimento de Software - 1 Perodo

Vejamos um exemplo do uso de vetores de caracteres: Ler e exibir o nome de 5 pessoas. Algoritmo: 1. Definir a varivel I do tipo inteiro para controlar a repetio; 2. Definir a matriz NOME do tipo string para 5 elementos; 3. Iniciar o programa, fazendo a leitura dos 5 nomes; e 4. Apresentar, aps a leitura, os 10 nomes. Algoritmo LISTA_NOME; var NOME: vetor[1..5] de caracter; Inteiro: I; Inicio escreva(Listagem de nomes); para I 1 at 5 faa inicio escreva(Digite o , I:2, o. nome: ); leia(NOME[I]); fim; para I 1 at 5 faa escreva (Nome: , I:2, --> , NOME[I]); fim. Em Pascal: Program LISTA_NOME; var NOME: array[1..5] of string; I: integer; begin writeln(Listagem de nomes); writeln; { *** Entrada dos Dados *** } for I := 1 to 5 do begin write(Digite o , I:2, o. nome: ); readln(NOME[I]); end; writeln; { *** Apresentao dos Nomes *** } for I := 1 to 5 do writeln(Nome: , I:2, --> , NOME[I]); writeln; writeln(Tecle <ENTER> para encerrar: ); readln; end. Uma forma mais organizada de apresentar o programa acima seria exibir os nomes das pessoas em ordem alfabtica, contribuindo para uma pesquisa mais fcil. Vejamos como ficaria o programa desta forma: Algoritmo LISTA_NOME_ORDENADO; var NOME: vetor[1..5] de caracter; Inteiro: I, J; Caractere: aux;

Laboratrio de Programao Prof. Geovane

UNIC Tangar - Tecnologia em Desenvolvimento de Software - 1 Perodo


inicio escreva(Listagem de nomes); { *** Entrada dos Dados *** } para I 1 at 5 faa inicio escreva(Digite o , I, o. nome: ); leia(NOME[I]); fim; { *** Ordenao dos Nomes *** } para I 1 at 4 faa para J I+1 at 5 faa se (NOME[I] > NOME[J]) ento inicio aux NOME[I]; NOME[I] NOME[J]; NOME[J] aux; fim; fimse; { *** Apresentao dos Nomes *** } para I 1 at 4 faa escreva (Nome: , I, --> , NOME[I]); fim. Observe o algoritmo da troca, utilizado junto da instruo se (NOME[I] > NOME[J]) ento. Aps a verificao desta condio, sendo o primeiro nome maior que o segundo, efetua-se ento a sua troca com a seqncia: aux NOME[I]; NOME[I] NOME[J]; NOME[J] aux; Considere o vetor NOME[I] com o valor CARLOS e o vetor NOME[J] com o valor ALBERTO. Ao final, NOME[I] dever estar com ALBERTO e NOME[J] dever estar com o valor CARLOS. Para se conseguir este efeito necessria a utilizao de uma varivel auxiliar, no caso aux. Para que o vetor NOME[I] fique livre para receber o valor do vetor NOME[J], aux dever receber o valor de NOME[I], assim sendo aux passa a ter o valor CARLOS. Neste momento passa-se o valor de NOME[J] para NOME[I], no caso ALBERTO. Por fim, NOME[J] pode receber o valor de X para receber o valor CARLOS. Vamos fazer o teste de mesa com os seguintes valores de entrada: Gandalf, Aragorn, Smagol, Frodo e Arwen.

Nome 1 2 3 4 5

Aux

Sada

Laboratrio de Programao Prof. Geovane

UNIC Tangar - Tecnologia em Desenvolvimento de Software - 1 Perodo

Em Pascal: Program LISTA_NOME_ORDENADO; var NOME: array[1..10] of string; I, J: integer; aux: string; begin writeln(Listagem de nomes); writeln; { *** Entrada dos Dados *** } for I := 1 to 10 do begin write(Digite o , I:2, o. nome: ); readln(NOME[I]); end; { *** Ordenao dos Nomes *** } for I := 1 to 9 do for J := I +1 to 10 do if (NOME[I] > NOME[J]) then begin aux := NOME[I]; NOME[I] := NOME[J]; NOME[J] := aux; end; { *** Apresentao dos Nomes *** } writeln; for I := 1 to 10 do writeln(Nome: , I:2, --> , NOME[I]); writeln; writeln(Tecle <ENTER> para encerrar: ); readln; end.

Exerccios
1. Dar o nmero de elementos de cada um dos vetores dados abaixo: a)VET : vetor[-5..5] de inteiro; b)NOME: vetor [0..20] de caracter; c)CONT: vetor ['A'..'Z'] de inteiro; d)NOTA: vetor [1..50] de real; Laboratrio de Programao Prof. Geovane 7

UNIC Tangar - Tecnologia em Desenvolvimento de Software - 1 Perodo


2. Dado o seguinte vetor: 1 2 3 4 5 6 7 VET = 7 4 1 5 8 2 3 qual ser o seu contedo aps a execuo dos seguintes comandos: para I 8 at 5 passo -1 faa inicio AUX VET[I]; VET[I] VET[8-I+1]; VET[8-I+1] AUX; fim; 1 2 3 4 VET = 8 6

3. Dado um vetor A contendo 10 elementos inteiros, faa um algoritmo para gerar e exibir um vetor B cujos elementos esto na ordem inversa de A. Exemplo: A= B= 1 23 26 2 37 20 ... ... 9 20 37 10 26 23

4. Dado dois vetores A e B contendo 10 elementos inteiros cada, gerar e exibir um vetor C do mesmo tamanho cujos elementos sejam a soma dos respectivos elementos de A e B. Exemplo: A= B= C= 1 23 30 53 2 37 32 69 3 30 46 76 ... ... ... 9 45 33 88 10 35 42 77

5. Dado dois vetores A e B contendo 10 elementos inteiros cada, gerar e exibir um vetor C de 20 elementos, cujos elementos sejam a intercalao dos elementos de A e B. Exemplo: A= B= 1 23 1 23 30 2 30 2 37 32 3 37 4 32 3 30 46 5 30 6 46 ... ... 9 38 43 17 38 10 55 49 18 43 19 55 20 49

C=

...

6. Um time de basquete possui 12 jogadores. Deseja-se um programa que, dado o nome e a altura dos jogadores, determine (utilize vetores para armazenar os dados): a) o nome e a altura do jogador mais alto; b) a mdia de altura do time; c) a quantidade de jogadores com altura superior a mdia, listando o nome e a altura de cada um.

Laboratrio de Programao Prof. Geovane

UNIC Tangar - Tecnologia em Desenvolvimento de Software - 1 Perodo

7. Fazer um programa em Pascal para corrigir provas de mltipla questes e cada questo vale 1 ponto. O primeiro conjunto gabarito para a correo da prova. Os outros dados sero os respectivas respostas, e o ltimo nmero, do aluno fictcio, dever calcular e imprimir: a) para cada aluno, o seu nmero e sua nota;

escolha. Cada prova tem 10 de dados a ser lido ser o nmeros dos alunos e suas ser 0 (zero). O programa

b) o percentual de aprovao, sabendo-se que a nota mnima de aprovao 6. c) a nota que teve maior freqncia absoluta, ou seja, a nota que apareceu maior nmero de vezes (supondo a inexistncia de empates). A estrutura de dados para este programa de ser a seguinte:
GABARITO NUMERO NOTA

RESPOSTAS

APROVADOS

TOTAL

FREQUENCIA

MAIOR

Laboratrio de Programao Prof. Geovane

Você também pode gostar