Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
Estruturas de repetição IF61A/IF71A - 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) então
imprima(“1”);
fim se
se (num >= 2) então
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
Passo-a-passo
• Sequência de execução
Etapa 1: testa a ‘condição’.
▫ Se for verdadeira vai para a etapa 2;
▫ Senão, encerra a repetição e continua o programa a partir do ‘fim enquanto’
Etapa 2:
1. executa comando ou bloco de comandos
2. volta para a Etapa 1
enquanto (condição) faça
comando ou
{bloco de comandos}
fim enquanto
... outros comandos ...
Repetição com teste no início –
Exemplos: repetição correta
inicio
real: valor;
imprima(“Informe o novo valor ou
um valor negativo para encerrar: ”);
leia(valor);
enquanto (valor >= 0) faça
imprima(“10% de juros: ”, 1.1*valor);
imprima(“Informe o novo valor ou um
valor negativo para encerrar: ”);
leia(valor);
fim enquanto
fim
Repetição com teste no início –
Exemplos: repetição com problema na
condição de parada
inicio logico: continuar;
real: valor;
continuar <- verdadeiro;
enquanto (continuar) faça
imprima(“Informe o novo valor: ”);
leia(valor);
imprima(“10% de juros: ”, 1.1*valor);
fim enquanto
fim
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
Passo-a-passo
• Sequência de execução
Etapa 1:
▫ Executa comando ou bloco de comandos
Etapa 2: testa a ‘condição’.
▫ Se for falsa vai para a etapa 1;
▫ Senão, encerra a repetição e continua o programa a partir do fim da repetição
repita
comando ou
{bloco de comandos}
até (condição)
... outros comandos ...
Repetição com teste no fim – Exemplo
inicio
real: valor;
logico: continuar;
repita
imprima(“Informe o novo valor: ”);
leia(valor);
imprima(“10% de juros: ”, 1.1*valor);
imprima(“Deseja fazer outro cálculo?”);
leia(continuar);
até (não continuar)
fim
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 aumentado/diminuído a cada repetição
para (inicialização; condição; passo) 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
▫ Passo: aumento/diminuição a cada repetição. Ex. 2
Passo-a-passo
• Sequência de execução Etapa 1: executa os comandos da ‘inicialização’ Etapa 2: testa a ‘condição’. ▫ Se for verdadeira vai para a etapa 3; ▫ Senão, encerra a repetição e continua o
programa a partir do ‘fim para’ Etapa 3: executa o comando ou bloco de comandos Etapa 4: ▫ Executa os comandos no ‘passo’ ▫ Vai para a etapa 2
para (inicialização; condição; passo) faça
comando ou {bloco de comandos}
fim para
... outros comandos ...
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
• Construa um algoritmo que imprima todos os expoentes em um intervalo, de um dado número. O usuário deve informa tanto número quanto o valor inicial e final do intervalo. Exemplo:
▫ Número 4
▫ Início: 2
▫ Fim: 5
4^2 é: 16
4^3 é: 64
4^4 é: 256
4^5 é: 1024
Atividade 3+
• Agora altere o algoritmo anterior para que ele aceite que o início seja maior que o fim também. Exemplo:
▫ Número 4
▫ Início: 5
▫ Fim: 2
4^5 é: 1024
4^4 é: 256
4^3 é: 64
4^2 é: 16
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:
0 -1 -2 -3 -4
-1 -1 -1 -1 -1
-2 -1 0 1 2
-3 -1 1 3 5
-4 -1 2 5 8
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.