33

Sequencial Estruturas de decisão · A estrutura Para é utilizada para efectuar ciclos incondicionais. Nesta estrutura de repetição existe uma variável de controlo que parte de

  • Upload
    lamtu

  • View
    219

  • Download
    0

Embed Size (px)

Citation preview

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>;

1. Todos os algoritmos propostos para a estrutura “Enquanto...”.

Exercícios

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.