Académique Documents
Professionnel Documents
Culture Documents
IEC037 IntroduoProgramaode
Computadores
Aula04 EstruturasdeRepetioporCondio
2016/1
Atualizadoem13/07/2016
Contedo
EstruturasdeRepetioporCondio
ProblemasComuns
ExemplosExtras
Contedo
EstruturasdeRepetioporCondio
ProblemasComuns
ExemplosExtras
EstruturasdeProgramao
Qualquerprogramadecomputadorpodeser
escritocombinandoseostrstiposbsicosde
estruturasdeprogramao:
Sequencial
Condicional
Repetio
EstruturasdeRepetio
Permitemexecutarmaisdeumavezumcomando
ouumblocodecomandos.
Otrechodoalgoritmoemrepetiotambm
chamadodelao(ouloop).
Onmeroderepeties(ouiteraes)deveser
conhecidoesemprefinito.
Repetioporcondio
::Comandowhile
Permitequeumtrechodecdigosejaexecutado
enquanto certacondioforverdadeira.
Quandoacondioforfalsa,oblocodecomandos
internodeixadeserrepetidoecontinuamos
executandoorestodoprograma.
while <condio>:
<comandos_a_repetir>
Comandosaseremrepetidos
devemestarindentados
Repetioporcondio(while)
::Exemplo
x = 1
while (x <= 5):
print(x)
x = x + 1
Comandowhile if
if
while
Condio
determinase o
trechodecdigo
indentadovai
serexecutadoou
no
Condio
determina
quantas vezeso
trechodecdigo
indentadovai
serexecutado
Exerccio1
Modifiqueoscript
anteriorparaexibir
nmerosde1a100.
x = 1
while (x <= 5):
print(x)
x = x + 1
x = 1
while (x <= 100):
print(x)
x = x + 1
Exerccio2
Modifiqueoscript
anteriorparaexibir
nmerosde50a100.
x = 1
while (x <= 5):
print(x)
x = x + 1
x = 50
while (x <= 100):
print(x)
x = x + 1
Exerccio3
Modifiqueoscript
anteriorparafazer
umacontagem
regressiva:
10,9,8,...,1,0
x = 1
while (x <= 5):
print(x)
x = x + 1
x = 10
while (x >= 0):
print(x)
x = x - 1
Exerccio4
Modifiqueoscript
anteriorparaexibir
nmerospares de0a
100.
x = 1
while (x <= 5):
print(x)
x = x + 1
x = 0
while (x <= 100):
print(x)
x = x + 2
Contadordelao
Nosexerccios
anteriores,avarivelx
foiusadapara
controlaronmerode
repeties dolao.
Todocontadordelao
deveajustaros
seguintesparmetros:
1 valorinicial
2 valorfinal
3 passo (ouincremento)
1 x = 1
Contadordelao
::Parmetros
valorinicial
Deveserajustadofora dolao.
valorfinal
Ajustadonacondio dolao.Umacondiomal
elaboradapodefazercomqueolaosejaexecutado
infinitasvezes(loopinfinito).
passo(ouincremento)
Determinaataxa decrescimentooudecrescimentodo
contador,desdeovalorinicialatovalorfinal.
Noconfunda
Iterao
Repetiodeumato
Interao
Influnciarecprocade
organismosinterrelacionados
Problema1
Umaquantiainicialde
R$20milaplicadaa
umataxade12%de
jurosaoano.
Qualovalordosaldo
aps5anosde
aplicao?
Problema1
Definirentradasesadas
Entradas
Sadas
Grandeza
Unidadedemedida
Faixadevalores
Taxadejuros
12
Quantiainicial(q)
R$
20mil
Tempo
anos
Saldo
R$
[0,+[
Problema1
Projetaralgoritmo
Saldoacadaano:
Novo
saldo
Rendi
mento
Saldo
anterior
Saldo
anterior
VarivelContadora:
Rendi
mento
ano
Valorinicial: 1
Valorfinal: 5
Juros/100
Incremento: 1
Problema1
CodificaremPython
# Entrada de dados e definicao de constantes
q
= 20000
juros = 12
saldo = q
# Tempo inicial
t = 1
# Atualizacao de saldo
while (t <= 5):
rend = saldo * juros/100
saldo = saldo + rend
t = t + 1
# Exibicao de resultados
print("Saldo: R$", round(saldo, 2))
Problema2
Umaquantiainicialde
R$10milaplicadaa
umataxade5%de
jurosaoano.
Quantosanos so
necessriosparaqueo
saldodobreemrelao
aovalorinicial?
Problema2
Definirentradasesadas
Entradas
Sadas
Grandeza
Unidadedemedida
Faixadevalores
Taxadejuros
Quantiainicial(q)
R$
10mil
Saldo
R$
2*q
Tempo
anos
[0,+[
Problema2
Projetaralgoritmo
Saldoacadaano:
Novo
saldo
Rendi
mento
Saldo
anterior
Saldo
anterior
VarivelContadora:
Rendi
mento
ano
Valorinicial: 0
Valorfinal: ?
Juros/100
Incremento: 1
Problema2
CodificaremPython
# Entrada de dados e definicao de constantes
q
= 10000
juros = 5
saldo = q
# Tempo inicial
t = 0
# Atualizacao de saldo
while (saldo < 2 * q):
rend = saldo * juros/100
saldo = saldo + rend
t = t + 1
# Exibicao de resultados
print("Tempo de investimento:", t, "anos")
Contadordelao Varivel
acumuladora
Contadorde
lao
Varivel
acumuladora
Auxiliaa
controlara
execuo do
laode
repetio
Auxiliano
cmputode
grandezas
relacionadas
aoproblema
Rastreamento
umasimulao deexecuodecdigoemque
vocpercorre asinstrues,umalinhadecadavez,
eacompanhaosvaloresdasvariveis.
Quandovocrastreiaumprograma:
escreveosnomesdasvariveise
mumafolhadepapel
executa
mentalmentecadapassodocdigo
atualiza asvariveis
Rastreamento
::Exemplo1
Nocdigoabaixo,quaissoosvaloresdas
variveisi etotal emcadaiteraodolao
while?
i = 0
total = 0
while (total < 10):
i = i + 1
total = total + i
print(i, total)
Rastreamento
::Exemplo1
i = 0
total = 0
while (total < 10):
i = i + 1
total = total + i
print(i, total)
total
Rastreamento
::Exemplo1
i = 0
total = 0
while (total < 10):
i = i + 1
total = total + i
print(i, total)
total
0
0
?
0
Rastreamento
::Exemplo1
i = 0
total = 0
while (total < 10):
i = i + 1
total = total + i
print(i, total)
total
0
0
1
?
0
0
Rastreamento
::Exemplo1
i = 0
total = 0
while (total < 10):
i = i + 1
total = total + i
print(i, total)
total
0
0
1
1
?
0
0
1
Rastreamento
::Exemplo1
i = 0
total = 0
while (total < 10):
i = i + 1
total = total + i
print(i, total)
total
0
0
1
1
2
?
0
0
1
1
Rastreamento
::Exemplo1
i = 0
total = 0
while (total < 10):
i = i + 1
total = total + i
print(i, total)
total
0
0
1
1
2
2
?
0
0
1
1
3
Rastreamento
::Exemplo1
i = 0
total = 0
while (total < 10):
i = i + 1
total = total + i
print(i, total)
total
0
0
1
1
2
2
3
?
0
0
1
1
3
6
Rastreamento
::Exemplo1
i = 0
total = 0
while (total < 10):
i = i + 1
total = total + i
print(i, total)
total
0
0
1
1
2
2
3
4
?
0
0
1
1
3
6
10
Rastreamento
::Exemplo2
Seacondioformalprojetada,olaopoderser
repetidoindefinidamente.
Chamamosessasituaodeloopinfinito.
i = 0
total = 0
while (total < 10):
i = i + 1
total = total - 1
print(i, total)
i total
0
0
1
1
2
2
3
3
4
4
.....
Rastreamento
::Exemplo3
Emoutrassituaes,acondiopodenoser
satisfeitanaprimeiratentativa.
Nessecaso,olaonoserexecutado.
i = 0
total = 0
while (total < 0):
i = i + 1
total = total - i
print(i, total)
(Nadaser
mostradonatela)
Contedo
EstruturasdeRepetioporCondio
ProblemasComuns
ExemplosExtras
Problema3
::Somaemdia
Umaprofessorad
aulaparaumaturma
deN alunoseprecisa
saberamdiade
notas,quevariamde
0a10.
Escrevaumscriptque
leianotapornotae,
aofinal,exibaamdia
daturmanatela.
Problema3
Definirentradasesadas
Entradas
Sadas
Grandeza
Unidadedemedida
Faixadevalores
Nmerodealunos
>0
Notas
[0,10]
Mdia
[0,10]
Problema3
Projetaralgoritmo
Qualacondiopararepetio?
EnquantoocontadornoatingirN(=nmerode
alunosdaclasse)
Oquedeveseratualizadoacadarepetio?
Somadasnotasinseridasatomomento
Contadordolao
Problema3
CodificaremPython
# Pede o numero de alunos
num_alunos = int(input("Digite o no. de alunos:
i = 1
soma = 0
# Variavel contadora
# Variavel acumuladora
aluno", i, ":")
# Le nota
# Acumula nota
# Atualiza contador
"))
Problema4
::Somaemdia
Agora,aprofessora
nosabeexatamente
aquantidadede
notas.
Escrevaumscriptque
leianotapornota,via
teclado,atqueseja
digitado1,indicando
queainsero
terminou.Aofinal,a
mdia daturmadeve
serexibidanatela.
Problema4
Definirentradasesadas
Grandeza
Unidadedemedida
Faixadevalores
Entradas
Notas
[0,10]
Sadas
Mdia
[0,10]
Problema4
Projetaralgoritmo
Qualacondiopararepetio?
Enquantoanotafordiferentede1
Oquedeveseratualizadoacadarepetio?
Somadasnotasinseridasatomomento
Quantidadedenotasinseridas
Problema4
CodificaremPython
Aprimeiranotadeveser
lidaforadolao
i = 1
# Acumula no. de alunos
soma = 0
# Acumula soma das notas
print("Digite a nota do aluno", i, ":")
nota = float(input())
# Le nota
while (nota != -1):
i = i + 1
soma = soma + nota
print("Digite a nota do
nota = float(input())
Problema5
::Somadesries
Escrevaumscript
Pythonparaencontraro
valordasomados10
primeirostermosda
seguintesequncia:
Problema5
Projetaralgoritmo
Determinar,porinduo,otermogeraldasrie:
Varivelcontadora(i)
Valorinicial:
0
Valorfinal:
9
1
Incremento:
Problema5
CodificaremPython
# Valores iniciais
soma = 0
# Variavel acumuladora
i
= 0
# Variavel contadora
fim = 9
# Final da contagem
# Laco de acumulacao
while (i <= fim):
soma = soma + 2**i
i = i + 1
# Impressao de resultados
print("Soma dos termos:", soma)
Contedo
EstruturasdeRepetioporCondio
ProblemasComuns
ExemplosExtras
Exemplo1
::Verificarpadro
DadoumnmeroN,
inteiroepositivo,
verificarseN primo,
ouseja,seN tem
apenasdoisdivisores:
elemesmoeaunidade.
Dica:Paraverificarse
umnmeroN primo,
podeselimitaroteste
dedivisibilidadeato
valorde .
Exemplo1
Definirentradasesadas
Entradas
Sadas
Grandeza
Unidadedemedida
Faixadevalores
[0,+[
Mensagem
{Primo,noprimo}
Exemplo1
Projetaralgoritmo
1. LerN (nmeroaserverificado)
2. TestarseNdivisvelpor2,3,4,5,...,
3. Casopositivo,terminarlaoeimprimir
mensagem
Condiesderepetio:
Divisor(contador)noatingir ,E
NmeroN noserdivisvelpelocontador.
Exemplo1
CodificaremPython
# Valores iniciais
N = int(input("Digite um numero:"))
i = 2
from math import *
# Repete enquanto nao alcancar raiz de N ou
# nao encontrar divisor de N
while (i <= floor(sqrt(N)) and N % i != 0):
i = i + 1
# Testou todos os numeros ateh raiz de N?
if (i > floor(sqrt(N))):
print("Eh primo")
# Se nao testou todos, entao encontrou divisor (resto 0)
else:
print("Nao eh primo")
Exemplo2
::SequnciadeFibonacci
umasequnciadenmeros
inteirosquecomeapor0e1.
Cadatermosubsequente
correspondesomadosdois
anteriores.
Seunomevemdomatemtico
italianoLeonardodePisa,
conhecidoporFibonacci.
Em1202,eleusouessa
sequnciaparadescrevero
crescimentodeuma
populaodecoelhos,mas
essepadrorecorrente na
natureza.
Quaisos15
primeirostermos?
Exemplo2
Projetaralgoritmo
Determinar,porinduo,otermogeralda
sequncia:
1iterao:
2iterao:
temp a
+
i iterao:
temp = a
a = b
b = temp + a
Exemplo2
CodificaremPython
# 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)
Exemplo3
::Somadesries
Escrevaumscript
Pythonparaencontrar
ovalorde .
2
25
2 2
2
2
S
3 6
9
75
Exemplo3
Projetaralgoritmo
Determinar,porinduo,otermogeraldasrie:
1
25
32
33
325
2 2
2
2
S
3 6
9
75
31
Varivelcontadora(i)
Valorinicial:
1
Valorfinal:
25
1
Incremento:
25
2
S
i 1 3 i
i
Exemplo3
CodificaremPython
# Valores iniciais
soma = 0
# Variavel acumuladora
i
= 1
# Variavel contadora
fim = 25
# Final da contagem
# Laco de acumulacao
while (i <= fim):
soma = soma + 2**i/(3 * i)
i = i + 1
# Impressao de resultados
print("Soma dos termos:", soma)
Exemplo4
::Somadesries
Calcularovalorde
comos1000
primeirostermosda
seguintesrie
numrica:
Exemplo4
Projetaralgoritmo verso1
Determinarotermogeraldasrie
sinalalterna
1 1 1
S 1_ 3 3 3
5 7
1 3
basesmpares
Varivelcontadora(i)
0
Valorinicial:
Valorfinal:
999
Incremento:
1
1
S 1
3
2i 1
i 0
n
Exemplo4
CodificaremPython verso1
# Valores iniciais
soma = 0
# Variavel acumuladora
i
= 0
# Variavel contadora
fim = 999 # Final da contagem
# Laco de acumulacao
while (i <= fim):
soma = soma + (-1)**i / (2 * i + 1)**3
i = i + 1
meu_pi = (32 * soma)**(1/3)
# Impressao de resultados
print("Valor aprox. de pi:", meu_pi)
Exemplo4
Projetaralgoritmo verso2
Determinarotermogeraldasrie
sinalalterna
1 1 1
S 1_ 3 3 3
5 7
1 3
basesmpares
Varivelcontadora(j = 2*i)
0
Valorinicial:
Valorfinal:
1998
Incremento:
2
1
S 1
3
2i 1
i 0
n
Exemplo4
CodificaremPython verso2
# Valores iniciais
soma = 0
# Variavel acumuladora
j
= 0
# Variavel contadora
fim = 1998 # Final da contagem
# Laco de acumulacao
while (j <= fim):
soma = soma + (-1)**(j/2) / (j + 1)**3
j = j + 2
meu_pi = (32 * soma)**(1/3)
# Impressao de resultados
print("Valor aprox. de pi:", meu_pi)
Exemplo5
::ArteASCII
Escrevaumscriptpara
imprimirvrios
caracteresasterisco
paraformaropadro
aolado.
Trslinhasde04
asteriscos.
Exemplo5
Projetaralgoritmo
1. Iniciarcontadordelinhas
2. Repetirimpressodeasteriscosdispostosem
umamesmalinha
3. Repetirpasso2paracadalinha
Exemplo5
CodificaremPython
# Contador do 1o. laco
i = 1
while (i <= 3):
# Contador do 2o. laco
j = 1
while (j <= 4):
print("*", end="")
j = j + 1
print()
i = i + 1
Porpadro,ocomandoprint() doPythonpula
delinhaquandoterminadeimprimir.
Paramudarisso,useoparmetroend paraindicar
oquevocdesejaqueapareaaofimdaimpresso.
Nestecaso,nadaserimpresso.
Exemplo6
::ArteASCII
Escrevaumscriptpara
imprimirvrios
caracteresasterisco
paraformaropadro
aolado:
Quatrolinhasde3
asteriscos.
Exemplo6
Projetaralgoritmo
1. Iniciarcontadordelinhas
2. Repetirimpressodeasteriscosdispostosem
umamesmalinha
3. Repetirpasso2paracadalinha
Exemplo6
CodificaremPython
# Contador do 1o. laco
i = 1
while (i <= 4):
# Contador do 2o. laco
j = 1
while (j <= 3):
print("*", end="")
j = j + 1
print()
i = i + 1
Refernciasbibliogrficas
Menezes,NiloNeyCoutinho(2010).Introduo
ProgramaocomPython.EditoraNovatec.
HETLAND,MagnusLie(2008).Beginning Python:
From Novice to Professional.SpringereBooks,2
edio.Disponvelem:
http://dx.doi.org/10.1007/9781430206347.
Horstmann,Cay&Necaise,Rance D.(2013).
PythonforEveryone.JohnWiley&Sons.
Dvidas?