Algoritmos – Variáveis Compostas Homogêneas

Propaganda
Algoritmo e Estrutura de
Dados I
Aula 9 – Variáveis Compostas
Homogêneas
Márcia Marra
[email protected]
Variáveis Compostas Homogêneas
• Correspondem a posições de memória,
identificadas por um mesmo nome,
individualizadas por índices e cujo conteúdo é
do mesmo tipo.
• Exemplo:
NOTA
60 70 90 60 55 91 99 47 47 86
1
2
3
4
5
6
7
8
9
10
2
Declaração de Variáveis
Compostas Homogêneas
declare lista de identificadores [li:ls]t
onde:
– declare: palavra chave
– lista de identificadores: nomes associados às variáveis que
se deseja declarar
– li:
limite inferior do intervalo de variação dos índices
– ls:
limite superior do intervalo de variação dos índices
– t:
tipo dos componentes da variável (numérico,
literal, lógico)
• O limite superior não deve ser menor do que o limite
inferior, ou seja, ls ≥ li
3
Alguns exemplos de declaração
•
•
•
•
declare
declare
declare
declare
literal
• declare
NOTA [1:10] numérico
VOOS [1:500] numérico
LIVROS [1:1000] numérico
GABARITO, RESPOSTAS [1:10]
FREQUENCIA [0:10] numerico
4
Exemplo 1 – preenchimento
Algoritmo
declare M[1:6] numérico
declare I numérico
I ← 1
repita
se I > 6
então interrompa
fim se
M[I] ← 2
I ← I + 1
fim repita
escreva M[1], M[2] … M[6]
Fim Algoritmo
5
Exemplo 2
• O algoritmo deve ler uma variável de 100
elementos e verificar se existem elementos
iguais a 30. Se existirem, escrever as posições
em que estão armazenados.
Algoritmo
Defina o tipo das variaveis
leia NUMEROS[1] ... NUMEROS[100]
Verifique se existem elementos
iguais a 30
Fim Algoritmo
6
Refinamentos sucessivos do
exemplo 2
Ref. Verifique se existem elementos iguais a 30
I ← 1
repita
se I > 100
então interrompa
fim se
se NUMEROS[I] = 30
então escreva I
fim se
I ← I + 1
fim repita
Fim Ref.
Ref. Defina o tipo das variáveis
declare NUMEROS[1:100] numerico
declare I numerico
Fim Ref
7
Exemplo 2 – Algoritmo Completo
Algoritmo
{ Declaracao do tipo das variaveis }
declare NUMEROS[1:100] numerico
declare I numerico
leia NUMEROS[1] ... NUMEROS[100]
{ Verificacao da existencia de elementos iguais a 30 }
I ← 1
repita
se I > 100
então interrompa
fim se
se NUMEROS[I] = 30
então escreva I
fim se
I ← I + 1
fim repita
Fim Algoritmo
8
Exemplo 3
• A diretoria do ICEx deseja saber se existem alunos
cursando, simultaneamente, Algoritmos e Estrutura de
Dados I (AEDSI) e Cálculo Numérico (CN).
• Existem disponíveis na unidade de entrada os números
de matrícula dos alunos de AEDSI (no máximo 150
alunos) e de CN (no máximo 220 alunos).
• Cada conjunto dos números de matrícula dos alunos de
uma disciplina tem a matrícula fictícia 99999 no final.
• Formular um algoritmo que imprima o número de
matrícula dos alunos que estão cursando estas
disciplinas simultaneamente.
9
Exemplo 3 – Estrutura de Dados
• Este problema trata da verificação de ocorrência
de um elemento de um conjunto em um outro
conjunto.
AEDS I
...
1
2
3
4
5
...
150 151
CN
...
1
2
3
4
5
...
10
220 221
Exemplo 3 – Algoritmo em alto
nível
Algoritmo
Declare variaveis
Leia matricula dos alunos que estao
cursando AEDS I
Leia matricula dos alunos que estao
cursando CN
Verifique a matricula simultanea em
AEDS I e CN
Fim Algoritmo
11
Refinamentos sucessivos do
algoritmo 3
Ref. Leia matricula dos alunos que estao cursando AEDSI
I ← 1
repita
leia AEDSI [I]
se AEDSI[I] = 9999
entao interrompa
fim se
I ← I + 1
fim repita
Fim Ref.
Ref. Leia matricula dos alunos que estao cursando CN
I ← 1
repita
leia CN [I]
se CN[I] = 9999
entao interrompa
fim se
I ← I + 1
fim repita
Fim Ref.
12
Refinamentos sucessivos do
algoritmo 3
Ref. Verifique a matricula simultanea em AEDSI e CN
I ← 1
repita
se AEDSI[I] = 9999
entao interrompa
fim se
J ← 1
repita
se CN[J] = 9999 ou AEDSI[I] = CN[J]
entao interrompa
fim se
J ← J + 1
fim repita
se AEDSI[I] = CN [J]
entao escreva AEDS[I]
fim se
I ← I + 1
fim repita
Fim Ref.
13
Refinamentos sucessivos do
exemplo 3
Ref. Declare as variaveis
declare
AEDSI[1:151],
CN [1:221]
numérico
declare
I, J numérico
Fim Ref.
14
Exemplo 3 completo (1/2)
Algoritmo
declare AEDSI[1:151],
CN [1:221]
numérico
declare I, J numérico
I ← 1
repita
leia AEDSI [I]
se AEDSI[I] = 9999
entao interrompa
fim se
I ← I + 1
fim repita
I ← 1
repita
leia CN [I]
se CN[I] = 9999
entao interrompa
fim se
I ← I + 1
fim repita
15
Exemplo 3 completo (2/2)
I ← 1
repita
se AEDSI[I] = 9999
entao interrompa
fim se
J ← 1
repita
se CN[J] = 9999 ou AEDSI[I] = CN[J]
entao interrompa
fim se
J ← J + 1
fim repita
se AEDSI[I] = CN [J]
entao escreva AEDS[I]
fim se
I ← I + 1
fim repita
Fim Algoritmo
16
Exemplo 4
• Escrever um algoritmo que faça reserva de passagens
aéreas de uma companhia.
• Além da leitura do número de vôos e quantidade de
lugares disponíveis, ler vários pedidos de reserva,
constituídos do número da carteira de identidade do
cliente e do número do 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 do vôo, atualizando o número de lugares dosponí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 da carteira de identidade é 9999.
Considerar fixo e igual a 37 o número de vôos da
companhia.
17
Exemplo 4 – Estrutura de Dados
Número dos
Lugares
Vôos
Disponíveis
18
Exemplo 4 – alto nível
Algoritmo
leia VOOS[1] ... VOOS[37], LDISP[1] ...
LDISP[37]
repita
leia CLIENTE, NVOO
se CLIENTE = 9999
entao interrompa
fim se
Verifique a existencia de voo
Verifique a existencia de lugar
fim repita
Fim Algoritmo
19
Refinamentos sucessivos do
Exemplo 4
Ref. Verifique a existência de voo
I ← 0
repita
I ← I + 1
se I = 37 ou VOOS[I] = NVOO
entao interrompa
fim se
fim repita
se VOOS[I] = NVOO
entao APONT ← I
senao escreva “VOO INEXISTENTE”
APONT ← 0
fim se
Fim ref.
20
Refinamentos sucessivos do
Exemplo 4
Ref. Verifique a existência de lugar
se APONT ≠ 0
entao se LDISP[APONT] > 0
entao escreva CLIENTE, NVOO
senao escreva NVOO, “LOTADO”
fim se
Fim se
Fim Ref
Ref. Atualize o número de lugares disponiveis
LDISP[APONT] ← LDISP[APONT] -1
Fim Ref.
21
Refinamentos sucessivos do
Exemplo 4
Ref. Declare as variaveis
declare VOOS,{numero dos voos}
LDISP[1:37] {lugares disponiveis}
numérico
declare APONT, CLIENTE, I, NVOO numerico
Fim Ref.
22
Algoritmo
declare VOOS, {numero dos voos}
LDISP[1:37] {lugares disponiveis}
declare APONT, CLIENTE, I, NVOO numerico
leia VOOS[1]...VOOS[37],LDISP[1]...LDISP[37]
repita
leia CLIENTE, NVOO
se CLIENTE = 9999
entao interrompa
fim se
I ← 0
repita
I ← I + 1
se I = 37 ou VOOS[I] = NVOO
entao interrompa
fim se
fim repita
se VOOS[I] = NVOO
entao APONT ← I
senao escreva “VOO INEXISTENTE”
APONT ← 0
fim se
se APONT ≠ 0
entao se LDISP[APONT] > 0
entao escreva CLIENTE, NVOO
LDISP[APONT] ← LDISP[APONT] -1
senao escreva NVOO, “LOTADO”
fim se
Fim se
Fim Repita
Fim Algoritmo
23
Download