Você está na página 1de 5

CENTRO UNIVERSITRIO DO LESTE DE MINAS GERAIS

CURSOS DE ENGENHARIA
DISCIPLINA: Fundamentos da Computao II
PROFESSORES: Ncleo de professores de Informtica
MATERIAL DE APOIO Parte 2

Material de Apoio Parte 2 Estrutura de Dados Vetor


1)

Objetivos:

2)

Livro texto:

3)

Fundamentao Terica (Referncia para consulta e estudos: Captulo 5 do livro texto.)

Aprender e utilizar estruturas de dados do tipo vetor para resolver problemas computacionais
simples, que necessitem de armazenamento temporrio de vrios dados.
ASCENIO, A. F.G., CAMPOS, E.A.V. Fundamentos da Programao de Computadores
(Algoritmos, Pascal e C/C++). So Paulo: Prentice Hall, 2002.

1. Estruturas de Dados
Os tipos primitivos de dados at ento utilizados: inteiro, real, caracter e lgico no so suficientes para a
resoluo de todos os problemas da vida real. Em muitos casos eles podem ser substitudos para uma melhor
soluo.
Esses novos tipos so tipos construdos a partir da composio de tipos primitivos e tm um formato denominado,
ou seja, possuem uma ESTRUTURA DE DADOS, que define como os tipos primitivos esto organizados. De
forma anloga, anteriormente, as gavetas variveis podiam comportar apenas uma informao e, segundo esse
novo conceito, uma gaveta poderia comportar um conjunto de informaes primitivas, desde que devidamente
organizadas, divididas.

2. Vetor - Variveis Compostas Unidimensionais


Vetores so variveis unidimensionais porque possuem uma nica dimenso. Ou seja, representam um conjunto de
variveis do mesmo tipo, e que so identificadas com um nico identificador (nome de varivel) e so alocadas
sequencialmente na memria.
Um exemplo clssico de varivel unidimensional a matriz 1XN, ou seja, matriz de uma nica linha e N colunas
chamada comumente de vetor.
Exemplo: VETOR NOTA DE 10 ELEMENTOS DE TIPO PRIMITIVO REAL.
NOTA
1

10

10
5
8,8
9
10
8
6
4
2,5
8,8
Observe que NOTA uma varivel composta unidimensional, ou seja, um vetor. Portanto, ela capaz de
armazenar 10 nmeros reais, sendo referenciada por apenas um identificador: NOTA.
Para acessarmos os elementos de um vetor necessrio fazer uso das posies. Como voc pode ver no exemplo,
cada nota armazenada neste vetor tem um ndice (uma etiqueta de identificao) que utilizado para acessar tal
informao. A nota 8,8 est armazenada no vetor NOTA, na posio 3. Veja no exemplo abaixo.
Exemplo: NOTA[1] 10;
NOTA[4] 9;
NOTA[10] 8,8;
NOTA[6] 8;
Soma NOTA[2] + NOTA[9];
leia (NOTA[7]);
escreva (NOTA[5]);

2.1. Declarao de Vetores


Var <nome da varivel>: VETOR[ndice inicial . . ndice final] de <tipo>;
Onde: ndice inicial - limite inferior ou inicial do vetor;
ndice final - limite superior ou final do vetor;
Para o exemplo do Vetor NOTA teramos a seguinte declarao:

Var VNOTA:vetor [1 .. 10] de reais;


Em Pascal:
Var VNota: ARRAY[1..10] OF real;

2.2. Quando utilizar vetor


Geralmente, quando precisamos armazenar uma quantidade significativa de dados durante todo o tempo de
execuo de um programa, faz-se necessrio utilizar vetor para armazenar esses dados. Uma situao tpica seria,
por exemplo, quando desejarmos resolver o seguinte problema: Obter os nomes e as notas de clculo 1 de uma
turma de 20 alunos, calcular a mdia da turma e depois informar quais so os alunos que obtiveram nota superior
media calculada. Observe que neste caso, identificar o nome dos alunos que obtiveram nota superior mdia s
possvel aps o clculo da mdia. Ou seja, necessrio ler todas as notas e nomes dos alunos, calcular a mdia e
depois comparar cada nota com a mdia, para identificarmos as notas superiores mdia. Todas as 20 notas tm
que estar armazenadas para se fazer o teste e, alm disso, os nomes tambm tero que estar armazenados para que
seja exibido.
Uma das formas de se fazer isso utilizando vetor. Se no utilizarmos vetor, vamos precisar de no mnimo 20
variveis para guardar as 20 notas e mais 20 variveis para guardar os 20 nomes. Lembre-se, esses dados sero
necessrios para conseguir definir quem so os alunos com nota maior que a mdia. Utilizando vetor iremos criar
dois vetores: um para guardar as 20 notas e outro para guardar os nomes; assim ao invs de 40 variveis, teremos 2
variveis com a estrutura de um vetor.

2.3. Preenchimento de um vetor


