Anda di halaman 1dari 69

ICC901 Introduo Programao de Computadores

IEC081 Introduo Cincia dos Computadores


IEC037 Introduo Programao de Computadores

2016/2
Aula 03 Estruturas Condicionais Encadeadas
Atualizao: 28/nov/16

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


Contedo

Como montar uma condio?

Estruturas Condicionais Encadeadas

Exemplos extras
Contedo

Como montar uma condio?

Estruturas Condicionais Encadeadas

Exemplos extras
Tipos de operadores

Operandos Resultado
. Tipo
(entradas) (sada)

Aritmtico numrico numrico

Operadores Comparao numrico lgico

Lgico lgico lgico


Operadores Lgicos
Os operadores lgicos (ou booleanos) so utilizados para
combinar condies.

and or not

Operador
True/False lgico True/False

True / False
AND (E lgico)

Resulta em verdade
somente se todas as # Testa se triangulo
eh equilatero
condies so
verdadeiras (vlidas). ladoA = 5
ladoB = 5
A B A and B ladoC = 5
F F F print(
F V F (ladoA == ladoB) and
(ladoB == ladoC))
V F F
V V V

ladoA == ladoB and ladoC True


No cometa essa loucura!
OR (Ou lgico)

Resulta em verdade
somente se pelo menos # Testa se triangulo
eh isosceles
uma das condies
verdadeira. ladoA = 4
ladoB = 5
A B A or B ladoC = 5
F F F print(
F V V (ladoA == ladoB) or
(ladoB == ladoC) or
V F V (ladoA == ladoC))
V V V

ladoA == ladoB or ladoC True


No cometa essa loucura!
NOT (No lgico)

Nega o valor de uma


condio. # Testa se a defesa
do personagem eh
diferente de
A not A armadura
F V defesa = "escudo"
V F
print(
not (defesa ==
"armadura"))
not (a = b)

Comparao True
formada por
DOIS sinais de =
Precedncia entre operadores
Operador Significado
() Grupos entre parnteses
** Potenciao
- Negao
* / % // Multiplicao, divises, resto
+ - Subtrao, adio Na dvida, use
> >= < <= == != Comparaes parnteses.
not NO lgico
and E lgico
or OU lgico
= Atribuio
Operadores Lgicos
:: Exemplo A
salario > 1000 and
x <= 20 or x >= 40
idade > 18

x resultado salario idade resultado


10 V 900 18 F
20 V 1000 19 F
30 F 1100 17 F
40 V 1200 22 V
50 V
Operadores Lgicos
:: Exemplo B
num % 2 != 0 and
m 4 > m / 2
contador < 50

m resultado num contador resultado


2 F 1231 51 F
8 F 1232 50 F
30 V 1233 49 V
1234 48 F
Problema 1

Calcular o alcance de 02
= sen 2
um projtil.

Entradas:
Velocidade inicial 0
ngulo entre o cano
do canho e o solo

Considere:
= 9,81/ 2 .
Problema 1
2 Identificar entradas e sadas

Grandeza Unidade de medida Faixa de valores


