Aula 04 - Repetição Por Condição
Aula 04 - Repetição Por Condição
Aula 04 - Repetição Por Condição
Problemas Comuns
Exemplos Extras
6
Conteúdo
Problemas Comuns
Exemplos Extras
7
Estruturas de Programação
• Qualquer programa de computador pode ser escrito
combinando-se os três tipos básicos de estruturas de
programação:
8
Estruturas de Repetição
• Permitem que o programa execute um bloco de
comandos mais de uma vez.
• O número de repetições (ou iterações) deve ser
conhecido e sempre finito.
• Caso contrário, o programa travará.
Devem estar
Comandos a serem indentados em
relação ao while
repetidos
Comandos são
Restante do programa repetidos enquanto
condição é verdadeira
Quando a condição é
falsa, execução do
programa continua aqui Variável usada na condição
deve ser modificada aqui,
para que o laço termine
Exemplo
print(1)
print(2)
print(3)
print(4)
print(5)
Funciona, mas não é prático
se o problema fosse contar
até mil, por exemplo
11
Exemplo
:: Pensando no problema
início
contador = 1
contador F
≤5
V
Imprimir contador
contador = contador + 1
fim 12
Exemplo
:: Laço de repetição
Valor inicial
(fora do laço)
Valor final
(definido pela condição)
x = 1
while (x <= 5):
print(x)
x = x + 1
Incremento
(dentro do laço)
13
Variantes (1/1)
x = 1
while (x <= 5):
print(x)
x = x + 1
x = 1 x = -5
while (x <= 100): while (x <= 5):
print(x) print(x)
x = x + 1 x = x + 1
Conta de 1 a 100 Conta de -5 a +5
14
Variantes (2/2)
x = 1
while (x <= 5):
print(x)
x = x + 1
x = 10 x = 1
while (x >= 0): while (x <= 5):
print(x) print(x)
x = x - 1 x = x + 2
Conta de 10 a 0 Conta os nos ímpares de 1 a 5
15
Não confunda: while × if
if while
• Condição • Condição
determina se o determina
trecho de código quantas vezes o
indentado vai trecho de código
ser executado ou indentado vai
não ser executado
16
Conteúdo
Problemas Comuns
Exemplos Extras
17
Problema 1
:: Quantos alunos passaram?
• Uma professora corrigiu as
provas de uma turma. As
notas variam de 0 a 10, e a
nota mínima para passar é
5,0.
• Escreva um script que leia:
• A nota de cada aluno,
até que um valor inválido
seja digitado.
• Como saída, determine:
• Quantos alunos
passaram nessa prova?
18
Problema 1
2 – Identifique as entradas e saídas
19
Problema 1
3 – Projete o script
• O contador do laço while deve controlar:
Contador de alunos:
Número de alunos que passaram na prova
•Começa em zero
20
Problema 1
3 – Projete o script
início
cont = 0
nota = 1.23
0 ≤ nota F
≤ 10
V
Ler nota
F 5 ≤ nota
≤ 10
V
cont = cont + 1
Imprimir cont
fim 21
Problema 1
4 – Codifique em Python
cont = 0 # Contador de alunos aprovados
nota = 1.23 # Valor arbitrário para iniciar laco
22
Problema 1
5 – Teste o script
• Teste várias possibilidades, com valores conhecidos:
Notas: 1, 2, 3, 4, 5, 55 Só um passou;
limiar de decisão
Notas: 3, 4, 5, 6, 7, 8, 99 Vários
passaram
23
Botão do raio interrompe o
programa
• Se seu programa entrar em loop infinito, use o botão do
raio para interromper a execução:
24
Problema 2
:: Soma e média
• Agora, a professora quer
saber a média de
desempenho de seus
alunos na prova.
• Escreva um script que
leia cada nota, até que
um valor inválido seja
digitado, indicando que a
inserção terminou.
• Como saída, determine a
média da turma.
25
Problema 2
2 – Identifique as entradas e saídas
26
Problema 1
3 – Projete o script
• Há dois tipos de variáveis que o laço while deve
controlar:
Contador do laço:
Número de alunos na turma
•Começa em zero
Acumulador do laço:
Soma das notas inseridas
•Começa em zero
27
Problema 2
4 – Codifique em Python
A primeira nota deve ser
cont = 0 # Conta no. de alunos lida fora do laço
soma = 0 # Acumula soma das notas
nota = float(input("Digite a nota do aluno: "))
Quantidade de alunos: 5
Notas: 1, 2, 3, 4, 5
29
Problema 2
5 – Teste o script
• Use valores fáceis, que você conheça a resposta antes de
executar o script
30
Contador de laço ×
Variável acumuladora
Contador de Variável
laço acumuladora
•Auxilia a •Auxilia no
controlar a cômputo de
execução do grandezas
laço de relacionadas
repetição ao problema
31
Problemas comuns ao construir
laços de repetição
Também conhecido
como teste de mesa
33
Rastreamento
:: Exemplo 1
i = 0 i total
total = 0
while (total < 10): 0 ?
i = i + 1
total = total + i
print(i, total)
Rastreamento
:: Exemplo 1
i = 0 i total
total = 0
while (total < 10): 0 ?
i = i + 1 0 0
total = total + i
print(i, total)
Rastreamento
:: Exemplo 1
i = 0 i total
total = 0
while (total < 10): 0 ?
i = i + 1 0 0
total = total + i 1 0
print(i, total)
Rastreamento
:: Exemplo 1
i = 0 i total
total = 0
while (total < 10): 0 ?
i = i + 1 0 0
total = total + i 1 0
print(i, total)
1 1
Rastreamento
:: Exemplo 1
i = 0 i total
total = 0
while (total < 10): 0 ?
i = i + 1 0 0
total = total + i 1 0
print(i, total)
1 1
2 1
Rastreamento
:: Exemplo 1
i = 0 i total
total = 0
while (total < 10): 0 ?
i = i + 1 0 0
total = total + i 1 0
print(i, total)
1 1
2 1
2 3
Rastreamento
:: Exemplo 1
i = 0 i total
total = 0
while (total < 10): 0 ?
i = i + 1 0 0
total = total + i 1 0
print(i, total)
1 1
2 1
2 3
3 6
Rastreamento
:: Exemplo 1
i = 0 i total
total = 0
while (total < 10): 0 ?
i = i + 1 0 0
total = total + i 1 0
print(i, total)
1 1
2 1
2 3
3 6
4 10
Rastreamento
:: Exemplo 2
• Se a condição for mal projetada, o laço poderá ser
repetido indefinidamente.
• Chamamos essa situação de loop infinito.
i total
i = 0
0 0
total = 0
while (total < 10): 1 -1
i = i + 1 2 -2
total = total - 1
3 -3
print(i, total)
4 -4
.....
42
Rastreamento
:: Exemplo 3
• Em outras situações, a condição pode não ser satisfeita
na primeira tentativa.
• Nesse caso, o laço não será executado.
i = 0
total = 0
Nada será
while (total < 0):
mostrado no
i = i + 1
console
total = total - i
print(i, total)
43
Problema 3
:: Vampiros
• Uma cidade de H
habitantes foi invadida por
um clã de V vampiros.
• Todo dia, cada vampiro
transforma uma pessoa em
vampiro.
• Escreva um programa que
determine em quantos
dias toda a população é
convertida em vampiros.
44
Problema 3
2 – Identifique as entradas e saídas
45
Problema 3
3 – Projete o script
# Laco de acumulacao
while (H > 0):
H = H – V
V = 2 * V Impressões intermediárias não fazem parte da
print(dia) solução, mas ajudam a rastrear o código
print(V)
print(H)
dia = dia + 1
incremento
# Impressao de resultados
print(dia)
47
Problema 3
5 – Teste de Rastreamento – caso 1
H = 102
2 dias
V = 50
40 80 160
49
Problema 4
:: Caçadores de Vampiros
• Uma cidade tem H
habitantes e V vampiros.
• Todo dia, cada vampiro
transforma um habitante.
• Um grupo de caçadores
mata M vampiros por dia.
• Determine:
• A cidade ficará LIVRE
dos vampiros ou será
toda VAMPIRIZADA?
• Em quantos dias isso
acontece?
50
Problema 4
2 – Identifique as entradas e saídas
51
Problema 4
3 – Projete o script
Incremento: 1 Vampiros a
cada dia: 2*V - M
V>0E
Condição do laço:
H > 0 52
Problema 4
4 – Codifique em Python
# Valores iniciais
H = int(input("No. inicial de habitantes: "))
V = int(input("No. inicial de vampiros: "))
M = int(input("No. de vampiros mortos: "))
Entradas são
# Variavel contadora inteiras
dia = 0
# Laco de acumulacao
while (V > 0 and H > 0):
H = H - V
V = 2 * V - M
dia = dia + 1
print(msg)
print(dia) 53
Problema 4
5 – Teste de Rastreamento – caso 1
H = 200
LIVRE
V=8
3
M = 10
54
Problema 4
5 – Teste de Rastreamento – caso 2
H = 200
VAMPIRIZADA
V = 16
4
M=1
55
Problema 5
:: Soma de séries
• Escreva um script Python para
encontrar o valor da soma dos
N primeiros termos da
seguinte sequência:
56
Problema 5
2 – Identifique as entradas e saídas
57
Problema 5
3 – Projete o script
• Determinar, por indução, o termo geral da série:
# Valores iniciais
soma = 0 # Variavel acumuladora
i = 0 # Variavel contadora
# Laco de acumulacao
ou i <= N – 1
while (i < N):
soma = soma + 2**i
i = i + 1
# Impressao de resultados
print(soma)
59
Problema 5
5 – Teste o script (teste de mesa)
• Confira o resultado para a soma da série com 1 termo, 2
termos, ..., 5 termos:
61
Problema 6
2 – Identifique as entradas e saídas
62
Problema 6
3 – Projete o script
• Determinar, por indução, o termo geral da série:
1
# Laco de acumulacao
while (i <= fim):
soma = soma + 2**i/(3 * i)
i = i + 1
# Impressao de resultados
print(soma)
64
Problema 6
5 – Teste o script (teste de mesa)
• Modifique a variável fim, para obter a soma da série para
1 termo, 2 termos, ..., 5 termos:
66
Problema 7
2 – Identifique as entradas e saídas
67
Problema 7
3 – Projete o script
• Determinar o termo geral da série
sinal alterna
_
1³
bases ímpares
• Variável contadora (i)
• Valor inicial: 0
• Valor final: N–1
• Incremento: 1
68
Problema 7
4 – Codifique em Python – versão 1
N = int(input("Qtde. de termos: "))
# Valores iniciais
soma = 0 # Variavel acumuladora
i = 0 # Variavel contadora
# Laco de acumulacao
while (i < N):
soma = soma + (-1)**i / (2 * i + 1)**3
i = i + 1
# Impressao de resultados
print(pi_aprox) 69
Problema 7
4 – Codifique em Python – versão 2
N = int(input("Qtde. de termos: "))
# Valores iniciais
soma = 0 # Variavel acumuladora
i = 0 # Variavel contadora
# Laco de acumulacao
while (i < N):
soma = soma + sinal / (2 * i + 1)**3
sinal = - sinal # Troca sinal
i = i + 1
# Impressao de resultados
print(novo_pi)
70
Problema 7
5 – Teste o script (teste de mesa)
• Verifique a soma para os primeiros cinco valores:
Problemas Comuns
Exemplos Extras
72
Exemplo 1
• Uma quantia inicial de R$ 20
mil é aplicada a uma taxa de
1,2% de juros ao mês.
• Qual o valor do saldo após 5
anos de aplicação?
73
Exemplo 1
2 – Identifique as entradas e saídas
74
Exemplo 1
3 – Projete o script
Saldo a cada ano: Variável Contadora:
75
Exemplo 1
4 – Codifique em Python
# Entrada de dados e definicao de constantes
juros = 1.2
saldo = 20000 A escolha do valor inicial costuma causar erro.
Você não precisa acertar de primeira.
# Tempo inicial Teste diferentes valores.
t = 0
77
Exemplo 2
2 – Identifique as entradas e saídas
78
Exemplo 2
3 – Projete o script
Saldo a cada ano: Variável Contadora:
79
Exemplo 2
4 – Codifique em Python
# Entrada de dados
q0 = float(input("Quantia inicial: "))
juros = 5
saldo = q0 # Saldo comeca com quantia inicial
t = 0 # Tempo inicial
# Exibicao de resultados
print("Tempo de investimento:", t, "anos")
80
Exemplo 3
:: Verificar padrão
•
81
Exemplo 3
2 – Identifique as entradas e saídas
82
Exemplo 3
3 – Projete o script
•
83
Exemplo 3
4 – Codifique em Python
# Valores iniciais
N = int(input("Digite um numero: "))
i = 2
?
população de coelhos, mas
Quais os 15
esse padrão é recorrente na
natureza. primeiros termos? 85
Exemplo 4
3 – Projete o script
• Determinar, por indução, o termo geral da sequência:
1ª iteração: a b
0, 1, 1, 2, 5, 5, 8, 13,
2ª iteração: temp a b
...
+
iª iteração: temp = a
a = b
b = temp + a
86
Exemplo 4
4 – Codifique em Python
# Valores iniciais
a = 0 # Primeiro termo
b = 1 # Segundo termo
cont = 0 # Variavel contadora
fim = 15 # Final da contagem
while (cont <= fim):
cont = cont + 1
# Trocar termos
temp = a
a = b
# Novo termo
b = a + temp
# Impressao de resultados
print(temp)
87
Exemplo 5
:: Pedra, Papel, Tesoura
• Duas pessoas (J1 e J2)
jogam pedra, papel,
tesoura.
• Elas jogam várias vezes,
até uma delas ganhar.
• Escreva um programa
que leia repetidamente a
jogada de cada pessoa e
determine quem ganha.
88
Exemplo 5
2 – Identifique as entradas e saídas
Grandeza Unidade
Unidadede
demedida
medida Faixa
Faixade
devalores
valores
Mão do J1 --- {Pedra, Papel, Tesoura}
Entradas
Mão do J2 --- {Pedra, Papel, Tesoura}
Saídas Vencedor --- {J1, J2}
89
Exemplo 5
3 – Projete o script
J1 == J2
elif
V F
J1 ganhou J2 ganhou
90
Exemplo 5
4 – Codifique em Python
# Valores iniciais arbitrarios
j1 = "pedra"
j2 = "pedra"
92
Exemplo 6
3 – Projete o script
1. Iniciar contador de linhas
93
Exemplo 6
4 – Codifique em Python
# Contador do 1o. laco
i = 1
95
Exemplo 7
3 – Projete o script
1. Iniciar contador de linhas
96
Exemplo 7
4 – Codifique em Python
# Contador do 1o. laco
i = 1
97
Referências bibliográficas
• MENEZES, Nilo Ney Coutinho (2014). Introdução à
Programação com Python, 2ed. Editora Novatec.
• HETLAND, Magnus Lie (2008). Beginning Python: From
Novice to Professional. Springer eBooks, 2ª edição.
Disponível em:
http://dx.doi.org/10.1007/978-1-4302-0634-7.
• HORSTMANN, Cay & NECAISE, Rance D. (2013). Python
for Everyone. John Wiley & Sons.
98
Dúvidas?
Monitoria
Nome: Carlos Andres Ramos Losada Junior Nome: Bianka Vasconcelos Maciel
Links:
E-mail: [email protected]