Sei sulla pagina 1di 28

Estruturas de repetição

IF61A - Computação 1
Prof. Leonelo Almeida

Universidade Tecnológica Federal do Paraná


Até agora ...
• Sabemos construir algoritmos que tenham:
▫ Variáveis
▫ Comandos sequenciais
▫ Entrada e saída de dados pelo dispositivo padrão
▫ Estruturas condicionais e de decisão
Exemplo
• Problema: Faça um algoritmo para imprimir
todos os números inteiros de 1 até 4
Exemplo
• Problema: Faça um algoritmo para imprimir
todos os números inteiros de 1 até 4

nome: imprimirDe1a4
inicio
imprima(“1”);
imprima(“2”);
imprima(“3”);
imprima(“4”);
fim
Um pouco mais de flexibilidade ...
• Novo problema: Faça um algoritmo que imprima
todos os números inteiros de 1 até 100

nome: imprimirDe1a100
inicio
imprima(“1”);
imprima(“2”);
imprima(“3”);
imprima(“4”);
...
imprima(“100”);
fim
Mais um pouco de flexibilidade ...
• Novo problema: Faça um algoritmo que
imprima todos os números inteiros de 1 até um
número informado pelo usuário

?
Solução 1
nome: imprimirDe1aX
inicio
inteiro: num;
imprima(“Informe a quantidade de números: ”)
leia(num);

se (num >= 1)
imprima(“1”);
fim se;
se (num >= 2)
imprima(“2”);
fim se;
...
[até onde o programador conseguir escrever]
fim
Solução 1
• Limitada pelo número de comparações que o
programador prever
▫ E sempre haverá um número maior do que ele
previu
• O tamanho do programa será potencialmente
grande
• A solução 1 não resolve completamente o
problema proposto
Solução 2
• Precisamos de estruturas de repetição

nome: imprimirDe1aX
inicio
inteiro: num, contador;
imprima(“Informe a quantidade de números: ”)
leia(num);

para (contador<-1; contador<=num; 1) faça


imprima(contador);
fim para
fim
Estruturas de repetição
• Permite a execução por repetidas vezes de um
dado bloco de código
• Toda estrutura de repetição tem uma condição
para finalização da repetição. Pode ser:
▫ Um dado número de repetições
▫ Uma condição booleana que deve ser atendida
para continuar a repetição
▫ Sem uma condição de finalização o programa
continuaria executando por tempo indeterminado
Tipos de repetição
• Repetição com teste no início
▫ Enquanto (condição) faça

• Repetição com teste no fim


▫ Repita ... até (condição)

• Repetição com variável de controle


▫ Para (variável de controle em um intervalo) faça
Repetição com teste no início
• Utilizado quando se deseja repetir um comando ou bloco de
comandos enquanto uma certa condição for verdadeira

enquanto (condição) faça


comando ou
{bloco de comandos}
fim enquanto

• Dica: é indispensável que dentro do escopo do enquanto


haja uma operação que, dada uma certa situação, torna a
condição do enquanto falsa. Dessa maneira sabemos que a
repetição será finalizada em algum momento
Repetição com teste no início –
Exemplos: repetição correta

valor <- 0;
enquanto (valor >= 0) faça
imprima(“Informe o novo valor ou um valor
negativo para encerrar: ”);
leia(valor)
imprima(“10% de juros: ”, 1.1*valor);
fim enquanto
Repetição com teste no início –
Exemplos: repetição com problema na
condição de parada

continuar <- verdadeiro;


enquanto (continuar) faça
imprima(“Informe o novo valor: ”);
leia(valor);
imprima(“10% de juros: ”, 1.1*valor);
fim enquanto
Atividade 1
• Um certo cidadão A tem 1,5 m de altura e cresce
2 centímetros por ano, enquanto um outro
cidadão B tem 1,10 m e cresce 3 centímetros por
ano. Construa um algoritmo que calcule e
imprima quantos anos serão necessários para
que o cidadão B seja maior que o cidadão A.
Repetição com teste no fim
• Utilizado quando se deseja repetir um comando ou bloco de
comandos enquanto uma certa condição for verdadeira (como
no enquanto)
• A diferença é que o bloco de comandos do escopo do repita
será executado pelo menos a primeira vez

repita
comando ou
{bloco de comandos}
até (condição);

Dica: no repita, a condição define o critério de parada, já no


enquanto a condição define o critério de continuação
Repetição com teste no fim – Exemplo

repita
imprima(“Informe o novo valor: ”);
leia(valor);
imprima(“10% de juros: ”, 1.1*valor);
imprima(“Deseja fazer outro cálculo (S-sim,N-não)?”);
leia(resposta);
se (resposta = “S”) então
continuar <- verdadeiro;
senão
continuar <- falso;
fim se;
até (não continuar)
Atividade 2
• Um cinema possui capacidade de 100 lugares. Certo dia, cada
expectador respondeu a um questionário no qual constava:
▫ Sua opinião sobre o filme
 5 ÓTIMO
 4 BOM
 3 REGULAR
 2 RUIM
 1 PÉSSIMO
