You are on page 1of 35

Algoritmos e Estruturas de

Dados I Estruturas de Dados

Profa. Mercedes Gonzales


Mrquez

Estruturas de Dados
Os

tipos primitivos (inteiro, real, literal e


lgico) no so suficientes para representar
todos os tipos de informao.
Particularmente quando temos mais de
uma informao relacionada. Ex: Lista dos
nomes dos alunos de uma sala, endereo de
algum etc.
Utilizaremos os tipos primitivos para
construir outras estruturas de dados mais
complexas.

Vetores

Tambm denominados Estruturas compostas


homogneas unidimensionais
Permitem a manipulao de um conjunto de
informaes de um mesmo tipo primitivo
Declarao :
tipo primitivo : nome_vetor [numero de elementos]
Exemplo :
Um vetor com nome dados de 40 posies reais
ter a seguinte declarao.
Real: dados[40]
dados
1

2,4

7,8

3,6

5,3

9,1

9,8

6,5

9,8

4,7

38

1,5

39

2,8

40

4,6

Vetores
Manipulao:
Para manipular os elementos de um vetor
devemos especificar a sua posio.
dados

2,4

7,8
7,8

3,6

5,3

9,1

9,8

6,5

9,8

4,7

1,5
38

2,8
39

4,6
40

-dados[8]
A posio do vetor determinada por meio de uma
constante, de uma expresso aritmtica ou de uma
varivel que estiver dentro dos colchetes. Ela
tambm chamada de ndice.

Vetores
Exerccio Sendo o vetor v igual a
2

7,8
6

10

21

33

14

10

e as variveis x=2 e y=4 escreva o valor


correspondente solicitao
(a) v[x+1] (b) v[x+2] (c) v[x+3] (d) v[x+4]
(e) v[x*1] (f) v[x*2] (g) v[x*3] (h) v[v[x+4]]
(i) v[x+y] (j) v[8-v[2]] (k) v[v[4]] (l) v[v[v[7]]]
(m) v[v[1]*v[4]] (n) v[x+4]

Vetores
Algoritmo 2 Leia dois vetores inteiros de 50
posies, some seus correspondentes elementos e
imprima o resultado da soma

inteiro: va[50],vb[50],vc[50],i
inicio
para i de 1 at 50 repita
leia (va[i],vb[i] )
vc[i] va[i] + vb[i]
escreva (vc[i])
fimpara
fim.

Vetores
Algoritmo 3 Preencha um vetor de 100 inteiros,
colocando 1 na posio par e 0 na posio impar

inteiro: vetor[100],i
inicio
para i de 1 at 100 repita
se (mod(i,2)=0) ento
vetor[i] 1
seno
vetor[i] 0
fimpara;
fim.

Vetores
Algoritmo 4 Altere o exemplo da soma de vetores
para que esta realize a seguinte operao: produto
do primeiro vetor pelo inverso do segundo. Os
vetores possuem 20 posies e contm valores reais.

Algoritmo <produto>
inteiro: i
real: V[20],a[20],b[20]
inicio
para i de 1 at 20 repita
V[i] a[i]*b[21-i]
fim para
fim.

Vetores
Algoritmo 5 Igual que o algoritmo 4, s que o
resultado dos produtos dos valores correspondentes
devem ser armazenados a partir do centro para as
bordas, de modo alternado.

Algoritmo <produto2>
real: V[20],a[20],b[20]
inteiro: i
inicio
para i de 1 at 10 repita
v[11-i]=a[11-i]*b[10+i]
v[10+i]=a[10+i]*b[11-i]
fim para
fim.

Vetores
Algoritmo 6 Escreva uma algoritmo que leia um
vetor de 20 elementos e conte quantos valores
pares existem no vetor.
Algoritmo <contagempares>
inteiro: V[20],i,c
inicio
c 0
para i de 1 at 20 repita
leia (V[i])
Se (mod(V[i],2)=0) ento
c c+1
fim se
fim para
escreva (c)
fim.