Na maioria das vezes que for necessrio o uso de um vetor para armazenar dados temporariamente ser necessrio
colocar esses dados no vetor. Ou seja, atribuir valores a todas as posies, preenchendo cada partio (quadrado)
do vetor com um valor. Para acessar cada partio a fim de colocar um valor dentro dessa partio necessrio ter
controle do valor do ndice ( da etiqueta de cada quadrado).
Considerando Num um vetor capaz de armazenar 5 nmeros inteiros, analise o cdigo abaixo e veja o que
acontece:
Em Portugol
Em Pascal
X1;
x:=1;
while (x<=5) do
enquanto x<=5 faa
begin
inicio
write(Digite o , x, nmero);
escreva(Digite o , x, nmero);
read (Num[x]);
leia (Num[x]);
x:=x+1;
x:=x+1;
end;
fim;
Observe que este lao de repetio ir fazer com que o x assuma a cada repetio os valores de 1 a 5, exatamente
os valores dos ndices do vetor. Desta forma possvel utilizar o x para acessar o ndice do vetor e
consequentemente armazenar o valor informado dentro da partio do vetor, acessada pelo ndice.
Veja o rastreio:
Memria
Tela
X=1
Num
Digite o 1 nmero 12
1

X=2

X=3

X=4

12
Num

Digite o 2 nmero 98
98
Digite o 3 nmero 34

12

98

34

98

34

76

12

98

34

76

Num
1

X=5

12
Num

12
Num

Digite o 3 nmero 76
Digite o 3 nmero 45
5

45

2.4. Uso do comando de repetio PARA (FOR)


Objetivando facilitar a codificao de programas que utilizam a estrutura de dados vetor podemos utilizar um outro
comando de repetio. Alm do enquanto (while), existe o comando para (for), em muitos casos o seu uso bem
mais prtico. O exemplo abaixo mostra um mesmo trecho de programa codificado usando enquanto e usando para.
A verso em pascal tambm mostrada.
Em Portugol usando enquanto
X1;
enquanto x<=5 faa
inicio
escreva(Digite o , x, nmero);
leia (Num[x]);
x:=x+1;
fim;
Em Pascal usando while
x:=1;
while (x<=5) do
begin
write(Digite o , x, nmero);
read (Num[x]);
x:=x+1;
end;

Em Portugol usando para


para x de 1 at 5 faa
inicio
escreva(Digite o , x, nmero);
leia (Num[x]);
fim;
Em Pascal usando for
for x:=1 to 5 do
begin
write(Digite o , x, nmero);
read (Num[x]);
end;

Observe que utilizando o comando para, com uma linha de cdigo possvel criar a mesma estrutura de repetio
que criamos com o enquanto. Isto possvel porque, no comando for, em uma s linha, o contador iniciado (x
de 1 ao invs de x1), a condio estabelecida (at 5 ao invs de x<=5) e o incremento definido (passo 1 ao
invs de xx+1)

2.5. Exibio dos dados de um vetor


Para exibir os elementos existentes dentro de um vetor necessrio sempre percorrer esse vetor. Ao percorrer o
vetor deve-se acessar cada um dos seus ndices para conseguir obter o valor que est dentro de cada partio.
Assim sendo, deve-se fazer uso de um comando de repetio da mesma forma que foi feito para preencher o vetor.
Considerando o vetor Num do exemplo anterior, analise o cdigo abaixo e veja o que acontece:
Em Portugol
Em Pascal
para x de 1 at 5 faa
for x:=1 to 5 do
inicio
begin
escreva(O, x, nmero do vetor :, Num[x]);
write(O, x, nmero do vetor :, Num[x]);
fim;
end;
Veja abaixo uma simulao do que est na memria e na tela a cada interao do cdigo.
Memria
Tela
X=1
Num
O 1 nmero do vetor : 12
X=2
1
2
3
4
5
O 2 nmero do vetor : 98
X=3
O 3 nmero do vetor : 34
12
98
34
76
45
X=4
O 4 nmero do vetor : 76
X=5
O 5 nmero do vetor : 45

4) Exemplos de algoritmos com Variveis Compostas Unidimensionais Vetores


1. Construir um programa que leia 5 nmeros inteiros e armazene em um vetor. Depois da leitura de todos os
nmeros exibi-los um a um na tela.
Em Portugol
Em Pascal
Algoritmo Numeros;
var NUM : vetor [1..5] de inteiro;
x : inteiro;
Inicio
para x de 1 ate 5 faca
inicio
escreva(Digite o , x, nmero);
leia (Num[x]);
Fim;
para x de 1 at 5 faa
inicio
escreva(Num[x]);
fim;

program Numeros;
var Num : array [1..5] of integer;
x : integer;
begin
for x :=1 to 5 do
begin
write(Digite o , x, nmero);
read (Num[x]);
end;
for x:=1 to 5 do
begin
write(O, x, nmero do vetor :, Num[x]);

fimalgoritmo

end.

end;

