Escolar Documentos
Profissional Documentos
Cultura Documentos
2016/1
Atualizado
em
30/06/2016
Contedo
Como
montar
uma
condio?
Estruturas
Condicionais
Encadeadas
Exemplos
extras
Contedo
Como
montar
uma
condio?
Estruturas
Condicionais
Encadeadas
Exemplos
extras
Tipos
de
operadores
.
Operadores
Tipo
Operandos
(entradas)
Resultado
(sada)
AritmLco
numrico
numrico
Relacional
numrico
lgico
Lgico
lgico
lgico
Operadores Lgicos
Negao
nico
operando
Verica
se
tringulo
equiltero
Verica
se
tringulo
issceles
Operadores
Lgicos
::
Tabelas
Verdade
A NO (A)
A B (A) E (B)
A B (A) OU (B)
Signicado
()
**
Potenciao
* / % //
Subtrao, adio
+ >=
<
Negao
>
Precedncia
<=
==
Comparaes
not
NO lgico
and
E lgico
or
OU lgico
Atribuio
Exemplos
(x <= 20 or x >= 40)
x
10
20
30
40
50
resultado
V
V
F
V
V
Exemplos
(m 4 > m / 2)
m
2
8
30
resultado
F
F
V
(num % 2 != 0 and
contador < 50)
num contador
1231
51
1232
50
1233
49
1234
48
resultado
F
F
V
F
Ateno
::
Compare
variveis
do
mesmo
Lpo
x = 4
if ("4" == x):
print("igual")
else:
print("diferente")
Armadilhas
::
Nmeros
oat
so
aproximaes
H
innitos
nmeros
reais.
A
memria
do
computador
um
recurso
nito.
Logo,
no
h
como
representar
todos
os
nmeros
reais
em
memria.
Consequentemente,
representamos
aproximaes.
u =
11111113
v = -11111111
w = 7.51111111
print((u + v) + w)
9.51111111
print(u + (v + w))
9.511111110448837
u + (v + w) == (u + v) + w
False
AlternaFva 2
u
v
w
x
y
u
v
w
x
y
=
=
=
=
=
11111113
-11111111
7.51111111
(u + v) + w
u + (v + w)
x == y
False
round(x,6) == round(y,6)
True
=
=
=
=
=
11111113
-11111111
7.51111111
(u + v) + w
u + (v + w)
x == y
False
abs(x-y) < 0.0000001
True
Arredonda
um
nmero
x
em
n
casas
decimais.
abs(z)
Determina
o
mdulo
de
um
nmero
real
z,
ou
seja,
sua
distncia
at
o
zero.
Problema 1
tringulo.
Caso
posiLvo,
se
o
tringulo
equiltero,
issceles
ou
escaleno.
Problema
1
1
IdenLcar
o
problema
Issceles
Escaleno
Tringulo
cujos
lados
tm
comprimentos
iguais.
Tringulo
que
tem
dois
lados
com
comprimentos
iguais.
Tringulo
que
tem
os
trs
lados
com
comprimentos
diferentes.
Problema
1
2
Denir
entradas
e
sadas
Entradas
Sadas
Sadas
Grandeza
Unidade de medida
Faixa de valores
> 0
> 0
> 0
---
No
tringulo,
Tringulo
equiltero,
Tringulo
issceles,
Tringulo
escaleno
mensagem
Problema
1
3
Projetar
algoritmo
incio
X,
Y,
Z
C1
V
F
C2
V
No
tringulo
C3
Equiltero
C1
(X
>=
Y
+
Z)
or
(Y
>=
Z
+
X)
or
(Z
>=
X
+
Y)
C2
(X == Y) and (Y == Z)
C3
(X
==
Y)
or (Y
==
Z)
or
(Z
==
X)
V
Issceles"
Escaleno
Problema
1
4
Codicar
em
Python
#
X
Y
Z
Entrada de dados
= float(input("Digite o lado X: "))
= float(input("Digite o lado Y: "))
= float(input("Digite o lado Z: "))
Funes
de
arredondamento
::
Mdulo
math
ceil(x)
floor(x)
Funes
de
arredondamento
::
Diferenas
ceil()
e
floor()
Requer
mdulo
math.
Possui
apenas
um
argumento
de
entrada.
Resultado
um
nmero
inteiro.
round()
padro
do
Python.
No
requer
o
mdulo
math.
Possui
dois
argumentos
de
entrada.
Resultado
um
nmero
real.
Funes
de
arredondamento
::
Diferenas
round
oor
ceil
Exemplo
round
oor
ceill
3.4
round(3.4,0) = 3
oor(3.4) = 3
ceill(3.4) = 4
3.6
round(3.6,0) = 4
oor(3.6) = 3
ceill(3.6) = 4
-3.4
round(-3.4,0) = -3
oor(-3.4) = -4
ceill(-3.4) = -3
-3.6
round(-3.6,0) = -4
oor(-3.6) = -4
ceill(-3.6)
=
-3
Fonte:
Learn
to
Program
with
Small
Basic
Problema 2
Calcular
o
alcance
de
um
projLl,
dados
a
velocidade
inicial
0
e
o
ngulo
entre
o
cano
do
canho
e
o
solo.
Considere
=9,81/
2.
=02/sen(2)
Problema
2
2
Denir
entradas
e
sadas
Entradas
Sadas
Grandeza
Unidade de medida
Faixa de valores
Velocidade inicial
m/s
>= 0
graus
]0; 90[
Alcance
> 0
Problema
2
3
Projetar
algoritmo
incio
C1
v0,
theta
g
=
9.81
C1
F
Dados
invlidos
Problema
2
4
Codicar
em
Python
# Entrada
v0
=
theta_g =
g
=
Contedo
Como
montar
uma
condio?
Estruturas
Condicionais
Encadeadas
Exemplos
Extras
<0
=0
F
if (delta < 0):
print("Nao tem raiz real")
elif (delta == 0):
r1 = -b/(2 * a)
else:
r1 = (-b + delta**0.5)/(2*a)
r2 = (-b delta**0.5)/(2*a)
Calcular
r1
e
r2
Calcular
r1
Sem
soluo
Problema 3
Problema
3
2
Denir
entradas
e
sadas
Entradas
Sadas
Grandeza
Unidade de medida
Faixa de valores
ngulo
graus
[0; 360]
Ponto Cardeal
---
{N, S, L, O}
Problema
3
3
Projetar
algoritmo
incio
ang
ang
==
0
or
ang
==
360
F
ang
==
180
V
Norte
Sul"
F
ang
==
90
V
F
ang
==
270
V
F
Desconhecido
m
Leste
Oeste
Problema
3
4
Codicar
em
Python
# Entrada de dados
ang = int(input("Digite um angulo: "))
if ((ang == 0) or (ang == 360)):
print("Norte")
elif (ang == 180):
print("Sul")
elif (ang == 90):
print("Leste")
elif (ang == 270):
print("Oeste")
else:
print("Desconhecido")
Problema 4
Problema
4
2
Denir
entradas
e
sadas
Entradas
Sadas
Sadas
Grandeza
Unidade de medida
Ano
---
Mensagem
---
Faixa
de
valores
{bissexto,
no
bissexto}
Problema
4
3
Projetar
algoritmo
verso
1
ano
%
400
==
0
F
V
Bissexto
ano
%
100
==
0
F
V
No
bissexto
ano
%
4
==
0
V
Bissexto
F
No
bissexto
Problema
4
3
Projetar
algoritmo
verso
1
incio
C1 ano % 400 == 0
ano
C2 ano % 100 == 0
C1
V
C3
C2
C3
V
Bissexto
No
bissexto
Bissexto
No
bissexto
ano % 4 == 0
Problema
4
4
Codicar
em
Python
verso
1
# Entrada de dados
ano = int(input("Digite o ano: "))
# Verifica se ano eh bissexto
if (ano % 400 == 0):
print("Bissexto")
elif (ano % 100 == 0):
print("Nao Bissexto")
elif (ano % 4 == 0):
print("Bissexto")
else:
print("Nao Bissexto")
Problema
4
3
Projetar
algoritmo
verso
2
ano
%
400
==
0
F
V
Bissexto
ano
%
100
==
0
F
V
No
bissexto
ano
%
4
==
0
V
Bissexto
Bissexto:
F
No
bissexto
Problema
4
3
Projetar
algoritmo
verso
2
C1
incio
(ano
%
400
==
0)
or
((ano
%
100
!=
0)
and (ano
%
4
==
0))
ano
V
C1
No
bissexto
Bissexto
Problema
4
4
Codicar
em
Python
verso
2
# Entrada de dados
ano = int(input("Digite o ano: "))
# Verifica se ano eh bissexto
if ((ano%400 == 0) or ((ano%100 != 0) and (ano%4 == 0))):
print("Bissexto")
else:
print("Nao Bissexto")
Problema
5
A
parLr
da
renda
mensal,
como
determinar
o
valor
do
imposto
de
renda
devido?
Importante:
as
alquotas
so
aplicadas
de
forma
progressiva.
Problema
5
2
Denir
entradas
e
sadas
Entradas
Sadas
Grandeza
Unidade de medida
Faixa de valores
Renda
R$
Imposto
R$
Problema
5
3
Projetar
algoritmo
Alquota
At R$ 1.499,15
Isento
De R$ 1.499,16 at R$ 2.246,75
7,5%
De R$ 2.246,76 at R$ 2.995,70
15%
De R$ 2.995,71 at R$ 3.743,19
22,5%
acima de R$ 3.743,19
27,5%
Problema
5
3
Projetar
algoritmo
V3
V4
Problema
5
3
Projetar
algoritmo
verso
1
incio
R
R
>
V1
F
R > V2
R
>
V3
F
R > V4
imp
=
0
imp
=
0,075*(R-V1)
imp
=
0,075*(V2-V1)
+
0,15*(R-V2)
imp
=
0,075*(V2-V1)
+
0,15*(V3-V2)
+
0,225*(R-V3)
imp
m
imp
=
0,075*(V2-V1)
+
0,15*(V3-V2)
+
0,225*(V4-V3)+
0,275*(R-V4)
Problema
5
3
Projetar
algoritmo
verso
2
incio
Facilita
uso
do
elif
R
R
<=
V1
V
R <= V2
R <= V3
R <= V4
imp
=
0
imp
=
0,075*(R-V1)
imp
=
0,075*(V2-V1)
+
0,15*(R-V2)
imp
=
0,075*(V2-V1)
+
0,15*(V3-V2)
+
0,225*(R-V3)
imp
m
imp
=
0,075*(V2-V1)
+
0,15*(V3-V2)
+
0,225*(V4-V3)+
0,275*(R-V4)
Problema
5
4
Codicar
em
Python
# Entrada de dados e definicao de constantes
r = float(input("Digite sua renda: "))
v1 = 1499.15
v2 = 2246.75
v3 = 2995.70
v4 = 3743.19
if (r <= v1):
imp = 0
elif (r <= v2):
imp = 0.075*(r-v1)
elif (r <= v3):
imp = 0.075*(v2-v1) + 0.15*(r-v2)
elif (r <= v4):
imp = 0.075*(v2-v1) + 0.15*(v3-v2) + 0.225*(r-v3)
else:
imp = 0.075*(v2-v1)+0.15*(v3-v2)+0.225*(v4-v3)+0.275*(r-v4)
print(imp)
Estruturas
Condicionais
::
Reviso
Simples
(if)
Estruturas
Condicionais
Composta
(if
...
else)
MlFpla
escolha
(if
...
elif
...
else)
Contedo
Como
montar
uma
condio?
Estruturas
Condicionais
Encadeadas
Exemplos
Extras
Exemplo
1
Sejam
A,
B,
C
trs
nmeros
inteiros
quaisquer.
Escreva
um
script
Python
para
arrum-los
em
ordem
decrescente.
Exemplo
1
1
IdenLcar
o
problema
So
dados
trs
nmeros
quaisquer
A,
B,
C.
Eles
devem
ser
arrumados
em
ordem
decrescente.
Pode-se
considerar
que
a
sada
seja
N1
N2
N3
Agora,
o
problema
se
resume
a
atribuir:
A
B
C
N1
N2
N3
Exemplo
1
2
Denir
entradas
e
sadas
Entradas
Sadas
Grandeza
A,
B,
C
N1,
N2,
N3
Unidade
de
medida
---
---
Faixa
de
valores
Inteiros,
qualquer
ordem
Inteiros,
ordem
decrescente
Exemplo
1
3
Projetar
algoritmo
A
>
B
V
N1
A
N2
B
N1
B
N2
A
C
>
N1
V
N3
N2
N2
N1
N1
C
C
>
N2
V
N3
N2
N2
C
F
N3
C
Exemplo
1
3
Projetar
algoritmo
incio
A, B, C
C
>
N1
F
V
A
>
B
F
V
C
>
N2
F
V
N1
B
N2
A
N1
A
N2
B
N3
N2
N2
N1
N1
C
N3
N2
N2
C
1
N1,
N2,
N3
m
N3 C
Exemplo
1
4
Codicar
em
Python
#
a
b
c
Entrada de dados
= int(input("Digite o numero a: "))
= int(input("Digite o numero b: "))
= int(input("Digite o numero c: "))
if (a > b):
n1 = a
n2 = b
else:
n1 = b
n2 = a
if (c > n1):
n3 = n2
n2 = n1
n1 = c
else:
if (c > n2):
n3 = n2
n2 = c
else:
n3 = c
print("Numeros em ordem:",n1,n2,n3)
Exemplo 2
Exemplo
2
2
Denir
entradas
e
sadas
Entradas
Sadas
Sadas
Grandeza
Unidade
Unidade
dde
e
m
medida
edida
Faixa
Faixa
dde
e
vvalores
alores
horas, minutos
horas, minutos
Diferena
de
tempo
(h,
m)
horas, minutos
Exemplo
2
3
Projetar
algoritmo
Caso
1
Caso 2
mm2 mm1
Incio:
9h
17min
Fim:
15h
43min
m
=
43
17
=
26min
h
=
15
9
=
6h
Incio:
9h
43min
Fim:
15h
17min
m
=
17
43
=
34min
(-1h)
h
=
15
9
1
=
5h
Exemplo
2
3
Projetar
algoritmo
incio
hh1,
mm1
hh2,
mm2
dm
=
(mm2
mm1)
%
60
mm2
>=
mm1
V
dh
=
hh2
hh1
dh = hh2 hh1 1
dh,
dm
m
Exemplo
2
4
Codicar
em
Python
# Entrada de dados
hh1 = int(input("Hora inicial: "))
mm1 = int(input("Minuto inicial: "))
hh2 = int(input("Hora final: "))
mm2 = int(input("Minuto final: "))
# Diferenca de minutos
dm = (mm2 mm1) % 60
# Diferenca de horas
if (mm2 >= mm1):
dh = hh2 hh1
else:
dh = hh2 hh1 1
print(dh, dm)
Exemplo
3
Uma
quanLa
inicial
aplicada
a
uma
taxa
de
juros.
O
saldo
desse
invesLmento
aps
meses
dado
por:
=(1+)
Para
uma
taxa
ao
ms,
quanto
tempo
(em
anos
e
meses)
necessrio
para
que
o
saldo
dobre
em
relao
ao
valor
inicial?
Exemplo
3
2
Denir
entradas
e
sadas
Entradas
Sadas
Grandeza
Unidade de medida
Faixa de valores
---
[0; 1]
m (tempo)
anos; meses
Exemplo
3
3
Projetar
algoritmo
A
sada
do
problema
a
quanLdade
de
meses
e
anos,
mas
a
sada
da
equao
o
saldo,
informao
que
j
conhecemos.
Portanto,
temos
de
reescrever
a
equao,
isolando
o
no
lado
esquerdo.
=(1+)
2/=(1+)
log2=log(1+)
log2=log(1+)
=log2/log(1+)
Exemplo
3
3
Projetar
algoritmo
A
expresso
anterior
resultar
em
um
nmero
com
parte
fracionria.
Contudo,
o
valor
da
sada
inteiro,
pois
o
rendimento
acontece
a
cada
ms.
Logo,
o
resultado
deve
ser
arredondado
para
cima
(math.ceil)
=log2/log(1+)
Exemplo
3
3
Projetar
algoritmo
incio
t
(t
>=
0)
and
(t
<=
1)
V
m
=
ceil(
log(2)
/
log(1
+
t)
)
Dados
invlidos
m // 12
anos
m % 12
meses
Exemplo
3
4
Codicar
em
Python
# Entrada de dados
t = float(input("Informe a taxa de aplicacao: "))
if ((t >= 0) and (t <= 1)):
# Importar modulo matematico
from math import *
m = ceil(log(2) / log(1 + t))
print(m // 12)
# no. de anos
print(m % 12)
# no. de meses (0 a 11)
else:
print("Dados invalidos")
Exemplo
4
Duas
pessoas
jogam
pedra,
papel,
tesoura.
Como
determinar
quem
ganhou?
Exemplo
4
2
Denir
entradas
e
sadas
Entradas
Sadas
Grandeza
Unidade
Unidade
dde
e
m
medida
edida
Faixa
Faixa
dde
e
vvalores
alores
Mo do J1
---
Mo do J2
---
Vencedor
---
Exemplo
4
3
Projetar
algoritmo
verso
1
Se
J1
==
J2
Empate
J1
ganha
quando:
(J1
==
Pedra
E
J2
==
Tesoura)
OU
(J1
==
Papel
E
J2
==
Pedra)
OU
(J1
==
Tesoura
E
J2
==
Papel)
Exemplo
4
3
Projetar
algoritmo
verso
1
incio
C1
Sortear
J1,
J2
J1
==
J2
V
F
C1
V
Empate
Jogador
1
ganhou
Jogador
2
ganhou
Como
fazer
o
sorteio?
Exemplo
4
4
Codicar
em
Python
sorteio
# Sorteio do jogo "Pedra, Papel, Tesoura"
# Pedra
= 0
# Papel
= 1
# Tesoura = 2
from random import *
j1 = randint(0,2)
j2 = randint(0,2)
(J1
==
0
E
J2
==
2)
OU
(J1
==
1
E
J2
==
0)
OU
(J1
==
2
E
J2
==
1)
Exemplo
4
4
Codicar
em
Python
verso
1
# Sorteio do jogo "Pedra, Papel, Tesoura"
# Pedra
= 0
# Papel
= 1
# Tesoura = 2
from random import *
j1 = randint(0,2)
j2 = randint(0,2)
if (j1 == j2):
print("Empate.")
else:
if (((j1 == 0) and (j2 == 2)) or ((j1 == 1) and (j2
== 0)) or ((j1 == 2) and (j2 == 1))):
print("Jogador 1 ganhou.")
else:
print("Jogador 2 ganhou.")
Abstrao
Associar
objetos
(pedra,
papel,
tesoura)
a
nmeros
uma
forma
de
abstrao.
Adotamos
essa
abstrao
para
simplicar
o
cdigo
do
sorteio.
Tal
simplicao
no
poderia
ser
tambm
aplicada
ao
teste
da
condio?
Exemplo
4
::
Repensando
o
Jogo
1
1
2
1
2
Legenda
Jogador em destaque
ganhou
Jogador em destaque
perdeu
Exemplo
4
::
Repensando
o
Jogo
Por
exemplo,
natural
pensar
que
trs
horas
antes
de
2h
no
relgio
resulta
em
11h.
Inconscientemente,
fazemos
as
seguintes
contas:
2h
3h
=
1h
1h
+
12h
=
11h
Operador %
a
%
b
Se
a
posiLvo
Resultado:
resto
da
diviso
Se
a
negaLvo
Resultado:
determinado
por
aritmLca
circular,
como
em
um
relgio.
Duas
casas
para
trs
Trs
casas
para
trs
0
2
[0 1] = 2
1
0
(0 1) % 3 = 2
(0 2) % 3 = 1
(0 3) % 3 = 0
1
0
[0 3] = 0
1
0
[0 2] = 1
0
2
Exemplo
4
::
Repensando
o
Jogo
2
1
0
(2 1) % 3 = 1
(2 0) % 3 = 2
0
2
(1 0) % 3 = 1
(1 2) % 3 = 2
(0 2) % 3 = 1
(0 1) % 3 = 2
O
resultado
determina
quem
ganhou:
1: Jogador 1
2: Jogador 2
Exemplo
4
3
Projetar
algoritmo
verso
2
incio
Sortear
J1,
J2
J1
==
J2
V
(J1-J2)%3 == 1
V
Empate
Jogador
1
ganhou
Jogador
2
ganhou
Exemplo
4
4
Codicar
em
Python
verso
2
# Sorteio do jogo "Pedra, Papel, Tesoura"
# Pedra
= 0
# Papel
= 1
# Tesoura = 2
from random import *
j1 = randint(0,2)
j2 = randint(0,2)
if (j1 == j2):
print("Empate.")
else:
if ((j1 - j2) % 3 == 1):
print("Jogador 1 ganhou.")
else:
print("Jogador 2 ganhou.")
Referncias
bibliogrcas
Menezes,
Nilo
Ney
CouLnho
(2010).
Introduo
Programao
com
Python.
Editora
Novatec.
HETLAND,
Magnus
Lie
(2008).
Beginning
Python:
From
Novice
to
Professional.
Springer
eBooks,
2
edio.
Disponvel
em:
hp://dx.doi.org/
10.1007/978-1-4302-0634-7.
Gaddis,
Tony
(2012).
StarLng
out
with
Python,
2
edio.
Editora
Addison-Wesley.
DIERBACH,
Charles.
IntroducLon
to
Computer
Science
using
Python:
a
computaLonal
problem-
solving
approach.
John
Wiley
&
Sons,
2012.
Dvidas?