Vous êtes sur la page 1sur 72

IEC081 IntroduoCinciadosComputadores

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

Acondio docomandowhile construdada


mesmaformaqueacondiodoif.
Nocomandowhile,enquantoacondiofor
verdadeira,repetimos aslinhasdoblocointerno.

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

while (x <= 5):


print(x)
3 x = 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

while (i <= num_alunos):


print("Digite a nota do
nota = float(input())
soma = soma + nota
i = i + 1

aluno", i, ":")
# Le nota
# Acumula nota
# Atualiza contador

print("Media:", round(soma/num_alunos, 2))

"))

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())

# Atualiza no. de notas


# Acumula nota
aluno", i, ":")
# Le nota

print("Media:", round(soma/(i - 1), 2))


Comoolaocontao1comonota,
devesedescontarumaunidadedo
contadorantesdoclculodamdia.

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?

Vous aimerez peut-être aussi