Vetores
Algoritmo 7 Escreva um algoritmo que leia um
vetor de 50 posies de nmeros inteiros e mostre
somente os positivos

Algoritmo <positivos>
inteiro:V[50], i
inicio
para i de 1 at 50 repita
leia (V[i])
se (V[i]>0) ento
escreva (V[i])
fim se
fim para
fim.

Vetores
Algoritmo 8 Escreva um algoritmo que leia um
vetor de 80 elementos inteiros, encontre e mostre o
menor elemento e sua posio no vetor.
Algoritmo <menorelemento>
inteiro:V[80], i, ind,menor
inicio
leia (V[1])
menorV[1]
ind1
para i de 2 at 80 repita
leia (V[i])
se (V[i]<menor) ento
menorV[i]
indi
fim se
fim para
fim.

Vetores
Algoritmo 9 Faa um algoritmo que leia um
conjunto de 10 valores inteiros e os coloque em dois
vetores conforme forem pares ou mpares.
Algoritmo <doisvetores>
inteiro:V[10], V1[10],V2[10],i,c1,c2
inicio
c1
c2
para i de 1 at 10 repita
leia (V[i])
se (mod(V[i],2)=0) ento
V1[c1]V[i]
c1c1+1
seno
V2[c2]V[i]
c2 c2
fim se
fim para
fim.

Vetores
Algoritmo 10 Ler um vetor v de 10 elementos inteiros e
obter um vetor fat cujos componentes so os fatoriais dos
respectivos componentes de v.
Algoritmo <doisvetores>
inteiro:v[10], fat[10],i,j
inicio
para i de 1 at 10 repita
leia (v[i])
fat[i]1
Para j de 1 at v[i] repita
fat[i]fat[i]*j
Fim Para
fim.

Vetores
Algoritmo 11 Escreva um algoritmo que leia um vetor G de
20 elementos literais que representa o gabarito de uma
prova. A seguir para cada um dos 50 alunos da turma, leia o
vetor de respostas R do aluno. Mostre o nmero de acertos
do aluno e uma mensagem APROVADO, se a nota for maior
ou igual a 6; e uma mensagem de REPROVADO, caso
contrrio.

Vetores
Algoritmo <prova>
notaacertos*0.5
literal:G[20], R[20]
se (nota>=6) ento
inteiro:i,j,acertos
escreva (APROVADO)
inicio
seno
para i de 1 at 20 repita
escreva(REPROVADO)
leia (G[i])
fim para
fim se
para j de 1 at 50 repita
fim para
acertos 0
fim
Para i de 1 at 20 repita
leia R[i]
se (R[i]=G[i]) ento
acertos

acertos+1
fim se
fim para

Vetores
Algoritmo 12 Faa um algoritmo que leia um
cdigo numrico inteiro e um vetor de 50 posies
de nmeros reais. Se o cdigo for 0 termine o
algoritmo, se for 1, mostre o vetor na ordem direta,
e se for 2, mostre o vetor na ordem inversa.

Vetores
Algoritmo <opcoes>
inteiro:i,codigo
real: vetor[50]
inicio
leia (codigo)
se (codigo>0 e codigo<=2) ento
para i de 1 at 50 repita
leia (vetor[i])
fim para
se (codigo=1) ento
para i de 1 at 50 repita
escreva (vetor[i])
fim para
seno
para i de 50 at 1 passo -1 repita
escreva (vetor [i])
fim para
fim se
fim se
fim

Vetores
Algoritmo 13 Faa um algoritmo que leia dois
conjuntos de nmeros inteiros tendo cada um 20
elementos e apresente os elementos comuns
(interseo de conjuntos).

Vetores
Algoritmo <intersecao>
real: a[20], b[20], c[20]
inteiro: m, n, i, j, k
Inicio
Para i de 1 at 20 repita
Leia( a[i] ,b[i])
Fim_para
k0
Para i de 1 at 20 repita
Para j de 1 at 20 repita
Se( a[i] = b[j] ) ento
k k+1
c[k] a[i]
Fim_se
Fim_para
Fim_para