Velocidade inicial m/s >= 0
Entradas
ngulo com solo graus ]0; 90[
Sadas Alcance m >0
Problema 1
3 Projetar algoritmo

(v0 >= 0) and (theta > 0) and (theta < 90)

V F else

s = (v0**2 / g) * sin(2 * theta) Dados invlidos


Problema 1
4 Codificar em Python verso 1
# Entrada de dados e definicao de constantes
v0 = float(input("Velocidade inicial: "))
theta = float(input("Angulo (em graus): "))
g = 9.81
theta > 0 and < 90
# Importar modulo matematico
from math import * No faa
essa loucura!
if (v0 >= 0) and (theta > 0) and (theta < 90):
theta_rad = radians(theta)
s = (v0**2 / g) * sin(2 * theta_rad)
print(round(s, 3))
else:
print("Dados invalidos.")
Problema 1
4 Codificar em Python verso 2
# Entrada de dados e definicao de constantes
v0 = float(input("Velocidade inicial: "))
theta = float(input("Angulo (em graus): "))
g = 9.81
Medidas so
valores reais
# Importar modulo matematico
from math import *

if (v0 < 0) or (theta <= 0) or (theta >= 90):


print("Dados invalidos.")
Inverteram-se as
else:
condies
theta_rad = radians(theta)
s = (v0**2 / g) * sin(2 * theta_rad)
print(round(s, 3))
Como negar expresses lgicas?

not (A and B and C and ...)

not (A) or not (B) or not (C) or not (...)

not (A or B or C or ...)

not (A) and not (B) and not (C) and not (...)
Problema 2
Dados trs valores x, y e z, verifique:
1. Se eles podem ser os comprimentos dos lados de um
tringulo.
2. Caso positivo, se o tringulo equiltero, issceles ou
escaleno.
3. Imprimir nomes sem acento.
Problema 2
1 Identificar o problema (1/2)
1. Verificar se trs medidas formam um tringulo vlido:
Nenhum dos lados de um tringulo deve ser maior do
que a soma dos outros dois.
Exemplos:
5 cm 4 cm
4 cm 2 cm
3 cm 1 cm
Problema 2
1 Identificar o problema (2/2)
2. Verificar quantos lados so iguais entre si.
Exemplos:
Equiltero Issceles Escaleno

Tringulo Tringulo que Tringulo que


cujos lados tem dois lados tem os trs
tm com lados com
comprimentos comprimentos comprimentos
iguais iguais diferentes
Problema 2
2 Identificar entradas e sadas

Grandeza Unidade de medida Faixa de valores


x metro >0
Entradas y metro >0
z metro >0
Sadas No tringulo,
equiltero,
Sadas mensagem ---
issceles,
escaleno
Problema 2
3 Projetar algoritmo verso 1
Algum dos lados maior ou
igual soma dos outros dois
V F

No Todos os trs
tringulo lados so iguais
V F

Algum par de
Equiltero
lados iguais
V F

Issceles Escaleno
Problema 2
3 Projetar algoritmo refinamento
Algum
(x >= y + z) or (y >= z + x) or (z >= x + y)

V F else
Todos
No tringulo (x == y) and (y == z)

V F else
Algum
Equiltero (x == y) or (y == z) or (z == x)

else
V F

Issceles Escaleno
Problema 2
4 Codificar em Python verso 1
# Entrada de dados
x = float(input("Lado x: ")) Medidas dos lados
y = float(input("Lado y: ")) de um polgono so
nmeros reais
z = float(input("Lado z: "))

if ((x >= y + z) or (y >= x + z) or (z >= y + x)):


print("Nao eh triangulo")
else:
Ateno para uso de
if ((x == y) and (y == z)):
maisculas e minsculas
print("equilatero")
conforme manda enunciado
else:
if ((x == y) or (y == z) or (z == x)):
print("isosceles")
else:
print("escaleno")
Problema 2
4 Codificar em Python verso 2
# Entrada de dados
x = float(input("Lado x: "))
y = float(input("Lado y: "))
z = float(input("Lado z: "))

if ((x < y + z) and (y < x + z) and (z < y + x)):


if ((x != y) and (y != z) and (z != x)):
print("escaleno")
else: Inverteram-se as
if ((x != y) or (y != z)): condies
print("isosceles")
else:
print("equilatero")
else:
print("Nao eh triangulo")
Contedo

Como montar uma condio?

Estruturas Condicionais Encadeadas

Exemplos Extras
Estruturas Condicionais Encadeadas
Estruturas condicionais encadeadas (ou aninhadas) so
estruturas condicionais dentro de outras estruturas
condicionais.
Um longo encadeamento de ifs e elses, em diversos
nveis de indentao, pode confundir o programador.
O comando elif substitui um par else / if sem criar
um outro nvel de indentao na estrutura condicional.
Estruturas Condicionais Encadeadas
:: Exemplo
if (delta < 0):
print("Nao tem raiz real")
else:
if (delta == 0):
r1 = -b/(2 * a)
else:
r1 = (-b+delta**0.5)/(2*a)
r2 = (-bdelta**0.5)/(2*a)

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)
Problema 3

Duas pessoas (J1 e J2)


jogam pedra, papel,
tesoura.
Escreva um programa
que leia a jogada de cada
pessoa e determine
quem ganha ou se h
empate.
Problema 3
2 Identificar entradas e sadas

