Alg aula 05-1 - estruturas de-repeticao tp1 (repita e enquanto)
1. 1
Estruturas de RepetiçãoEstruturas de Repetição -- II
Programação I
ALG
2
Estruturas de repetição
Diferente do ser humano, o computador não se cansa
de realizar operações repetitivas.
Diante disto, podemos incluir nos algoritmos as
estruturas de repetição.
O que é uma repetição?
Também chamada a laço ou loop;
É uma instrução que permite a execução de um trecho de
algoritmo várias vezes seguidas.
Nesta aula veremos:
Repetição com teste no início;
Repetição com teste no final;
Repetição com variável de controle.
3
Comandos REPITA e ENQUANTO
Tanto o comando REPITA quanto o comando
ENQUANTO permitem repetir um ou mais comandos no
corpo de um algoritmo.
A sintaxe dos comandos é:
repita
<comando1>;
<comando2>;
.
.
.
<comandoN>;
até <expr>;
enquanto <expr> faça
<comando>;
4
Comando REPITA
O comando REPITA indica que todos os comandos entre a palavra
repita e a palavra até encontram-se dentro de um laço e devem ser
executados.
Após a palavra até deve haver uma expressão lógica que:
Se falsa, indica que o laço deve ser executado novamente;
Se verdadeira, indica que o laço acabou e o algoritmo deve continuar
sendo executado.
Esta estrutura é chamada de repetição com teste no final
A decisão entre repetir e parar o laço é feita ao final do comando.
É garantido que o laço será executado aos menos uma vez.
5
Comando REPITA em VisuAlg
Teste realizado após a execução do corpo do
loop.
O corpo do loop sempre executa ao menos uma vez.
O código continuará sendo executado enquanto a
instrução for FALSA.
repita
<seqüência-de-comandos>
ate <expressão-lógica>
6
Exemplo comando repita
algoritmo "Números de 1 a 10 (com repita)"
var j: inteiro
inicio
j <- 1
repita
escreva (j:3)
j <- j + 1
ate j > 10
fimalgoritmo
2. 2
7
Comando ENQUANTO
O comando ENQUANTO indica que o comando seguinte será
executado, desde que o resultado da expressão lógica seja
verdadeiro.
Apesar do ENQUANTO permitir apenas a repetição de um único
comando, nada que impede que seja utilizado um bloco de
comandos.
Ao encontrar o fim do comando (ou do bloco), o computador volta
para a 1ª linha do laço e avalia novamente a expressão lógica:
Se verdadeira, o computador fará uma nova execução do trecho;
Se falsa, o computador pára a execução e continua no próximo
comando após o trecho repetido.
Esta estrutura é chamada de repetição com teste no início
A decisão entre repetir e parar o laço é feita no início do comando.
Se o teste for falso desde o início, o laço não será executado.
8
Comando Enquanto em VisuAlg
Implementado com a instrução enquanto .. faca
instrução que efetua o teste antes da execução
do corpo do loop.
O corpo do loop pode nunca ser executado.
Esta estrutura repete uma seqüência de comandos
enquanto uma determinada condição (especificada
através de uma expressão lógica) for satisfeita.
enquanto <expressão-lógica> faca
<seqüência-de-comandos>
fimenquanto
9
Exemplo comando enquanto .. faca
algoritmo "Números de 1 a 10 (enquanto..faca)"
var j: inteiro
inicio
j <- 1
enquanto j <= 10 faca
escreva (j:3)
j <- j + 1
fimenquanto
fimalgoritmo
10
Comandos REPITA e ENQUANTO
Exercício:
Fazer um programa para ler diversos números informados pelo
usuário usando o comando REPITA, e após cada leitura exibir
se o número é par ou ímpar. Considere que ao fornecer um
valor negativo o usuário deseja encerrar e entrada de dados.
11
Comandos REPITA e ENQUANTO
Solução
Quantos dados serão fornecidos?
Quantas variáveis serão necessárias?
Temos que identificar o trecho que será repetido e adicioná-lo
dentro de um comando de repetição, declarando apenas as
variáveis necessárias para uma repetição.
12
Comandos REPITA e ENQUANTO
Solução usando repita(cont.)
O algoritmo fica assim:
Variáveis
num : inteiro;
Início
repita
escrever “Para sair, entre com um valor menor que 0”;
escrever “Entre com o número: “;
ler num;
se num % 2 = 0 então
escrever “O número é par”
senão
escrever “O número é ímpar”;
até num < 0;
Fim
3. 3
13
Solução em VisuAlg usando REPITA
var
num : inteiro
inicio
repita
escreval("Para sair, entre com um valor menor que 0")
escreva ("Entre com o número: ")
leia( num)
se num % 2 = 0 entao
escreval ("O número é par")
senao
escreval ("O número é ímpar")
fimse
ate num < 0
fimalgoritmo
14
Comandos REPITA e ENQUANTO
Exercício:
Refazer o programa anterior, só que desta vez usando
ENQUANTO.
15
Comandos REPITA e ENQUANTO
Solução usando enquanto (cont.)
O algoritmo fica assim:
Variáveis
inteiro: num =0;
Início
enquanto num >= 0 faça
[[
escrever “Para sair, entre com um valor menor que 0”;
escrever “Entre com o número: “;
ler num;
se num % 2 = 0 então
escrever “O número é par”
senão
escrever “O número é ímpar”;
]];
Fim
16
Solução em VisuAlg usando ENQUANTO
var
num : inteiro
inicio
enquanto num >= 0 faca
escreval("Para sair, entre com um valor menor que 0")
escreva ("Entre com o número: ")
leia( num)
se num % 2 = 0 entao
escreval ("O número é par")
senao
escreval ("O número é ímpar")
fimse
fimenquanto
fimalgoritmo
17
Comandos REPITA e ENQUANTO
Solução (cont.)
Executando o teste de mesa para os valores 8, 11, 21, 8 e -1,
teríamos as seguintes mensagens:
8
O número é par
11
O número é ímpar
21
O número é ímpar
8
O número é par
-1
O número é ímpar
Esta mensagem
não deveria ser exibida
18
Comandos REPITA e ENQUANTO
Solução (cont.)
Como podemos contornar este problema?
Adicionando mais uma condição ao comando SE
se num >=0 e num %2 = 0
Solução pouco elegante, pois este teste é sempre verdadeiro,
exceto no último caso
Utilizando o comando ENQUANTO ao invés do comando
REPITA
4. 4
19
Comandos REPITA e ENQUANTO
Solução (cont.)
Como podemos contornar este problema?
Retirando a leitura da variável de dentro do laço:
Será gerado um laço infinito, pois num será lida apenas uma
vez, e se for >= 0, o laço nunca terminará.
Iniciar a variável para um valor padrão que sempre
executará na 1ª vez:
Caímos no mesmo problema que no algoritmo utilizando o
comando REPITA.
Colocar uma leitura antes do laço, e uma segunda leitura
como últimos comandos dentro do laço.
20
Comandos REPITA e ENQUANTO
Solução (cont.)
O algoritmo fica assim:
Variáveis
num : inteiro;
Início
escrever “Para sair, entre com um valor menor que 0”;
escrever “Entre com o número: “;
ler num;
enquanto num >= 0 faça
[[
se num % 2 = 0 então
escrever “O número é par”
senão
escrever “O número é ímpar”;
escrever “Entre com o número: “;
ler num;
]];
Fim
21
Exercício:
Implemente a solução anterior usando o
VisuAlg.
DÚVIDAS ?DÚVIDAS ?
Programação I
ALG