Se ( k=0 ) ento
Escreva(Interseo Vazia. )
Seno
Escreva(Conjunto Interseo:)
Para i de 1 at k repita
Escreva( c[i] )
Fim_para
Fim_se
Fim
Obs. Com este algoritmo, se houver
elementos repetidos, tambm se
repetiro na sada. Como evitar isso?

Vetores
Algoritmo <intersecao2>
real: a[20], b[20], c[20]
inteiro: m, n, i, j, k
Inicio
Para i de 1 at 20 repita
Leia( a[i] ,b[i])
Fim_para
k 0, L0
Para i de 1 at 20 repita
j1
Enquanto (a[i]<>b[j] e j<=20) faa
j j+1
Fim enquanto

Se( a[i] = b[j] ) ento


k0
enquanto (a[i]<>c[k] e k<=L)
k k+1
fim enquanto
Se (k>L)
c[k] a[i]
L L+1
Fim_se
Fim_para
Fim_para
Se ( k=0 ) ento
Escreva(Interseo Vazia. )
Seno
Escreva(Conjunto Interseo:)
Para i de 1 at k repita
Escreva( c[i] )
Fim_para
Fim_se
Fim

Vetores
Algoritmo 14 Uma locadora de vdeos tem
guardada, em um arquivo manual, a quantidade de
filmes retirados por cliente durante o ano de 2007.
Faa um algoritmo que
(a) leia um vetor de 500 posies para guardar esta
informao e
(b) crie um outro vetor contendo a quantidade de
locaes gratuitas a que cada cliente tem direito,
considerando que a locadora est fazendo uma
promoo e para cada 10 filmes retirados ganha-se
uma locao grtis.

Vetores
Algoritmo <locadora>
inteiro:i,locacoes[500],gratuitas[500]
inicio
para i de 1 at 500 repita
leia (locacoes[i])
gratuitas[i] DIV(locacoes[i],10)
fim para
fim

Vetores
Algoritmo 15 Dado um polinmio P(x) de grau n,
da forma
P(x) = a0xn + a1xn-1 + ... + an-1x + an,
onde a0, a1, ..., an (reais) so os coeficientes do
polinmio. Faa um algoritmo para ler:
(a)n (o grau do polinmio), n<=100
(b)os coeficientes a0, a1, ..., an e
(c)uma sequncia de 5 valores para x.
O algoritmo deve calcular o valor de P(x) para cada
valor de x.

Vetores
Algoritmo <polinomio>
inteiro:i,n
real: a[101],x
incio
leia (n)
para i de 1 at n+1 repita
leia a[i]
fim para
para j de 1 at 5 repita
leia x
Px 0
para i de 1 at n+1 repita
Px Px+ a[i]*x**(n-i+1)
fim para
escreva (x,Px)
fim para
fim

Vetores
Algoritmo 16 Escrever um algoritmo que faa a
reserva de passagens areas de uma companhia.
Alm da leitura do nmero dos vos e quantidade de
lugares disponveis, ler vrios pedidos de reserva,
constitudos do nmero de carteira de identidade do
cliente e do nmero de vo desejado.
Para cada cliente, verificar se h disponibilidade no
vo desejado. Em caso afirmativo, imprimir o nmero
da identidade do cliente, e o nmero de vo,
atualizando o nmero de lugares disponveis. Caso
contrrio, avisar ao cliente da inexistncia de
lugares.
Indicando o fim dos pedidos de reserva, existe um
passageiro cujo nmero de carteira de identidade
9999. Considerar fixo e igual a 37 o nmero de vos
da companhia.
Algoritmo <reservapassagens>
inteiro:i,voos[37],disp[37],cliente,nvoo

incio