Grandeza Unidade
Unidadede
demedida
medida Faixa
Faixade
devalores
valores
Mo do J1 --- {Pedra, Papel, Tesoura}
Entradas
Mo do J2 --- {Pedra, Papel, Tesoura}
Sadas Vencedor --- {J1, J2, Empate}
Problema 3
3 Projetar algoritmo

J1 == J2
elif
V F

Empate (J1 == Pedra and J2 == Tesoura) or


(J1 == Papel and J2 == Pedra) or
(J1 == Tesoura and J2 == Papel)
V F else

J1 ganhou J2 ganhou
Problema 3
Tratamento de maisculas e minsculas
desejvel garantir que a comparao das jogadas d
certo mesmo quando o usurio digita PEDRA, PaPeL ou
TESOURa em padres diferentes de caracteres
maisculos ou minsculos.

str1 = "Pedra"

print(str1.lower()) print(str1.upper())

pedra PEDRA
Problema 3
4 Codificar em Python
# Leitura das entradas
j1 = input("Jogada do Jogador 1: ").lower()
j2 = input("Jogada do Jogador 2: ").lower()

if (j1 == j2): Ajusta todas as letras de


uma string para minsculas
print("Empate")
elif (((j1 == "pedra") and (j2 == "tesoura")) or
((j1 == "papel") and (j2 == "pedra")) or ((j1 ==
"tesoura") and (j2 == "papel"))):
print("Jogador 1 ganhou.")
else:
print("Jogador 2 ganhou.")
Problema 4
Anos bissextos so definidos da
seguinte forma:
1. Anos divisveis por 400 so
bissextos.
2. Anos divisveis por 100, mas no
por 400, no so bissextos.
3. Anos divisveis por 4, mas no
por 100, so bissextos.
4. Todos os outros anos no so
anos bissextos.
Escreva um programa que determine
se um ano BISSEXTO ou NO
BISSEXTO (sem acentos).
Problema 4
2 Identificar entradas e sadas

Grandeza Unidade de medida Faixa de valores


Entradas Ano --- >0
Sadas {BISSEXTO,
Sadas Mensagem ---
NO BISSEXTO}

O mais rigoroso seria > 1582,


quando o Calendrio
Gregoriano entrou em vigor
Problema 4
3 Projetar algoritmo verso 1
ano % 400 == 0
elif
V F

BISSEXT
O ano % 100 == 0
elif
V F

NO
ano % 4 == 0
BISSEXTO
else
V F

NO
BISSEXTO
BISSEXTO
Problema 4
4 Codificar em Python verso 1
# Entrada de dados
ano = int(input("Ano: ")) Ano um valor inteiro

if (ano <= 0):


print("Entrada invalida")
else:
if (ano % 400 == 0):
print("BISSEXTO")
elif (ano % 100 == 0): Se h apenas dois casos,
print("NAO BISSEXTO") como reduzir o cdigo a
elif (ano % 4 == 0): apenas duas decises?
print("BISSEXTO")
else:
print("NAO BISSEXTO")
Problema 4
3 Projetar algoritmo verso 2
ano % 400 == 0
V F

BISSEXTO ano % 100 == 0


V F

NO BISSEXTO ano % 4 == 0
V F

BISSEXTO NO BISSEXTO

ano % 400 == 0 or
Quais caminhos
levam a um ano
(ano % 100 != 0) and (ano % 4 == 0)
bissexto?
Problema 4
4 Codificar em Python verso 2
# Entrada de dados
ano = int(input("Ano: "))

if (ano <= 0):


print("Entrada invalida")
else:
if ((ano%400 == 0) or ((ano%100 != 0) and (ano%4 == 0))):
print("Bissexto".upper())
else:
print("Nao Bissexto".upper())

Ajusta todas as letras de


uma string para maisculas
Problema 5

Escreva um programa
que leia a renda mensal
de uma pessoa.
Como sada, informe o
valor do imposto de
renda devido.
Importante: as alquotas
so aplicadas de forma
progressiva.
Problema 5
2 Identificar entradas e sadas

Grandeza Unidade de medida Faixa de valores