▫ Idade
Fazer um algoritmo que receba estes dados como entrada e
calcule e imprima:
▫ a porcentagem de respostas ótimo, bom, regular, ruim, péssimo
▫ a média de idades das pessoas que responderam ruim
▫ a maior idade das pessoas que responderam péssimo
Repetição com variável de controle
• Utilizado quando se deseja repetir um comando ou bloco
de comandos, utilizando uma variável de controle, que
tem seu valor incrementado a cada repetição

para (inicialização; condição; incremento) faça


comando ou
{bloco de comandos}
fim para;

• Onde:
▫ Inicialização: variável e seu valor inicial. Ex. cont<-1
▫ Condição: condição para repetir. Ex. cont<=10
▫ Incremento: qual o incremento a cada repetição. Ex. 2
Repetição com variável de controle –
Exemplo: repetição correta
nome: multiplosDe5
início
inteiro: cont, numMultiplos;
imprima(“Informe quantos múltiplos de 5
deseja conhecer:”);
leia(numMultiplos);
para (cont<-1; cont<=numMultiplos; 1) faça
imprima(cont, “ x 5 = ”, cont*5);
fim para
fim
Atividade 3
• Faça uma algoritmo que imprima uma matriz
nxm, onde n e m são informados pelo usuário e o
valor de cada célula é dado por:

-1 -1 -1 -1 ...
-1 0 1 2 ...
-1 1 3 5 ...
-1 2 5 4 ...
-1 ... ... ... ...
Exemplo comparativo
• Problema: Faça um algoritmo que calcule 2n,
sendo n um número inteiro maior que zero,
informado pelo usuário.
▫ Restrição: não é permitido utilizar “^” ou “**”.
▫ Implemente o algoritmo em versões diferentes.
Utilize:
 Versão 1 – enquanto ... faça
 Versão 2 – repita ... até
 Versão 3 – para ... faça
Versão 1 – enquanto ... faça
nome: calcularPot2
início
inteiro: contador, resultado, expoente;
imprima(“Informe o expoente:”);
leia(expoente);
contador <- 1;
resultado <- 1;
enquanto (contador <= expoente) faça
resultado <- resultado*2;
contador <- contador+1;
fim enquanto
imprima(“Resultado: ”, resultado);
fim
Versão 2 – repita ... até
nome: calcularPot2
início
inteiro: contador, resultado, expoente;
imprima(“Informe o expoente:”);
leia(expoente);
contador <- 1;
resultado <- 1;
repita
resultado <- resultado*2;
contador <- contador+1;
até (contador > expoente)
imprima(“Resultado: ”, resultado);
fim
Versão 3 – para ... faça
nome: calcularPot2
início
inteiro: contador, resultado, expoente;
imprima(“Informe o expoente:”);
leia(expoente);
resultado <- 1;
para (contador<-1; contador<=expoente; 1 ) faça
resultado <- resultado*2;
fim para
imprima(“Resultado: ”, resultado);
fim
Resumindo ...
• Uso
▫ O para é mais apropriado quando já se sabe (através do usuário ou
definindo-se o total através de uma constante) o número de iterações
(repetições).
▫ O enquanto é mais apropriando quando a condição de parada é
inesperada, isto é, não se sabe previamente o total de repetições. (Ex.
Parar quando o usuário informar o valor “-1”)
▫ O repita também é mais apropriado quando a condição de parada é
inesperada, mas o laço precisa ser executado ao menos 1 vez.

• Conversão entre estruturas


▫ Todo enquanto pode ser reescrito como um repita, e vice-versa
▫ Todo para pode ser reescrito como um enquanto ou um repita,
mas o contrário nem sempre é viável (não de uma maneira eficiente)
Exercícios
1. Faça um algoritmo que, dado um número inteiro
positivo informado pelo usuário, calcule n!

2. A conversão de graus Fahrenheit para centígrados é


obtida pela fórmula C = 5/9*(F-32). Escreva um
algoritmo que calcule e imprima na tela uma tabela
de graus centígrados em função de graus Fahrenheit
sendo que os graus Fahrenheit variam de 50 a 150 de
1 em 1.

3. Modifique o algoritmo anterior para que imprima a


conversão dos ímpares de 50 a 150.
Exercícios
4. Faca um programa que imprima um menu de 4 pratos
na tela e uma quinta opção para sair do programa. O
programa deve imprimir os ingredientes do prato
solicitado. O programa deve terminar quando for
escolhido a quinta opção.

5. Faca um algoritmo que lê dois números inteiros


positivos a e b. Utilizando laços, o seu algoritmo deve
calcular e imprimir o valor ab.

6. Faca um programa que lê um número n e que compute


𝑛
e imprima o valor 𝑖=1 𝑛
▫ OBS: Não use formulas como a da soma de uma P.A.

Potrebbero piacerti anche