Sequencial Estruturas de decisão · A estrutura Para é utilizada para efectuar ciclos...
Transcript of Sequencial Estruturas de decisão · A estrutura Para é utilizada para efectuar ciclos...
Estruturas de decisão ou selecção
Com base numa condição
Com base num selector
ou de escolha múltipla
Estruturas de repetição ou ciclos
Com contador
Com base numa condição
Sequencial – Estrutura de controlo mais simples. As instruções são executadas sequencialmente.
A estrutura sequencial é a estrutura de controlo mais simples.
As instruções são executadas de uma forma sequencial (umas a seguir às outras)
segundo a ordem pela qual foram escritas.
Exemplos:
1. Somar 2 números
Pseudocódigo
Inicio
Escrever (‘Introduza dois números’);
Ler (a,b);
c a+b;
Escrever (a,’+’,b,’=‘,c);
Fim.
Pascal
Program soma;
Var a,b,c:integer;
Begin
Writeln (‘Introduza dois números’);
Readln (a,b);
c :=a+b;
Writeln (a,’+’,b,’=‘,c);
End.
2. Dada a temperatura em graus FAHRENHEIT, faça a conversão para graus
CELSIUS.
Pseudocódigo:
Início
Escrever(‘Qual a temperatura em graus Fahrenheit?’);
Ler (f);
c (f-32) * 5/9;
Escrever (‘O valor em graus Celsius é ’, c);
Fim
Fluxograma:
Início
Ler (f)
c (f-32) * 5/9
Escrever (‘O valor em graus Celsius é ’, c)
Fim
Escrever (‘Qual a temp. em graus F?’)
Traçagem: f=50
Traçagem: f=50
Passos \ Variáveis f c Saídas
Leitura 50
Execução 10
Escrita O valor em graus Celsius é 10
Fim Exit
Pascal
Program temperatura;
Var
f,c:integer;
Begin
Writeln(‘Qual a temperatura em graus Fahrenheit?’);
Readln(f)
c := (f-32) * 5/9
Writeln(‘O valor em graus Celsius é’, C);
End.
1. A nota final de um aluno é calculada em função da nota do
teste (30%), nota do trabalho (20%) e nota do exame (50%).
Elabore um algoritmo, que após a leitura dos dados necessários,
determine e escreva a nota final para um aluno.
2. Dada a área de um circulo, determine o perímetro que o
envolve.
3. Dado um nº total de horas, determine quantas semanas, dias e
horas esse nº corresponde. Nota: No resultado, o nº de dias deve
ser menor ou igual a 7 e o nº de horas menor ou igual a 24.
4. Lido o ordenado ilíquido de um trabalhador e a percentagem
que faz de descontos indique o ordenado líquido.
Exercícios
Estruturas de decisão ou selecção
Com base numa condição
Com base num selector
ou de escolha múltipla
Se... Então...
Se... Então... Senão...
Caso...
Se condição Então
Início
Instrução1
...
Instruçãon
Fim
Se condição for verdadeira é executado um bloco de instruções.
Se condição for falsa o bloco de instruções não é executado.
Se o bloco for constituído por mais do que uma instrução para não haver confusão é
aconselhável mesmo em pseudocódigo delimitar as instruções do bloco por início e
fim.
Exemplo:
1. Ler um número inteiro e verificar se é par.
Pseudocódigo: Fluxograma
Inicio
Escrever(‘Introduza um número:’)
Ler (n)
Se nMOD2=0
Então Escrever (n,’ é par’)
Fim
Início
Ler (n)
Escrever (n,’ é par’)
Fim
nMod2=0 Não
Sim
Pascal
Program par;
Var
n:integer;
Begin
Writeln(‘Introduza um número inteiro’);
Readln(n);
If nMOD2=0 Then
Writeln(n,‘ é par’);
End.
Escrever (‘Int. um n.º’)
Se condição Então
Início
Instrução1
...
Instruçãon
Fim
Senão
Início
Instrução1
...
Instruçãom
Fim
Se condição for verdadeira é executado um bloco de instruções, referente ao bloco
Então.
Se condição for falsa é executado um bloco de instruções, referente ao bloco Senão.
Exemplo:
1. Lida uma nota, de 0 a 20, indicar se um aluno está ou não reprovado.
Pseudocódigo Fluxograma
Início
Escrever(‘Introduza uma nota (0..20)’);
Ler (nota);
Se nota>=10
Então Escrever (‘passou’);
Senão Escrever (‘reprovou’);
Fim.
Início
Ler (nota)
Escrever (‘reprovou’)
fim
Nota>=10 Sim
Não Escrever (‘passou’)
Escrever (‘Int. nota’)
Traçagem: n=12
Passos \ Variáveis nota nota>=10 Saídas
Leitura 12
Execução V
Escrita passou
Fim Exit
Em programação é frequente executar acções se e apenas se uma determinada
condição se verificar. Se tal não suceder então o programa deve seguir o seu curso
normal.
Às vezes é necessário decidir entre duas alternativas. Todos os dias deparamo-nos
com essa situação. Faz parte do nosso dia-a-dia. Se uma determinada condição
booleana se verificar, é executado o bloco de instruções correspondente à alternativa
verdadeira; caso contrário, e se houver essa alternativa, é executado o conjunto
correspondente à alternativa falsa.
Os operadores que aparecem para expressar condições são os operadores relacionais.
Pascal
Program classificar;
Var
nota:integer;
Begin
Writeln(‘Introduza uma nota (0..20)’);
Readln(nota);
If nota>=0 Then
Writeln(‘passou’)
Else Writeln(‘reprovou’);
End.
Nota: Em Pascal antes de um else não se pode colocar ponto e vírgula (;).
1. Lido um número escreva o seu valor absoluto.
2. Lido um número dizer se é positivo ou negativo.
3. Lidos dois números escrever o maior.
4. Lido um ano indicar se é ou não bissexto.
5. Uma criança tem no seu quarto ursos, carros e bonecos. Sendo
dada a quantidade de cada brinquedo, calcule a respectiva
percentagem. Indique se algum dos brinquedos tem
percentagem superior a 50%.
Exercícios
Caso variável/selector
etiqueta 1: instrução 1;
etiqueta 2: instrução 2;
...
etiqueta n: instrução n;
else instrução n+1;
Fim;
Esta estrutura permite a escolha entre várias alternativas.
Esta estrutura pode ser convertida numa estrutura Se encadeada.
O tipo de valores possíveis para a variável/selector tem obrigatoriamente de ser de
um tipo ordinal (inteiro, carácter, booleano,...).
As etiquetas são os valores possíveis que a variável/selector pode assumir. Estas
podem ser valores individuais ou conjuntos. Exemplos (1,5,10; ‘A’,’C’; 1..10;
‘A’..’Z’)
Se a variável/selector for do tipo carácter as etiquetas tem de estar entre plicas (‘’).
Se cada etiqueta tiver mais do que uma instrução, estas deverão estar delimitadas
por Início e Fim.
Exemplo:
1. Lida uma nota, de 0 a 20 (quantitativa), converta para a respectiva nota qualitativa.
0-4: Mau 5-9: Medíocre 10-13: Suficiente 14-17: Bom 18-20: Muito Bom
Pseudocódigo
Inicio
Escrever (‘Qual a nota?’);
Ler (nota);
Caso nota
0..4:Escrever (‘Mau’);
5..9:Escrever (‘Medíocre’);
10..13: Escrever (‘Suficiente’);
14..17: Escrever (‘Bom’);
18..20: Escrever (‘Muito Bom’);
fim;
Fim.
Fluxograma
Início
Ler (nota)
Escrever
(‘mau’)
Fim
nota
Escrever
(‘medíocre’)
Escrever
(‘suficiente’)
Escrever
(‘bom’)
Escrever
(‘muito bom’)
Escrever (‘Qual a nota?’)
Pascal
Program notas;
Var
nota:integer;
Begin
Writeln (‘Qual a nota?’);
Readln (nota);
Case nota of
0..4: Writeln(‘Mau’);
5..9: Writeln (‘Medíocre’);
10..13: Writeln (‘Suficiente’);
14..17: Writeln (‘Bom’);
18..20: Writeln (‘Muito Bom’);
End;
End.
Utilizando a estrutura Se...
Inicio
Escrever (‘Qual a nota?’);
Ler (nota);
Se (nota >=0) AND (nota <=4) then Escrever (‘Mau’)
Senão Se (nota >=5) AND (nota <=9) then Escrever (‘Medíocre’)
Senão Se (nota >=10) AND (nota <=13) then Escrever (‘Suficiente’)
Senão Se (nota >=14) AND (nota <=17) then Escrever (‘Bom’)
Senão Se (nota >=18) AND (nota <=20) then Escrever (‘M. Bom’)
Fim.
1. Lidos dois números efetue uma das seguintes operações à
escolha do utilizador: Adição (+), Subtração (-), Multiplicação (*)
e Divisão (/).
2. Lido o mês indicar o número de dias correspondente.
3. Elabore o exercício anterior usando a estrutura “Se... Então...
Senão...”. Comente.
4. Um vendedor tem comissão na venda de produtos. Se vender
de 1 a 5 produtos tem uma comissão de 2%. Se vender de 6 a 10
produtos tem uma comissão de 5%. Se vender mais de 10
produtos tem uma comissão de 10%. Esta percentagem é em
função do ordenado do vendedor.
Lido o ordenado do trabalhador e o nº de produtos vendidos,
escreva o ordenado após calcular a respetiva comissão.
Exercícios
Estruturas de repetição ou ciclos
Com contador
Com base numa condição
• Para ... De ... Até ...
• Enquanto ... Fazer ...
• Repetir ... Até ...
Um ciclo é algo que é executado mais do que uma vez.
Em programação é muitas vezes necessário executar uma determinada tarefa
repetidamente.
As estruturas de repetição permitem isso mesmo.
Quando se utilizam as estruturas de repetição é necessário ter cuidado porque é
fundamental que o programa termine. Uma das condições fundamentais de qualquer
algoritmo é ser finito.
Um ciclo deverá ter sempre quatro partes essenciais:
1. Inicialização das variáveis de condição de controlo;
2. Uma condição de controlo que é uma variável booleana ou uma
expressão lógica cujo resultado é sempre verdadeiro ou falso;
3. Instruções de ciclo, as quais são executadas enquanto a condição o
impuser;
4. A garantia de que o ciclo termine!
Estruturas a estudar:
• Para ... De ... Até ...
Permite que as instruções do ciclo sejam executadas um certo
número de vezes bem determinado.
• Enquanto ... Fazer ...
É uma estrutura usada em ciclos condicionais (é uma condição que
avalia) e pode ser executada zero ou mais vezes.
• Repetir ... Até ...
Assim como a anterior esta também é usada em ciclos condicionais. A
sequência de instruções será sempre executada pelo menos uma vez,
dado que a expressão booleana não é executada no início do ciclo,
como acontece na estrutura “Enquanto...” , mas, sim, no final, depois
do ciclo já ter sido executado uma vez.
Para variável Valor_Inicial Até Valor_Final Fazer
Início
Instrução1;
....
Instruçãon;
Fim;
A estrutura Para é utilizada para efectuar ciclos incondicionais.
Nesta estrutura de repetição existe uma variável de controlo que parte de um
determinado valor (Valor_Inicial) e é incrementada ou decrementada,
automaticamente à medida que o ciclo decorre, até atingir um outro determinado
valor (Valor_Final).
Valor_Inicial e Valor_Final terão de ser do tipo inteiro.
O número de vezes que o ciclo é executado é conhecido à priori.
Exemplos
1. Escrever os primeiros 10 inteiros positivos.
Pseudocódigo Fluxograma
inicio
Para i 1 até 10 fazer
Escrever (i)
fim
inicio
fim
i,1,10
Escrever
(i)
Pascal
Program inteiros;
Var i:integer;
Begin
For i := 1 to 10 do
Writeln (i);
End.
Sintaxe:
For <variável>:=<valor1> to/downto <valor2> do <instruções>
To – variável é incrementada
Downto – variável é decrementada
Em Pascal o incremento ou decremento é sempre e apenas 1.
2. Lidos 3 números indicar os pares.
Pseudocódigo: Fluxograma
inicio
Para i 1 até 3 fazer
inicio
Escrever (‘Introduza um número’);
Ler (num);
Se numMod2=0 Então Escrever (num, ‘é par’);
fim
fim
Traçagem: 5, 4, 2, 1, 8
inicio
fim
i,1,3
Escrever
(‘Intro. um num’)
Ler (num)
numMod2=0
Escrever
(num, é par’)
Não
Sim
Passos \
Variáveis i Num numMod2 Saídas
ciclo 1 Introduza um número
5 Falso
2 Introduza um número
4 Verdadeiro 4 é par
3 Introduza um número
2 Verdadeiro 2 é par
Fim Exit
E se pretendêssemos um algoritmo que somasse números até a soma atingir ou
ultrapassar 100!
1. Escrever a tabuada de um número lido.
2. Escrever os divisores de um número.
3. Lido um número, dizer se é ou não primo.
4. Calcular a soma dos N primeiros números naturais.
5. Lida a base e o expoente, calcular a potência.
6. Calcular a média de 10 números inseridos pelo utilizador.
Exercícios
O algoritmo sugerido anteriormente não tem solução utilizando a estrutura “Para...”,
porque não sabemos quantos números são necessários inserir até perfazer a dita soma.
No ciclo é necessário usar uma condição. Por esse motivo, a resolução do algoritmo
passa pelo uso de uma estrutura de repetição condicional.
Enquanto <condição> fazer
inicio
instrução 1;
instrução 2;
...
instrução n;
fim
O ciclo começa com o teste de uma condição de controlo, enquanto esta condição for
verdadeira o ciclo é executado. Uma vez que o teste é feito no início do ciclo este
pode não ser executado uma única vez.
Exemplos:
1. Somar números até a soma atingir ou ultrapassar 100!
Pseudocódigo: Fluxograma
inicio
soma 0;
Enquanto soma < 100 fazer
inicio
Escrever (‘Introduza um número’);
Ler (num);
soma soma+num;
fim
Escrever (‘soma=‘,soma);
fim
Neste exemplo diz-se que o ciclo é controlado por sentinela.
Traçagem: 50, 10, 20, 30
inicio
fim
Escrever
(‘Intro. um num’)
Ler (num)
soma<100
Escrever
(‘soma=‘,soma)
Não
Sim
Passos \
Variáveis soma<100 num soma Saídas
0
Ciclo Verdadeiro 50 50 Introduza um número
Verdadeiro 10 60 Introduza um número
Verdadeiro 20 80 Introduza um número
Verdadeiro 30 110 Introduza um número
Fim_ciclo Falso
soma=110
Fim Exit
soma 0
soma soma+num
2. Calcular a média de idades de N pessoas.
inicio
soma 0;
cont 1;
Escrever (‘Quantas pessoas?’)
Ler (n)
Enquanto cont <= n fazer
inicio
Escrever (‘Introduza a idade ’,cont );
Ler (idade);
soma soma+idade;
fim
media soma/n
Escrever (‘média =‘,media);
fim
Neste exemplo o ciclo é controlado por contador.
Sempre que um ciclo é controlado por contador é convertível à estrutura “Para...”.
Pascal
Sintaxe:
While <condição> do <instruções>;
1. Lida uma série de números, calcular a sua média. A série termina
quando for digitado o número 0.
2. Escrever todos os múltiplos de 5 compreendidos entre dois
valores introduzidos pelo utilizador.
3. Indicar todos os primos compreendidos entre dois valores
introduzidos pelo utilizador.
4. Todos os algoritmos propostos para a estrutura “Para...”.
Exercícios
Repetir
instrução 1;
instrução 2;
...
instrução n;
Até <condição>;
Esta estrutura é outra estrutura repetitiva de controlo, usada para efectuar ciclos
condicionais.
A sequência de instruções é sempre executada pelo menos uma vez, visto que a
condição é testada no fim do ciclo.
O ciclo, que utiliza esta estrutura, termina quando a condição for verdadeira.
Exemplo:
1. Somar números até a soma atingir ou ultrapassar 100!
Pseudocódigo: Fluxograma:
inicio
soma 0;
Repetir
Escrever (‘Introduza um número: ’);
Ler (num);
soma soma+num;
Até soma>=100;
Escrever (‘soma=‘,soma);
fim
Traçagem: 50, 10, 20, 30
Através da traçagem é visível uma das diferenças entre as duas últimas estruturas.
Uma termina quando a condição é falsa, outra quando a condição é verdadeira.
Nota: Esta estrutura é sempre convertível na estrutura While.
inicio
fim
Escrever
(‘Intro. um num’)
Ler (num)
soma>=100
Escrever
(‘soma=‘,soma)
Não
Sim
Passos \
Variáveis Soma>=100 num soma Saídas
0
Ciclo Falso 50 50 Introduza um número
Falso 10 60 Introduza um número
Falso 20 80 Introduza um número
Falso 30 110 Introduza um número
Fim_ciclo Verdadeiro
soma=110
Fim Exit
soma 0
soma soma+num
Pascal
Program somar;
Var
soma,num:integer;
Begin
soma := 0;
Repeat
Writeln (‘Introduza um número: ’);
Readln (num);
soma := soma+num;
Until soma>=100;
Writeln (‘soma=‘,soma);
End.
Sintaxe:
Repeat <instruções> Until <condição>;
Quantas vezes o ciclo vai ser executado?
Se a resposta for afirmativa a estrutura Para pode ser a solução mais adequada.
Apesar de qualquer estrutura contemplar uma situação destas.
O ciclo é executado com base numa condição?
Se a resposta é afirmativa é obrigatório o uso da estrutura Enquanto ou Repetir.
Atenção: A estrutura repetir obriga a que o ciclo seja executado pelo menos uma vez.
Assim como é possível ter uma estrutura “Se...Então...Senão...” dentro de outra
estrutura “Se...Então...Senão...”, também é possível ter um ciclo dentro de outro ciclo.
A construção interna deve ser completamente embutida na construção externa.
Não pode haver sobreposição.
Exemplo:
inicio
soma 0;
Para i 1 até 5 fazer
inicio
Repetir
Escrever (‘Introduza uma nota’);
Ler (nota);
Até nota>=0 e nota <=20;
soma soma+nota;
fim
media soma/5;
Escrever (‘Média=‘,soma);
fim
Este algoritmo faz a validação dos dados, ou
seja, calcula a média de notas situadas entre
0 e 20.