Entradas Renda R$ 0
Sadas Imposto R$ 0
Problema 5
O que clculo progressivo?
Uma pessoa que recebe R$ 2.000 mensais no pagar
imposto de 7,5% sobre os R$ 2.000, mas sim sobre a
diferena (2000,00 1903,98 = 96,02).
Da mesma maneira, quem recebe R$ 3.000 pagar:
7,5% de (2826,65 1903,99)
15% de (3000 2826,66)
Fonte: Receita Federal, 2016

E assim por diante... Faixa de renda mensal Alquota


At R$ 1.903,98 Isento
De R$ 1.903,99 at R$ 2.826,65 7,5%
De R$ 2.826,66 at R$ 3.751,05 15%
De R$ 3.751,06 at R$ 4.664,68 22,5%
acima de R$ 4.664,68 27,5%
Problema 5
3 Projetar algoritmo
r <= f1 Faixa de renda Constante
V F elif R$ 1.903,98 f1
R$ 2.826,65 f2
imp = 0 r <= f2 R$ 3.751,05 f3
V F elif
R$ 4.664,68 f4

imp = 0,075 * (r f1) r <= f3


V F elif

imp = 0,075 * (f2 f1) + r <= f4


0,15 * (r f2) V F else

imp = 0,075 * (f2 f1) + imp = 0,075 * (f2 f1) +


0,15 * (f3 f2) + 0,15 * (f3 f2) +
0,225 * (r f3) 0,225 * (f4 f3)+
0,275 * (r f4)
Problema 5
4 Codificar em Python
r = float(input("Digite sua renda: "))
f1 = 1903.98
f2 = 2826.65 Dinheiro valor real
f3 = 3751.05
f4 = 4664.68

if (r <= f1):
imp = 0
elif (r <= f2):
imp = 0.075*(r-f1)
elif (r <= f3):
imp = 0.075*(f2-f1) + 0.15*(r-f2)
elif (r <= f4):
imp = 0.075*(f2-f1) + 0.15*(f3-f2) + 0.225*(r-f3)
else:
imp = 0.075*(f2-f1)+0.15*(f3-f2)+0.225*(f4-f3)+0.275*(r-f4)
print(imp)
Contedo

Como montar uma condio?

Estruturas Condicionais Encadeadas

Exemplos Extras
Exemplo 1
Sejam A, B, C trs nmeros inteiros quaisquer.
Escreva um script para arrum-los em ordem
decrescente.
Exemplo 1
1 Identificar o problema
So dados trs nmeros inteiros 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 associar:
A N1
B N2
C N3
Exemplo 1
2 Identificar entradas e sadas

Grandeza Unidade de medida Faixa de valores


Inteiros, qualquer
Entradas A, B, C ---
ordem
Inteiros, ordem
Sadas N1, N2, N3 ---
decrescente
Exemplo 1
3 Projetar algoritmo
A>B
else
V F

N1 A N1 B
N2 B N2 A

C > N1
elif
V F
N3 N2
C > N2
N2 N1
else
N1 C V F

N3 N2
N3 C
N2 C
Exemplo 1
4 Codificar em Python
a = int(input("Numero a: "))
b = int(input("Numero b: "))
c = int(input("Numero c: "))
if (a > b):
n1 = a
n2 = b
else:
n1 = b
n2 = a
if (c > n1):
n3 = n2
n2 = n1
n1 = c
elif (c > n2):
n3 = n2
n2 = c
else:
n3 = c
print(n1, n2, n3)
Exemplo 2

A equao de uma
circunferncia de raio R y
2 + 2 = 2 .
Escreva um algoritmo
R
que, dado um ponto P
qualquer, verifique se ele
x
se encontra:
Contido na
circunferncia
No interior
No exterior
Exemplo 2
2 Identificar entradas e sadas

Grandeza Unidade de medida Faixa de valores