Para i de 1 at 37 repita
leia (voos[i],disp[i])
Fim Para
leia cliente
enquanto cliente<>9999 faa
leia nvoo
i0
repita
i i+1
at que (i=37 ou voos[i]=nvoo)
se (voos[i]=nvoo) ento
se (disp[i]>0) ento
escreva (cliente,nvoo)
disp[i] disp[i]-1
seno
escreva (nvoo, lotado)
fim se
seno
escreva (voo inexistente)
fim se
leia cliente
fim enquanto
fim

Vetores
Algoritmo 17 Faa um algoritmo que leia um vetor
de 20 inteiros e o coloque em ordem crescente,
utilizando a seguinte estratgia de ordenao:
Selecione o elemento do vetor de 20 posies que
apresente o menor valor.
Troque este elemento pelo primeiro.
Repita estas operaes, envolvendo agora apenas os
19 elementos restantes (trocando o de menor valor
com a segunda posio), depois os 18 elementos
(trocando o de menor valor com a terceira posio),
depois os 17,16 e assim por diante, at restar um
nico elemento, o maior deles. Este algoritmo
conhecido como algoritmo de seleo.
Animao em
http://www.youtube.com/watch?
feature=player_embedded&v=LuANFAXgQEw

Vetores

Algoritmo <ordemcrescente>
inteiro:i,j,vetor[20]
inicio
para i de 1 at 19 repita
inter 0
menor vetor[i]
indice i
para j de i+1 at 20 repita
se (vetor[j] < menor ) ento
menor vetor[j]
indice j
inter 1
fim se
fim para
se (inter=1) ento
vetor[indice] vetor[i]
vetor[i] menor
fim se
fim para

Vetores

Algoritmo 18 Algoritmo 17 de forma mais simples e


considerando n elementos (n<=20).
Algoritmo <ordemcrescente>
inteiro:i,j,vetor[20],aux,indice
inicio
Leia (n)
para i de 1 at n-1 repita
indice i
para j de i+1 at n repita
se (vetor[j] < v[indice]) ento
indice j
fim se
fim para
aux vetor[i]
vetor[i] v[indice]
vetor[indice] aux
fim para
fim

Vetores
Algoritmo 19 Desenvolva um algoritmo que leia um
vetor de n posies inteiras (n<=20) e o coloque em
ordem crescente, utilizando como estratgia de
ordenao a comparao de pares de elementos
adjacentes, permutando-os quando estiverem fora de
ordem at que todos estejam ordenados (Algoritmo
da Bolha).
(Animao em
http://www.youtube.com/watch?
feature=player_embedded&v=gWkvvsJHbwY)

Vetores
Algoritmo <ordemcrescente2>
inteiro:i,j,aux,vetor[20]
inicio
Leia (n)
para i de 1 at n-1 repita
para j de 1 at n-i repita
se (vetor[j] >
vetor[j+1] )
ento
aux vetor[j]
vetor[j+1] vetor[j]
vetor[j] aux
fim se
fim para
fim para

Vetores
Algoritmo 20 Desenvolva um algoritmo que leia um
vetor de n posies inteiras (n<=20) e o coloque em
ordem crescente, utilizando como estratgia de
ordenao inserir um elemento k num vetor j
ordenado de k-1 elementos.

Vetores
Algoritmo <ordemcrescente3>
inteiro:i,j,elemento,vetor[20]
inicio
Leia (n)
para j de 2 at n repita
elemento vetor[j]
i j-1
enquanto (i>0 e vetor[i]>elemento)
vetor[i+1] vetor[i]
i i-1
fim enquanto
vetor[i+1] elemento
fim para
fim

Vetores

Tarefas:
Estude os exerccios resolvidos de
estrutura de repetio do livro Introduo
Programao 500 Algoritmos Resolvidos
de Anita Lopes.
Estude a lista de exerccios resolvidos de
estrutura de repetio que se encontra no
site da disciplina.
Resolva a lista de exerccios propostos de
estrutura
de
repetio
que
estar
disponvel no dia 31/05 no site da
disciplina.

You might also like