Vous êtes sur la page 1sur 55

ICC901 Introduo Programao de Computadores

IEC081 Introduo Cincia dos Computadores


IEC037 Introduo Programao de Computadores

2016/2
Aula 02 Estruturas Condicionais Simples e
Compostas

Fonte da imagem: https://www.codeschool.com/courses/forging-ahead-with-asp-net-core


Contedo

Estruturas Condicionais

Como montar uma condio

Problemas comentados
Contedo

Estruturas Condicionais

Como montar uma condio

Problemas comentados
Estruturas de Programao
Qualquer programa de computador pode ser escrito
combinando-se os trs tipos bsicos de estruturas de
programao:

Sequencial Condicional Repetio


Estruturas de Programao

Teorema provado em
1966 por Corrado Bhm
(1923-) e Giuseppe
Jacopini (1936-2001) no
artigo: Flow Diagrams,
Turing Machines And
Languages With Only Two
Formation Rules.
Estrutura Sequencial
a estrutura de programao mais simples.
O fluxo de comandos do algoritmo segue a mesma sequncia
linear da nossa escrita:
De cima para baixo
Da esquerda para direita
p/ direita

p/ baixo a = 3
b = 4
m = (a + b)/2
print(m)
Estrutura Condicional
Permite alterar o fluxo de execuo, de forma a selecionar
qual parte do algoritmo deve ser executada.
Essa deciso tomada a partir de uma condio, que pode
resultar apenas em:
Verdadeiro, ou
Falso ?
Condio verdadeira, condio falsa
Verdadeiro ou falso apenas um resultado da condio.
Eles indicam para que lado a execuo do seu cdigo vai
bifurcar.
Uma condio falsa no indica que seu script est errado.

quebrou
?
Estruturas Condicionais
:: Formato
Incio da estrutura
condicional
Sinal de dois

if : pontos!

else: Outro sinal de


dois pontos!
Os dois
blocos so
recuados
Exemplo A
:: o else no obrigatrio
# Calcula o valor do ingresso

opcao = input("Meia entrada? (S/N) ")


ingresso = 30.0
Ajusta todas as letras de
uma string para maisculas Condio

if (opcao.upper() == "S"): Condies sempre


terminam com sinal
ingresso = ingresso/2
de dois pontos

print("Valor do ingresso: ", ingresso)

Recuo (tecla TAB)


Exemplo B
:: Equao do 2 grau
a = float(input("Digite a: "))
b = float(input("Digite b: "))
c = float(input("Digite c: "))

delta = b**2 4 * a * c
Condio
if (delta < 0):
print("Nao tem raiz real")
else:
print("Tem raiz real")

if e else sempre terminam


Comandos internos ao if e ao com sinal de dois pontos
else devem ser recuados
Indentao
O comando else deve estar alinhado com o comando if
correspondente.
Todos os comandos de um mesmo bloco devero ter o
mesmo recuo.

Indentao Vlida Indentao Invlida


if (condio): if (condio): if (condio):
comando comando comando
comando comando comando
else: else: else:
comando comando comando
comando comando comando
Indentao influencia no resultado!

if (temp > 25): Mensagem


print("Quente") Aproveite
print("Ligue o ventilador") sempre exibida
print("Aproveite")

if (temp > 25): Mensagem


print("Quente") Aproveite exibida
print("Ligue o ventilador") somente quando
print("Aproveite") temp > 25
No confunda

Indentao (identao)
Insero de espaos em um
cdigo de linguagem de
programao

Endentao
Encaixe dos dentes de uma pea
denteada com os de outra
Contedo

Estruturas Condicionais

Como montar uma condio

Problemas comentados
Tipos de operadores

Aritmticos

Operadores Comparao

Lgicos
Operadores de Comparao
So utilizados para estabelecer relao de comparao entre
valores numricos.

Operador Operao Exemplos


== Igual a 3 == 3 20 == 18
> Maior que 5 > 4 10 > 11
< Menor que 3 < 6 9 < 7
>= Maior ou igual a 5 >= 3 4 >= 4
<= Menor ou igual a 3 <= 5 7 <= 7
!= Diferente de 8 != 9 2 != 2
Qual a diferena entre
os smbolos = e == ?
O smbolo = indica uma atribuio de valor.
O valor da varivel esquerda do smbolo modificado
pelo valor direita.
x = x + 1

O smbolo == indica uma comparao de valores.


Nenhum valor modificado. Eles so apenas comparados,
produzindo um resultado lgico (V ou F).

if (x == 2):
Operadores de Comparao
:: Exemplos

print(1 == 1) x = 5
print(2 != 1) print(x > 5)
print(x <= 5)

True False
True True

19
Comparao de strings segue ordem
alfabtica

nome1 = 'dragao' print(2 < 10)


