Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... ·...

33
Estruturas de repetição IF61A/IF71A - Computação 1 Prof. Leonelo Almeida Universidade Tecnológica Federal do Paraná

Transcript of Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... ·...

Page 1: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

Estruturas de repetição IF61A/IF71A - Computação 1

Prof. Leonelo Almeida

Universidade Tecnológica Federal do Paraná

Page 2: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 3: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

Exemplo

• Problema: Faça um algoritmo para imprimir todos os números inteiros de 1 até 4

Page 4: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 5: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 6: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

?

Page 7: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 8: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 9: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 10: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 11: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 12: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 13: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 14: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 15: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 16: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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.

Page 17: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 18: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetiçã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 ...

Page 19: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 20: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 21: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 22: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 23: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 24: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 25: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 26: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 27: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 28: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 29: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 30: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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

Page 31: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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)

Page 32: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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.

Page 33: Estruturas de repetiçãodainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/... · 2014-10-08 · Estruturas condicionais e de decisão . Exemplo ... Estruturas de repetição

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.