2. Elaborar um algoritmo que leia 20 nmeros, calcule a mdia entre eles e exiba os nmeros que forem maior que a
mdia.
Em Pascal
Em Portugol
Algoritmo MaioresMedia;
var NUM : vetor [1..20] de real;
I,SOMA : inteiro;
MEDIA : real;
Inicio
SOMA 0;
para I de 1 ate 20 faca
inicio
escreva ( Informe um nmero:);
leia (NUM[I]);
SOMA SOMA + NUM[I];
Fim;
MEDIA SOMA / 20;
para I de 1 ate 20 faca
inicio
se NUM[I] > MEDIA entao
escreva(NUM[I]);
fim;
fimalgoritmo

program MaioresMedia;
var NUM: array [1..20] of real;
I,SOMA: integer;
MEDIA: real;
begin
SOMA := 0;
for I := 1 to 20 do
begin
writ e( Informe um nmero:);
read (NUM[I]);
SOMA := SOMA + NUM[I];
end;
MEDIA := SOMA / 20;
for I := 1 to 20 do
begin
if NUM[I] > MEDIA then
write(NUM[I]);
end;
end.

3. Elaborar um algoritmo que leia a idade de 10 pessoas e informa quantas pessoas tem idade maior que a idade
mdia desta turma.
Em algoritmo
Em Pascal
Algoritmo PrVetor;
Var Id : vetor [1..10] de inteiro;;
x, soma, qtd: inteiro;
Med: real;
inicio
qtd 0;
para x de 1 ate 10 faca
inicio
escreva('Informe a idade da ', x ,' a. pessoa:');
leia(Id[x]);
soma:=soma +Id[x];
fim-para;

program PrVetor;
var Id : array [1..10] of integer;;
x, soma, qtd: integer;
Med: real;
begin
qtd:=0;
for x :=1 to 10 do
begin
write('Informe a idade da ', x ,' a. pessoa:');
readln(Id[x]);
soma:=soma +Id[x];
end;

Med:=soma/10;
escreva(' A mdia das idades ',Med);
para x de 1 ate 10 faca
inicio
se ( Id[x]= Med) entao
qtd:= qtd + 1;
fim-se;
fim-para;
escreva ('Existem ',qtd ,' pessoas com idade igual
mdia do grupo.');

Med:=soma/10;
writeln(' A mdia das idades ',Med:0:2);
for x := 1 to 10 do
begin
if ( Id[x]= Med) then
qtd:= qtd + 1;
end;
writeln('Existem ',qtd ,' pessoas com idade igual mdia do
grupo.');
end.

fim-algoritmo.

5) Exerccios
1. Elabore um algoritmo que leia os valores de um vetor de tamanho 5 e que em seguida gera um segundo vetor
na ordem inversa do primeiro vetor
2. Construir um programa que leia 10 nmeros reais e armazene em um vetor. Depois do preenchimento total,
percorrer esse vetor uma vez procurando pelo maior elemento.
3. Utilizando vetor construa um algoritmo que leia o nome e o peso de 10 pessoas. Calcule e escreva:
a) A mdia dos pesos das 10 pessoas;
b) Quantas pessoas possuem peso acima da mdia e o nome dessas pessoas.
4. Construa um programa que leia 10
nmeros e armazene em um vetor A.
Leia outros 10 nmeros e armazene em
um vetor B. Gere um terceiro vetor onde
cada elemento seja a soma dos outros
dois elementos. Veja ao lado

A
11
B
2
C
13

20

33

47

60

...

...

23

35

52

66

...

5. Ler dois vetores A e B com 20 elementos cada, construir um vetor C, onde cada elemento de C seja a subtrao
do elemento correspondente de A com B.
6. Dado o nome e a idade de um conjunto de 10 pessoas, elabore um algoritmo que:
a) Guarde todos os dados na memria;
b) Escreva os nomes das pessoas que tem a idade maior que a mdia;
c) Listar o nome da pessoa de maior e menor idade.
7. Criar um programa que defina um vetor para conter 10 nomes de candidatos e imprima os nomes das que esto
nas posies impares.
8. Construa um programa que efetue a tabuada de 1 a 10 de um determinado nmero informado pelo usurio e
armazene o resultado dessa tabuada em um vetor.
9. Em uma cidade do interior, sabe-se que, durante 31 dias do ms de outubro, foi feita a coleta de temperatura
diariamente pela manh. Elabore um algoritmo que leia os dados e que calcule e escreva:
a) A temperatura mdia;
b) Quantos dias a temperatura foi inferior temperatura mdia;
c) Quais os dias do ms nos quais a temperatura foi superior temperatura mdia;
10. Considere uma escola tcnica com 25 cursos. Construa um programa que leia o nome do curso e o valor da
mensalidade. O programa tambm dever calcular e exibir:
a) Qual o curso mais barato da escola.
b) Qual a diferena do valor mensalidade do curso mais barato em relao mensalidade mdia da escola.