nome2 = 'harpia' print('2' < '10')
nome3 = 'Dragao'
print(nome1 > nome2)
print(nome1 == nome3)

False True
False False

20
Ateno
:: Compare variveis do mesmo tipo
Neste exemplo, a varivel
x do tipo inteiro, mas a x = 4
expresso "4" representa
if ("4" == x):
um caractere, e no um print("igual")
nmero. else:
print("diferente")

diferente
Operadores de comparao
aritmticos
Operador
Nmero Nmero
aritmtico

Nmero

Nmero Comparao Nmero

True / False
Como avaliar uma condio?
Operadores de comparao tm menor prioridade que os
operadores aritmticos.

2 + 3 > 10 % 6

5>4

Na dvida, use
V parnteses.
Como avaliar uma condio?
:: Exerccio
x = 2
y = 3
z = 7

Expresso Verdadeiro Falso Mal formada


x+y>6
x - 1 + y == 4
x ** y == x * y
y-5=z-9
1 - z != 4 < 11
x + 8 % z >= y * 6 15
Como avaliar uma condio?
:: Resposta
x = 2
y = 3
z = 7

Expresso Verdadeiro Falso Mal formada


x+y>6 X
x - 1 + y == 4 X
x ** y == x * y X
y-5=z-9 X
1 - z != 4 < 11 X
x + 8 % z >= y * 6 15 X
Se voc negar a condio, inverta os
comandos if/else

nota = float(input("")) nota = float(input(""))

if (nota >= 5.0): if (nota < 5.0):


print("Passou") print("Reprovou")
else: else:
print("Reprovou") print("Passou")
Contedo

Estruturas Condicionais

Como montar uma condio

Problemas comentados
Problema 1

Um radar de trnsito verifica


a velocidade dos veculos.

Caso ultrapassem 60 km/h,


emite-se um registro de
multa.

O valor da multa de R$
200,00 mais R$ 3,00 para
cada 1 km/h acima do limite.

Escreva um programa para


determinar o valor da multa.
Problema 1
2 Identificar entradas e sadas

Grandeza Unidade de medida Faixa de valores


Entradas Velocidade km/h 0
Sadas Multa R$ 0
Problema 1
3 Projetar algoritmo

vel > lim


else
V F

200 + 3 * (vel lim) zero


Problema 1
4 Codificar em Python
# Entrada de dados e definicao de constantes
vel = float(input("Informe a velocidade: "))
lim = 60 # Limite de velocidade

# Calculo do valor da multa


if (vel > lim):
multa = 200 + 3 * (vel lim)
else:
multa = 0

# Exibicao de resultados
print(multa) Alternativa
if (vel <= lim):
multa = 0
else:
multa = 200 + 3 * (vel lim)
Problema 1
5 Testar o script resultante

40
km/h
60
km/h
80
km/h
Problema 2

Quantos pontos de fora


(pf) um esqueleto tira
durante um ataque a um
personagem com pf0
pontos de fora iniciais ?
O ataque determinado
pela seguinte frmula:

0,25 * pf0 + 5, se pf0 50


pf =
0,20 * pf0 + 2, se pf0 > 50
Problema 2
2 Identificar entradas e sadas

Grandeza Unidade de medida Faixa de valores


Entradas Ponto de fora inicial --- 0
Sadas
Sadas Ponto de fora tirado --- 0
Problema 2
3 Projetar algoritmo

pf0 <= 50

V F else

pf = 0,25 * pf0 + 5 pf = 0,20 * pf0 + 2


Problema 2
4 Codificar em Python
# Entrada de dados
pf0 = int(input("Ponto de forca inicial: "))

if (pf0 <= 50):


pf = 0.25 * pf0 + 5
else:
pf = 0.20 * pf0 + 2

print(pf)
if (pf0 > 50): Alternativa
pf = 0.20 * pf0 + 2
else:
pf = 0.25 * pf0 + 5
Problema 3
Uma lata de leite em p da marca A:
Peso: 400g; Custo R$ 8,39.

Um saco de leite em p da marca B:


Peso: 1kg; Custo: R$ 20,30.

Qual marca tem o melhor preo?


Problema 3
2 Identificar entradas e sadas

Grandeza Unidade de medida Faixa de valores


PrecoA R$ 8.39
PesoA kg 0.4
Entradas
PrecoB R$ 20.30
PesoB kg 1.0
Sadas Marca --- {A, B}
Problema 3
3 Projetar algoritmo

precoA/pesoA > precoB/pesoB

V F else

Compre B Compre A
Problema 3
4 Codificar em Python
# Entrada de dados
prcA = float(input("Digite o preco da marca A: "))
prcB = float(input("Digite o preco da marca B: "))
psA = float(input("Digite o peso da marca A: "))
psB = float(input("Digite o peso da marca B: "))

