AEDI-estruturasdedados

Propaganda
Algoritmos e Estruturas de
Dados I – Estruturas de Dados
Profa. Mercedes Gonzales
Márquez
Estruturas de Dados
•Os
tipos primitivos (inteiro, real, literal e
lógico) não são suficientes para representar
todos os tipos de informação.
•Particularmente quando temos mais de
uma informação relacionada. Ex: Lista dos
nomes dos alunos de uma sala, endereço de
alguém etc.
•Utilizaremos os tipos primitivos para
construir outras estruturas de dados mais
complexas.
Vetores
•
•
Também denominados Estruturas compostas
homogêneas unidimensionais
Permitem a manipulação de um conjunto de
informações de um mesmo tipo primitivo
◦ Declaração :
tipo primitivo : nome_vetor [numero de
elementos]
◦ Exemplo :
Um vetor com nome “dados” de 40 posições
reais terá a seguinte declaração.
Real: dados[40]
dados
1
2
3
4
5
6
7
8
9
38
39
40
2,4
7,8
3,6
5,3
9,1
9,8
6,5
9,8
4,7
1,5
2,8
4,6
Vetores
◦ Manipulação:
 Para manipular os elementos de um vetor
devemos especificar a sua posição.
dados
2,4
7,8
7,8
3,6
5,3
9,1
9,8
6,5
9,8
4,7
1,5
2,8
4,6
1
2
3
4
5
6
7
8
9
38
39
40
-dados[8]
• A posição do vetor é determinada por meio de uma
constante, de uma expressão aritmética ou de uma
variável que estiver dentro dos colchetes. Ela é
também chamada de índice.
Vetores
Exercício – Sendo o vetor v igual a
2
7,8
6
8
3
10
9
1
21
33
14
1
2
3
4
5
6
7
8
9
10
e as variáveis x=2 e y=4 escreva o valor
correspondente à solicitação
(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
posições, 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 posição par e 0 na posição impar
inteiro: vetor[100],i
inicio
para i de 1 até 100 repita
se (mod(i,2)=0) então
vetor[i] ← 1
senão
vetor[i] ← 0
fimpara;
fim.
Vetores
Algoritmo 4 – Altere o exemplo da soma de vetores
para que esta realize a seguinte operação: produto
do primeiro vetor pelo inverso do segundo. Os
vetores possuem 20 posições e contém 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) então
c ← c+1
fim se
fim para
escreva (c)
fim.
Vetores
Algoritmo 7 – Escreva um algoritmo que leia um
vetor de 50 posições de números 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) então
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 posição no vetor.
Algoritmo <menorelemento>
inteiro:V[80], i, ind,menor
inicio
leia (V[1])
menorV[1]
ind1
para i de 2 até 80 repita
leia (V[i])
se (V[i]<menor) então
menorV[i]
indi
fim se
fim para
Vetores
Algoritmo 9 – Faça 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) então
V1[c1]V[i]
c1c1+1
senão
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 são 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 número de acertos
do aluno e uma mensagem APROVADO, se a nota for maior
ou igual a 6; e uma mensagem de REPROVADO, caso
contrário.
Vetores
Algoritmo <prova>
notaacertos*0.5
literal:G[20], R[20]
se (nota>=6) então
inteiro:i,j,acertos
escreva (“APROVADO”)
inicio
senão
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]) então
acertos ← acertos+1
fim se
fim para
Vetores
Algoritmo 12 – Faça um algoritmo que leia um
código numérico inteiro e um vetor de 50 posições
de números reais. Se o código 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) então
para i de 1 até 50 repita
leia (vetor[i])
fim para
se (codigo=1) então
para i de 1 até 50 repita
escreva (vetor[i])
fim para
senão
para i de 50 até 1 passo -1 repita
escreva (vetor [i])
fim para
fim se
fim se
Vetores
Algoritmo 13 – Faça um algoritmo que leia dois
conjuntos de números inteiros tendo cada um 20
elementos e apresente os elementos comuns
(interseção 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
k←0
Para i de 1 até 20 repita
Para j de 1 até 20 repita
Se( a[i] = b[j] ) então
k ← k+1
c[k] ← a[i]
Fim_se
Fim_para
Fim_para
Se ( k=0 ) então
Escreva(“Interseção Vazia. “)
Senão
Escreva(“Conjunto Interseção:”)
Para i de 1 até k repita
Escreva( c[i] )
Fim_para
Fim_se
Fim
Obs. Com este algoritmo, se houver
elementos repetidos, também se
repetirão na saída. 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, L←0
Para i de 1 até 20 repita
j←1
Enquanto (a[i]<>b[j] e j<=20) faça
j ← j+1
Fim enquanto
Se( a[i] = b[j] ) então
k←0
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 ) então
Escreva(“Interseção Vazia. “)
Senão
Escreva(“Conjunto Interseção:”)
Para i de 1 até k repita
Escreva( c[i] )
Fim_para
Fim_se
Fim
Vetores
Algoritmo 14 – Uma locadora de vídeos tem
guardada, em um arquivo manual, a quantidade de
filmes retirados por cliente durante o ano de 2007.
Faça um algoritmo que
(a) leia um vetor de 500 posições para guardar esta
informação e
(b) crie um outro vetor contendo a quantidade de
locações gratuitas a que cada cliente tem direito,
considerando que a locadora está fazendo uma
promoção e para cada 10 filmes retirados ganha-se
uma locação grátis.
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 polinômio P(x) de grau n,
da forma
P(x) = a0xn + a1xn-1 + ... + an-1x + an,
onde a0, a1, ..., an (reais) são os coeficientes do
polinômio. Faça um algoritmo para ler:
(a)n (o grau do polinômio), n<=100
(b)os coeficientes a0, a1, ..., an e
(c)uma sequência 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
início
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 faça a
reserva de passagens aéreas de uma companhia.
Além da leitura do número dos vôos e quantidade de
lugares disponíveis, ler vários pedidos de reserva,
constituídos do número de carteira de identidade do
cliente e do número de vôo desejado.
Para cada cliente, verificar se há disponibilidade no
vôo desejado. Em caso afirmativo, imprimir o
número da identidade do cliente, e o número de vôo,
atualizando o número de lugares disponíveis. Caso
contrário, avisar ao cliente da inexistência de
lugares.
Indicando o fim dos pedidos de reserva, existe um
passageiro cujo número de carteira de identidade é
9999. Considerar fixo e igual a 37 o número de vôos
da companhia.
Algoritmo <reservapassagens>
inteiro:i,voos[37],disp[37],cliente,nvoo
início
Para i de 1 até 37 repita
leia (voos[i],disp[i])
Fim Para
leia cliente
enquanto cliente<>9999 faça
leia nvoo
i←0
repita
i ← i+1
até que (i=37 ou voos[i]=nvoo)
se (voos[i]=nvoo) então
se (disp[i]>0) então
escreva (cliente,nvoo)
disp[i] ← disp[i]-1
senão
escreva (nvoo, “lotado”)
fim se
senão
escreva (“voo inexistente”)
fim se
leia cliente
fim enquanto
fim
Vetores
Algoritmo 17 – Faça um algoritmo que leia um vetor
de 20 inteiros e o coloque em ordem crescente,
utilizando a seguinte estratégia de ordenação:
•Selecione o elemento do vetor de 20 posições que
apresente o menor valor.
•Troque este elemento pelo primeiro.
•Repita estas operações, envolvendo agora apenas os
19 elementos restantes (trocando o de menor valor
com a segunda posição), depois os 18 elementos
(trocando o de menor valor com a terceira posição),
depois os 17,16 e assim por diante, até restar um
único elemento, o maior deles. Este algoritmo é
conhecido como algoritmo de seleção.
Animação em
http://www.youtube.com/watch?feature=player_emb
edded&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 ) então
menor ← vetor[j]
indice ← j
inter ← 1
fim se
fim para
se (inter=1) então
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]) então
indice ← j
fim se
fim para
aux ← vetor[i]
vetor[i] ← v[indice]
vetor[indice] ← aux
fim para
Vetores
Algoritmo 19 – Desenvolva um algoritmo que leia um
vetor de n posições inteiras (n<=20) e o coloque em
ordem crescente, utilizando como estratégia de
ordenação a comparação de pares de elementos
adjacentes, permutando-os quando estiverem fora
de ordem até que todos estejam ordenados
(Algoritmo da Bolha).
(Animação em
http://www.youtube.com/watch?feature=player_emb
edded&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] ) então
aux ← vetor[j]
vetor[j+1] ← vetor[j]
vetor[j] ← aux
fim se
fim para
fim para
fim
Vetores
Algoritmo 20 – Desenvolva um algoritmo que leia um
vetor de n posições inteiras (n<=20) e o coloque em
ordem crescente, utilizando como estratégia de
ordenação 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 exercícios resolvidos de
estrutura de repetição do livro Introdução
à Programação 500 Algoritmos Resolvidos
de Anita Lopes.
Estude a lista de exercícios resolvidos de
estrutura de repetição que se encontra no
site da disciplina.
Resolva a lista de exercícios propostos de
estrutura
de
repetição
que
estará
disponível no dia 31/05 no site da
disciplina.
Download