Lógica de Programação
Estruturas de Controle
Estruturas de Controle
Nesta aula
Estrutura Sequencial
Estrutura de Seleção
Estrutura de Repetição
Objetivos
Apresentar o conceito de estrutura sequencial de fluxo de
execução
Explicar a aplicabilidade das estruturas de seleção, suas
variações, combinações e equivalências
Apresentar as estruturas de repetição, suas
particularidades e equivalências
Estrutura Sequencial
O Fluxo de Controle segue a mesma sequência linear da
nossa escrita, ou seja:
De cima para baixo;
Da esquerda para direita
Cada ação é seguida de um ;
Objetiva separar uma ação da outra
Indica que a próxima ação da sequência deve ser executada
Estrutura sequencial
Algoritmo 3.1 – Modelo geral
início
// declaração de variáveis
// corpo do algoritmo
ação 1;
ação 2;
ação 3;
.
.
.
ação n;
fim. // fim do algoritmo
Estrutura sequencial
Algoritmo 3.2 - Média Aritmética
início
// declaração de variáveis
real: N1, N2, N3, N4, // notas bimestrais
MA; // média anual
// entrada de dados
leia (N1, N2, N3, N4);
// processamento
MA  (N1 + N2 + N3 + N4) / 4;
// saída de dados
escreva (MA);
fim.
Estruturas de Seleção
São aquelas que permitem alterar o Fluxo de Execução, de
forma a selecionar qual parte deve ser executada
Essa “decisão” de execução é tomada a partir de uma
condição, que pode resultar apenas em Verdade ou
Falsidade
Uma condição é representada por expressões relacionais ou
lógicas
As estruturas de seleção podem ser classificadas em
simples, compostas ou encadeadas
Seleção Simples
se <condição> então
início // início do bloco verdade
comando 1;
comando 2;
...
comando n;
fim; // fim do bloco verdade
fimse;
Quando a <condição> for verdadeira o “bloco verdade” é
executado
Quando a <condição> for falsa o “bloco verdade” não é
executado
Seleção Simples
Algoritmo 3.3 - Média Aritmética com Aprovação
início
// declaração de variáveis
real: N1, N2, N3, N4, // notas bimestrais
MA; // média anual
// entrada de dados
leia (N1, N2, N3, N4);
// processamento
MA  (N1 + N2 + N3 + N4) / 4;
// saída de dados
escreva (MA);
se (MA >= 7) então
escreva (“Aluno Aprovado !”);
fimse;
fim.
Seleção Composta
se <condição> então
início // início do bloco verdade
comando 1;
comando n;
fim; // fim do bloco verdade
senão
início // início do bloco falsidade
comando 1;
comando n;
fim; // fim do bloco falsidade
fimse;
Quando a <condição> for verdadeira o “bloco verdade” é
executado
Quando a <condição> for falsa o “bloco falsidade” é
executado
Seleção Composta
Algoritmo 3.4 - Média Aritmética com aprovação e reprovação
início
// declaração de variáveis
real: N1, N2, N3, N4, // notas bimestrais
MA; // média anual
leia (N1, N2, N3, N4);
MA  (N1 + N2 + N3 + N4) / 4;
escreva (MA);
se (MA >= 7) então
início
escreva (“Aluno Aprovado !”);
escreva (“Parabéns !”);
fim;
senão
início
escreva (“Aluno Reprovado !”);
escreva (“Estude mais !”);
fim;
fimse;
fim.
Seleção Encadeada
Ocorre quando uma seleção tem como ação uma
outra seleção
Uma seleção encadeada pode ser:
Heterogênea: Quando não é possível identificar padrão
de comportamento
Homogênea: Quando é possível identificar padrão de
comportamento
se – então – se: quando depois de cada então ocorre outro se
se – senão – se: quando depois de cada senão ocorre outro se
Seleção Encadeada
Dados três valores A, B, C, verificar se eles podem
ser os comprimentos dos lados de um triângulo
Caso positivo, verificar se compõem
Triângulo equilátero
Triângulo isósceles
Triângulo escaleno
A
B
C
Seleção Encadeada
Dados três valores A, B, C, verificar se eles podem
ser os comprimentos dos lados de um triângulo
Caso positivo, verificar se compõem
Triângulo equilátero – três lados iguais
Triângulo isósceles – dois lados iguais
Triângulo escaleno – todos os lados diferentes
A
B
C
Seleção Encadeada
É triângulo? É equilátero? É isósceles? É escaleno?
Ações
V
V
F
F
“Equilátero”
V
F
V
-
“Isósceles”
V
F
F
V
“Escaleno”
F
-
-
-
“Não é triângulo”
Triângulo: (A<B+C) e (B<A+C) e (C<A+B)
Equilátero: (A=B) e (B=C)
Isósceles: (A=B) ou (B=C) ou (A=C)
Escaleno: (A<>B) e (B<>C) e (A<>C)
Seleção Encadeada Heterogênea
Algoritmo 3.5 – Tipos de Triângulo
início
inteiro: A, B, C; // tamanho dos lados
leia (A, B, C);
se (A<B+C) e (B<A+C) e (C<A+B) então
se (A=B) e (B=C) então
escreva (“Triangulo Equilátero”);
senão
se (A=B) ou (B=C) ou (A=C) então
escreva (“Triângulo Isósceles”);
senão
escreva (“Triangulo Escaleno”);
fimse;
fimse;
senão
escreva (“Estes valores não formam um triângulo”);
fimse;
fim.
Seleção Encadeada Homogênea
se – então – se
se <Cond1> então
se <Cond2> então
se <Cond3> então
se <Cond4> então W;
fimse;
fimse;
fimse;
fimse;
Cond1
Cond2
Cond3
Cond4
Ação
V
V
V
V
W
É equivalente a:
se <Cond1> e <Cond2> e <Cond3> e <Cond4> então W;
fimse;
Seleção Encadeada Homogênea
se X=V1 então
C1;
fimse;
se X=V2 então
C2;
fimse;
se X=V3 então
C3;
fimse;
se X=V4 então
C4;
fimse;
se X=V1
então C1;
senão se X=V2
então C2;
senão se X=V3
então C3;
senão se X=V4
se – senão – se
então C4;
fimse;
fimse;
fimse;
fimse;
X=V1 X=V2 X=V3 X=V4 Ação
X=V1 X=V2 X=V3 X=V4 Ação
V
F
F
F
C1
V
-
-
-
C1
F
V
F
F
C2
F
V
-
-
C2
F
F
V
F
C3
F
F
V
-
C3
F
F
F
V
C4
F
F
F
V
C4
Seleção de Múltipla Escolha
Seleções encadeadas homogêneas se-senão-se são
bastante frequentes para o tratamento de listas de valor
Para simplificar a escrita, pode-se utilizar o comando
escolha.
Adaptando o algoritmo anterior:
escolha X
caso V1: C1;
caso V2: C2;
caso V3: C3;
caso V4: C4;
fimescolha;
Seleção de Múltipla Escolha
Construa um algoritmo que, tendo como dados de entrada o preço de um
produto e seu código de origem, mostre o preço junto de sua procedência
Caso o código não seja nenhum dos especificados, o produto deve ser
encarado como importado
Siga a tabela de códigos abaixo
Código de origem
Procedência
1
Sul
2
Norte
3
Leste
4
Oeste
5 ou 6
Nordeste
7, 8 ou 9
Sudeste
10 até 20
Centro-oeste
25 até 30
Nordeste
Seleção de Múltipla Escolha
Algoritmo 3.6 – Múltipla Escolha
início
real: Preço;
inteiro: Origem;
leia (Preço, Origem);
escolha Origem
caso 1: escreva (Preço, “ – produto do Sul”);
caso 2: escreva (Preço, “ – produto do Norte”);
caso 3: escreva (Preço, “ – produto do Leste”);
caso 4: escreva (Preço, “ – produto do Oeste”);
caso 7, 8, 9: escreva (Preço, “ – produto do Sudeste”);
caso 10..20: escreva (Preço, “ – produto do Centro-Oeste”);
caso 5, 6, 25..50: escreva (Preço, “ – produto do Nordeste”);
caso contrário: escreva (Preço, “ – produto importado”);
fimescolha;
fim.
Estruturas de Repetição
São aquelas que permitem executar mais de uma vez
(repetir) um determinado trecho do algoritmo
O trecho do algoritmo em repetição é também chamado de
laço (ou “loop”)
As repetições devem ser sempre finitas
Quanto a quantidade de repetições, os laços podem ser
Pré-determinados: Sabe-se antes a quantidade de execuções
Indeterminados: Não se conhece a quantidade de execuções
Quanto ao critério de parada, os laços podem utilizar
Teste no início
Teste no final
Variável de controle
Repetição com Teste no Início
Laço que verifica antes de cada execução, se é “permitido”
executar o trecho do algoritmo
Trata-se de um laço que se mantém repetindo enquanto uma
dada condição permanecer verdadeira
enquanto <condição> faça
comando 1;
comando 2;
...
comando n;
fimenquanto;
Repetição com Teste no Início
Contador: Variável que reproduz o processo de
contagem
início
inteiro: CON;
CON  0;
enquanto CON < 3 faça
CON  CON + 1;
fimenquanto;
fim.
CON
3
2
1
0
Repetição com Teste no Início
Algoritmo 3.7 - Média Aritmética para 50 alunos
início
// declaração de variáveis
real: N1, N2, N3, N4, // notas bimestrais
MA; // média anual
inteiro: CON; // contador
CON  0; // inicialização do contador
enquanto (CON < 50) faça // teste da condição de parada
leia (N1, N2, N3, N4);
MA  (N1 + N2 + N3 + N4) / 4;
escreva (MA);
se (MA >= 7) então
escreva (“Aluno Aprovado. Parabéns !”);
senão
escreva (“Aluno Reprovado. Estude mais !”);
fimse;
CON  CON + 1; // incremento do contador
fimenquanto;
fim.
Repetição com Teste no Início
Acumulador: Variável que reproduz o processo de
acumulação
início
inteiro: CON, X, ACM;
CON  0;
ACM  0;
enquanto CON < 3 faça
CON  CON + 1;
leia (X);
ACM  ACM + X;
fimenquanto;
fim.
CON
ACM
X
3
2
1
0
11
7
5
0
4
2
5
Repetição com Teste no Início
Algoritmo 3.8 - Média Aritmética da turma de 50 alunos
início
// declaração de variáveis
real: MA, // média anual de dado aluno
ACM, // Acumulador
MAT; // Média Anual da Turma
inteiro: CON; // contador
CON  0; // inicialização do contador
ACM  0; // inicialização do acumulador
enquanto (CON < 50) faça // teste da condição de parada
leia (MA);
ACM  ACM + MA; // soma em ACM os valores lidos em MA
CON  CON + 1; // incremento do contador
fimenquanto;
MAT  ACM / 50; // calculo da média anual da turma
escreva (“média anual da turma = “, MAT);
fim.
Repetição com Teste no Final
Laço que verifica depois de cada execução, se é “permitido”
continuar executando o trecho do algoritmo
Trata-se de um laço que se mantém repetindo até que uma
dada condição se torne verdadeira
repita
comando 1;
comando 2;
...
comando n;
até <condição>;
Repetição com Teste no Final
Algoritmo 3.9 - Média Aritmética da turma com Repita
início
// declaração de variáveis
real: MA, // média anual de dado aluno
ACM, // Acumulador
MAT; // Média Anual da Turma
inteiro: CON; // contador
CON  0; // inicialização do contador
ACM  0; // inicialização do acumulador
repita
leia (MA);
ACM  ACM + MA; // soma em ACM os valores lidos em MA
CON  CON + 1; // incremento do contador
até (CON >= 50); // teste da condição de parada
MAT  ACM / 50; // calculo da média anual da turma
escreva (“média anual da turma = “, MAT);
fim.
Repetição com Variável de
Controle
Laço simplificado para utilização em repetições de
quantidade predeterminada
Incorpora internamente o funcionamento de um contador de
repetições
para V de vi até vf passo p faça
comando 1;
comando 2;
...
comando n;
fimpara;
Repetição com Teste no Final
Algoritmo 3.10 - Média Aritmética da turma com Para
início
// declaração de variáveis
real: MA, // média anual de dado aluno
ACM, // Acumulador
MAT; // Média Anual da Turma
inteiro: V; // contador
ACM  0; // inicialização do acumulador
para V de 1 até 50 passo 1 faça
leia (MA);
ACM  ACM + MA; // soma em ACM os valores lidos em MA
fimpara;
MAT  ACM / 50; // calculo da média anual da turma
escreva (“média anual da turma = “, MAT);
fim.
Comparação entre Estruturas de
Repetição
Aprendemos 3 maneiras de construir laços de repetição
É importante perceber que existem laços mais adequados ou
convenientes para cada situação
Estrutura
Condição
Quantidade de
Execuções
Condição de
Existência
Enquanto
Início
zero ou muitas
Condição verdadeira
Repita
Final
uma ou muitas
Condição falsa
Para
Não tem
((vf - vi) div p) + 1
v <= vf
Exercício
Construa um algoritmo que permita fazer um levantamento
do estoque de vinhos de uma adega, tendo como dados de
entrada tipos de vinho, sendo
T – vinho tinto
B – vinho branco
R – vinho rosê
Especifique a porcentagem de cada tipo sobre o total geral
de vinhos
A quantidade de vinhos é desconhecida
Utilize como finalizador
F – fim
Lógica de Programação
Estruturas de Dados
Estruturas de Dados
Tópicos
Vetores
Matrizes
Registros
Registro de Conjuntos
Conjuntos de Registros
Estruturas de Dados
Os tipos primitivos (inteiro, real, caracter 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 CLASSE = vetor [1 .. 40] de reais;
CLASSE: VCLASSE;
Onde:
CLASSE: Nome do tipo que está sendo construído
1: Limite inicial do vetor
40: Limite final do vetor
reais: Tipo primitivo base do vetor
VCLASSE: Nome da variável criada cf o tipo construído
Vetores
Manipulação:
inteiro: A;
VCLASSE [ 7 ]  6,5;
VCLASSE [ 2 ]  7,8;
VCLASSE [ 4 ]  5,3;
leia (A); // supondo que foi informado 6
VCLASSE [ A ]  9,8;
VCLASSE [ A-1 ]  9,1;
leia ( VCLASSE [ A+3 ] ); // supondo que foi informado 4,7
VCLASSE
7,8
1
2
5,3
3
4
9,1
5
9,8
6,5
6
7
4,7
8
9
38
39
40
Vetores
Algoritmo 4.1 – Notas acima da média usando variáveis simples
início
inteiro: NotaAcima;
real: A, B, C, D, E, F, G, H, I, J, Média;
NotaAcima  0;
leia (A,B,C,D,E,F,G,H,I,J);
Média  (A + B + C + D + E + F + G + H + I + J)/10;
se (A > Média)
então NotaAcima  NotaAcima + 1;
fimse;
se (B > Média)
então NotaAcima  NotaAcima + 1;
fimse;
...
se (J > Média)
então NotaAcima  NotaAcima + 1;
fimse;
escreva (NotaAcima);
fim.
Vetores
Algoritmo 4.2 – Notas acima da média usando vetor
início
tipo Classe = vetor [1 .. 10] de reais;
Classe: VClasse;
inteiro: NotaAcima, X;
real: Soma, Média;
Soma  0;
NotaAcima  0;
para X de 1 até 10 passo 1 faça
leia ( VClasse[X] );
Soma  Soma + VClasse[X];
fimpara;
Média  Soma / 10;
para X de 1 até 10 passo 1 faça
se ( VClasse[X] > Média )
então NotaAcima  NotaAcima + 1;
fimse;
fimpara;
escreva (NotaAcima);
fim.
Matrizes
Também denominadas Estruturas compostas homogêneas
multidimensionais
Permitem a manipulação de um conjunto de informações de
um mesmo tipo primitivo
Declaração:
tipo SALA = matriz [1 .. 4, 1 .. 4] de inteiros;
SALA: MSALA;
Onde:
SALA: Nome do tipo que está sendo construído
1: Limite inicial da primeira e da segunda dimensão
4: Limite final da primeira e da segunda dimensão
inteiros: Tipo primitivo base da matriz
MSALA: Nome da variável criada cf o tipo construído
Matrizes
MSALA
Manipulação:
inteiro : A, B;
MSALA [ 2, 3 ]  5;
MSALA [ 3, 2 ]  6;
MSALA [ 1, 2 ]  7;
A  4;
B  3;
MSALA [ A, B ]  8;
MSALA [ A, B-2 ]  9;
MSALA [ A-2, B-2 ]  10;
MSALA [ B, A ]  11;
MSALA [ B-2, A ]  12;
1
1
2
7
2 10
3
4 9
3
4
12
5
6
11
8
Matrizes
Exemplo: Cartão da Loteria Esportiva
Jg
Coluna 1
Ept
Coluna 2
1
Santos
Corinthians
2
Flamengo
Fluminense
3
Palmeiras
São Paulo
4
Vasco
Botafogo
5
Portuguesa
XV de jaú
6
São Caetano
XV de Piracicaba
7
Grêmio
Internacional
8
Havaí
Figueirense
9
Coritiba
Atlético-PR
10
Paysandú
Juventude
11
Atlético-MG
Cruzeiro
12
Brasiliense
Ponte Preta
13
Fortaleza
Goiás
14
Esportivo
Londrina
Matrizes
Algoritmo 4.3 – Loteria Esportiva, jogo mais marcado
início
tipo Loteria = vetor [1 .. 14, 1 .. 3] de caracteres;
Loteria: mLoteria;
inteiro: I, J, maisMar, nJogo, marLin;
maisMar  0;
para I de 1 até 14 faça
marLin  0;
para J de 1 até 3 faça
se mLoteria[ I, J] =‘x’;
então marLin  marLin + 1;
fimse;
fimpara;
se marLin > maisMar então
maisMar  marLin;
nJogo  I;
fimse;
fimpara;
escreva (“Jogo mais marcado: “, nJogo, “com “, maisMar);
fim.
Matrizes
Algoritmo 4.4 – Loteria Esportiva, coluna mais marcada
início
tipo Loteria = vetor [1 .. 14, 1 .. 3] de caracteres;
Loteria: mLoteria;
inteiro: I, J, maisMar, nColuna, marCol;
maisMar  0;
para J de 1 até 3 faça
marCol  0;
para I de 1 até 14 faça
se mLoteria[ I, J] =‘x’;
então marCol  marCol + 1;
fimse;
fimpara;
se marCol > maisMar então
maisMar  marCol;
nColuna  J;
fimse;
fimpara;
escreva (“Coluna mais marcada: “, nColuna, “com “, maisMar);
fim.
Registros
Também denominadas Estruturas compostas heterogêneas
Permitem a manipulação de um conjunto de informações de
tipos primitivos diferentes
Exemplo: Passagem de ônibus
Número: 0001
De: ____________________ Para: _______________________
Data: ____ / ____ / _______ Horário: ________ : _________
Poltrona: ____________
Distância: ____________ km
Registros
Declaração:
tipo regPassagem = registro
inteiro: Número;
caracter: Origem, Destino, Data, Horário;
inteiro: Poltrona;
real: Distância;
fimregistro;
regPassagem: Passagem;
Manipulação:
leia (Passagem);
escreva (Passagem);
leia (Passagem.Origem);
escreva (Passagem.Destino);
Passagem.Distância  500;
Registro de Conjuntos
Combinação de estruturas heterogêneas com homogêneas
Podem ser obtidas ao incluir num registro outro tipo de
dados construído
Exemplo: Registro de Estoque com Baixa semanal
Nome: _____________________________________________
Código: ___________________ Preço: __________________
Baixa
1
2
3
4
5
6
Registro de Conjuntos
Declaração:
tipo vDias = vetor [ 1 .. 6 ] de inteiros;
tipo regProd = registro
caracter: Nome;
inteiro: Código;
real: Preço;
vDias: Baixa;
fimregistro;
regProduto: Produto;
Manipulação:
escreva (Produto.Nome);
escreva (Produto.Código);
escreva (Produto.Preço);
escreva (Produto.Baixa [ 1 ]);
Produto.Baixa [ 4 ]  500;
Conjunto de Registros
Combinação de estruturas homogêneas com heterogêneas
Podem ser obtidas ao formar um conjunto com outro tipo de
dados construído
Exemplo: Ônibus formado por Passagem
1
Número: 0001
2
De: ____________________ Para: _______________________
3
Data: ____ / ____ / _______ Horário: ________ : _________
4
Poltrona: ____________
44
Distância: ____________ km
Conjunto de Registros
Declaração:
tipo regPassagem = registro
inteiro: Número;
caracter: Origem, Destino, Data, Horário;
inteiro: Poltrona;
real: Distância;
fimregistro;
Tipo vetPassagem = vetor [ 1 .. 44 ] de regPassagem;
vetPassagem: Ônibus;
Manipulação:
leia (Passagem [ 7 ]);
escreva (Passagem [ 4 ]);
leia (Passagem [12].Origem);
escreva (Passagem [21].Destino);
Passagem [34].Distância  500;
Download

aula03