Raio --- >= 0
Entradas Coordenada X de P --- ]-; +[
Coordenada Y de P --- ]-; +[
Sadas {interior, exterior,
Sadas Localizao de P ---
contido}
Exemplo 2
3 Projetar algoritmo

X**2 + Y**2 == R**2


elif
V F

contido X**2 + Y**2 < R**2


else
V F

interno externo
Exemplo 2
4 Codificar em Python
# Entrada de dados
Coordenadas
so valores r = float(input("Raio: "))
reais x = float(input("Coord. X do ponto: "))
y = float(input("Coord. Y do ponto: "))

if (x**2 + y**2 == r**2):


print("contido")
elif (x**2 + y**2 < r**2):
print("interno")
else:
print("externo")
Exemplo 3
Uma quantia inicial
aplicada a uma taxa de
juros. O saldo desse
investimento 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 Identificar entradas e sadas

Grandeza Unidade de medida Faixa de valores


Entradas Taxa de juros (t) --- [0; 1]
m (tempo) anos [0, +[
Sadas
m (tempo) meses [0, 11]
Exemplo 3
3 Projetar algoritmo
A sada do problema a = 1+

quantidade de meses e
anos. 2
= 1+

Mas a sada da equao
o saldo, informao que log 2 = log 1 +
j conhecemos.
Portanto, temos de log 2 = log 1 +
reescrever a equao,
log 2
isolando o no lado =
log 1 +
esquerdo.
Exemplo 3
3 Projetar algoritmo

(t >= 0) and (t <= 1)


else
V F

Dados
meses = int(log(2) / log(1 + t)) + 1
invlidos
Exemplo 3
4 Codificar em Python
# Entrada de dados
t = float(input("Informe a taxa de aplicacao: "))
Validao da entrada
if ((t >= 0) and (t <= 1)):
# Importar modulo matematico
from math import *

m = int(log(2) / log(1 + t)) + 1

print(m // 12) # no. de anos


print(m % 12) # no. de meses (0 a 11)
else:
print("Dados invalidos")
Exemplo 4
Escrever um script em que leia um ngulo entre zero e
360 e informe o ponto cardeal correspondente.

0
Exemplo 4
2 Identificar entradas e sadas

Grandeza Unidade de medida Faixa de valores


Entradas ngulo graus [0; 360]
Sadas Ponto Cardeal --- {N, S, L, O}
Exemplo 4
3 Projetar algoritmo
ang == 0 or ang == 360
V F elif

Norte ang == 180


V F elif

Sul ang == 90
V F elif

Leste ang == 270


V F else

Oeste Desconhecido
Exemplo 4
4 Codificar em Python
# Entrada de dados
ang = int(input("Angulo: "))

if ((ang == 0) or (ang == 360)):


print("Norte")
elif (ang == 180): No faa
essa loucura!
print("Sul")
elif (ang == 90): ang == 0 or 360
print("Leste")
elif (ang == 270):
print("Oeste")
else:
print("Desconhecido")
Ateno para iniciais
maisculas
Exemplo 5
Projete um algoritmo para uma mquina caa-nquel que
gere e imprima 3 nmeros aleatrios entre 1 e 10.
Se os trs nmeros forem iguais, imprimir: GANHOU
Caso contrrio, imprimir: PERDEU
Exemplo 5
2 Identificar entradas e sadas

Grandeza Unidade de medida Faixa de valores


N1 --- [1,10]
Entradas N2 --- [1,10]
N3 --- [1,10]
Sadas Sucesso no jogo --- {PERDEU, GANHOU}
Exemplo 5
3 Projetar algoritmo
N1 == N2
F V

PERDEU N2 == N3
F V

PERDEU GANHOU

Quais caminhos n1 == n2 and n2 == n3


levam a ganhar?
Exemplo 5
4 Codificar em Python
# Biblioteca de numeros aleatorios
from random import *

# Gera numeros aleatorios entre 1 e 10


n1 = randint(1,10)
n2 = randint(1,10)
n3 = randint(1,10)

print(n1, n2, n3)

if ((n1 == n2) and (n2 == n3)):


status = "Ganhou"
else:
status = "Perdeu"
Ajusta todas as letras de
print(status.upper()) uma string para maisculas
Referncias bibliogrficas
Menezes, Nilo Ney Coutinho (2014). Introduo
Programao com Python, 2ed. 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 edio.
Editora Addison-Wesley.
DIERBACH, Charles. Introduction to Computer Science
using Python: a computational problem-solving
approach. John Wiley & Sons, 2012.
Dvidas?

Anda mungkin juga menyukai