if (prcA/psA > prcB/psB): if (prcB/psB > prcA/psA):


marca = "B" marca = "A"
else: else:
marca = "A" marca = "B" Alternativa

msg = "Compre a marca " + marca


Concatenao
print(msg) de strings
Problema 4

Escreva um programa que


verifique se uma senha de
quatro dgitos vlida.
A senha vlida se a soma
dos dgitos da primeira e
da terceira posio (da
esquerda para a direita) ****
for mltiplo da soma dos
dgitos da segunda e da
quarta posio.
Problema 4
2 Identificar entradas e sadas
Grandeza Unidade de medida Faixa de valores
Entradas senha --- [0; 9999]
Sadas Mensagem --- {liberado,negado}
Problema 4
3 Projetar algoritmo
num 1234
d1 = num // 1000 d4 = num % 10

d2 = (num // 100) % 10 d3 = (num // 10) % 10

(d1 + d3) % (d2 + d4) != 0

V F else

Acesso negado Acesso liberado


Problema 4
4 Codificar em Python
num = int(input("Digite a senha (4 digitos): "))

# Decompoe os quatro digitos da senha


d1 = num // 1000
d2 = (num // 100) % 10
d3 = (num // 10) % 10
d4 = num % 10

if ( (d1 + d3) % (d2 + d4) != 0):


msg = "negado"
else:
msg = "liberado"

msg = "Acesso" + msg


print(msg)
Problema 5

Um tanque de
combustvel tem o
formato da figura ao lado.
Escreva um programa que ar
verifique se um valor pago
pelo cliente suficiente
para completar o tanque. combustvel
Se for, qual o troco?
Se no, quantos litros
faltam?
Problema 5
2 Identificar entradas e sadas
Grandeza Unidade de medida Faixa de valores
Raio (r) cm 0
Altura (H) cm 0
Entradas Nvel de combustvel (h) cm 0
Preo do litro R$/litro 0
Valor pago (pg) R$ 0
Sadas Troco (ou Falta) R$ (ou litro) 0

1000 cm = 1 litro
Problema 5
3 Projetar algoritmo

volume de ar * preo pg
V F
else

Troco: Completar:
pg volume de ar * preo volume de ar pg / preo
Problema 5
4 Codificar em Python
# Entrada de dados
r = float(input("Raio do tanque: "))
H = float(input("Altura do tanque: "))
h = float(input("Nivel de combustivel: "))
preco = float(input("Preco do combustivel: "))
pg = float(input("Valor pago: "))

vol_ar = (pi * r**2 * (H - h)) / 1000.


Dinheiro: arredondar
if (vol_ar * preco >= pg):
em centavos
troco = pg - vol_ar * preco
print("Troco de ", round(troco, 2))
else:
diff_litros = vol_ar pg / preco
print("Faltam", diff_litros, "litros.")
Problema 6

Um evento comeou no
horrio h1 e terminou no
mesmo dia, no horrio h2,
tambm medido em horas
e minutos.
Quanto tempo durou o
evento?
Problema 6
2 Identificar entradas e sadas

Grandeza Unidade
Unidadede
demedida
medida Faixa
Faixade
devalores
valores
Horrio 1 (hh1, mm1) horas, minutos [0; 23], [0; 59]
Entradas
Horrio 2 (hh2, mm2) horas, minutos [0; 23], [0; 59]
Sadas Diferena de tempo
Sadas horas, minutos [0; 23], [0; 59]
(h, m)
Problema 6
3 Projetar algoritmo
Caso 1 Caso 2
mm2 mm1 mm2 < mm1

Incio: 9h 17min Incio: 9h 43min


Fim: 15h 43min Fim: 15h 17min

m = 43 17 = 26min m = 17 43 = 34min (-1h)


h = 15 9 = 6h h = 15 9 1 = 5h
if

m = (mm2 mm1) % 60
Problema 6
3 Projetar algoritmo

mm2 mm1
else
V F

h = hh2 hh1 h = hh2 hh1 1


Problema 6
4 Codificar 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): if (mm2 < mm1):
dh = hh2 hh1 dh = hh2 hh1 - 1
else: else:
dh = hh2 hh1 1 dh = hh2 hh1 Alternativa

print(dh, dm)
Referncias bibliogrficas
Menezes, Nilo Ney Coutinho (2014). Introduo
Programao com Python, 2 ed. Editora Novatec.
HETLAND, Magnus Lie (2008). Beginning Python: From
Novice to Professional. Springer eBooks, 2 edio.
Disponvel em: http://dx.doi.org/10.1007/978-1-4302-0634-7.
Gaddis, Tony (2012). Starting out with Python, 2 ed. Editora
Addison-Wesley.
DIERBACH, Charles. Introduction to Computer Science using
Python: a computational problem-solving approach. John
Wiley & Sons, 2012.
Dvidas?