Apresentação do PowerPoint

Propaganda
IEC037
Introdução à Programação de Computadores
Aula 09 – Estruturas Condicionais em Python
Turma: 03
Professor: Leandro Galvão
E-mail: [email protected]
Página: ipc-t03.weebly.com
Resolução de Problemas Algorítmicos
Início
1
Identificar o problema
2
Definir as entradas e as
saídas
Decompor
3
Projetar o algoritmo
4
Converter o algoritmo em
declarações da linguagem de
programação
5
Testar o programa
resultante
Fim
Refinar
passo a passo
Conteúdo
Estruturas Condicionais Simples
Estruturas Condicionais Compostas
Como montar uma condição?
Estruturas Condicionais Encadeadas
Estruturas de Programação

Qualquer programa de computador pode ser
escrito combinando-se os três tipos básicos de
estruturas de programação:
Sequencial
Condicional
Repetição
Estruturas de Programação

Teorema provado em
1966 por Corrado
Böhm (1923-) e
Giuseppe Jacopini
(1936-2001) no artigo:
“Flow Diagrams,
Turing Machines And
Languages With Only
Two Formation Rules”.
Estrutura Sequencial


É a estrutura de programação mais simples.
O fluxo de comandos do algoritmo segue a mesma
sequência linear da nossa escrita:
 De
cima para baixo
 Da esquerda para direita
p/ esquerda
p/ baixo
a = 3
b = 4
m = (a + b)/2
print(m)
Estrutura Condicional


Permite alterar o fluxo de execução, de forma a
selecionar qual parte do algoritmo deve ser
executada.
Essa decisão é tomada a partir de uma condição,
que pode resultar apenas em:
 Verdade,
 Falsidade
ou
?
Condição verdadeira, condição falsa


Verdadeiro ou falso são valores lógicos. São
atributos da expressão condicional.
O funcionamento correto do seu script não está
condicionado a resultados lógicos com valor
verdadeiro.
quebrou?
Estrutura Condicional Simples


Quando a condição é
verdadeira, o “bloco
verdade” é executado.
Quando a condição é
falsa, o “bloco
verdade” não é
executado.
início
a, b, c
delta ← b**2 – 4*a*c
delta < 0
F
if (delta < 0):
print('Nao tem raizes reais')
fim
V
Não tem
raízes reais
Estrutura Condicional Simples
:: Em Python
a = float(input("Digite a: "))
b = float(input("Digite b: "))
c = float(input("Digite c: "))
delta = b**2 – 4 * a * c
início
a, b, c
delta ← b**2 – 4*a*c
delta < 0 v
if (delta < 0):
print("Nao tem raizes reais")
F
Condições sempre terminam
com sinal de dois pontos
Comandos internos às condições
devem ser recuados (tecla TAB)
fim
Não tem
raízes reais
Exemplo A
# Script que calcula o valor do ingresso
# a depender de se houver meia entrada
op = input("Meia entrada? (S/N) ")
ingresso = 30
if (op == "S"):
ingresso = ingresso/2
print("Valor do ingresso: ", ingresso)
Recuo do comandos dependente
da condição (tecla TAB)
001
Conteúdo
Estruturas Condicionais Simples
Estruturas Condicionais Compostas
Como montar uma condição?
Estruturas Condicionais Encadeadas
Estruturas Condicionais Compostas


Quando a condição é
verdadeira, o “bloco
verdade” é executado.
Quando a condição é
falsa, o “bloco
falsidade” é executado.
início
a, b, c
delta ← b**2 – 4*a*c
delta < 0
V
F
if (delta < 0):
print("Nao tem raiz real")
else:
print("Tem raiz real")
Tem raiz
real
fim
Não tem
raízes reais
Estruturas Condicionais Compostas
:: Em Python
início
a = float(input("Digite a: "))
b = float(input("Digite b: "))
a, b, c
c = float(input("Digite c: "))
delta = b**2 – 4 * a * c
delta ← b**2 – 4*a*c
delta < 0
if (delta < 0):
print("Nao tem raiz real")
else:
print("Tem raiz real")
if e else sempre terminam
com sinal de dois pontos
Comandos internos ao if e
ao else devem ser recuados
V
F
Tem raiz
real
fim
Não tem
raízes reais
Exemplo B
# Script que verifica se o aluno passou
ou nao com base na media
m = float(input("Digite sua media: "))
if (m >= 5.0):
print("Passou")
else:
print("Reprovou")
if e else sempre terminam
com sinal de dois pontos
Comandos internos ao if e
ao else devem ser recuados
002
Indentação


O comando else deve estar alinhado com o
comandos if correspondente.
Todos os comandos de um mesmo bloco deverão
ter o mesmo recuo.
Indentação
:: Cuidados
Indentação Válida
if (condição):
comando
comando
else:
comando
comando
Indentação Inválida
if (condição):
comando
comando
else:
comando
comando
if (condição):
comando
comando
else:
comando
comando
Indentação
:: Diferenças
if (temp > 25):
print("Quente")
print("Ligue o ventilador")
print("Tchau")
t > 25
F
V
Quente
Ligue o ...
Tchau
if (temp > 25):
print("Quente")
print("Ligue o ventilador")
print("Tchau")
t > 25
F
V
Quente
Ligue o ...
Tchau
003
Não confunda
Indentação (identação)
• Inserção de espaços em um código
de linguagem de programação
Endentação
• Encaixe dos dentes de uma peça
denteada com os de outra
Problema 1



Uma lata de leite em pó da marca A, com 400g,
custa R$ 8,39.
Um saco de leite em pó da marca B, com 1kg, custa
R$ 20,30.
Qual marca tem o melhor preço?
Problema 1
2 – Definir entradas e saídas
Entradas
Saídas
Grandeza
Unidade de medida
Faixa de valores
PrecoA
R$
8.39
PesoA
kg
0.4
PrecoB
R$
20.30
PesoB
kg
1.0
Marca
---
{“A”, “B”}
Problema 1
3 – Projetar algoritmo
início
PrecoA, PesoA
PrecoB, PesoB
rA ← PrecoA/PesoA
rB ← PrecoB/PesoB
rA > rB
F
marca ← “A”
marca
fim
V
marca ← “B”
Problema 1
4 – Codificar em Python
# Entrada de dados
pA = float(input("Digite
pB = float(input("Digite
mA = float(input("Digite
mB = float(input("Digite
o
o
o
o
preco da marca A: "))
preco da marca B: "))
peso da marca A: "))
peso da marca B: "))
rA = pA / mA
rB = pB / mB
if (rA > rB):
marca = "B"
else:
marca = "A"
print("Compre a marca ", marca)
Recuo do comandos dependente
da condição (tecla TAB)
004
Problema 2




Um radar de trânsito
verifica a velocidade
dos veículos.
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 2
2 – Definir entradas e saídas
Entradas
Saídas
Grandeza
Unidade de medida
Faixa de valores
Velocidade
km/h
≥0
Multa
R$
≥0
Problema 2
3 – Projetar o algoritmo
início
vel
lim ← 60
vel > lim
F
V
multa ← 200 + 3 * (vel – lim)
multa
fim
multa ← 0
Problema 2
4 – Codificar em Python
# Entrada de dados e definicao de constantes
vel = float(input("Informe a velocidade: "))
lim = 60
# Limite de velocidade
# Calculo
if (vel >
multa
else:
multa
do valor da multa
lim):
= 200 + 3 * (vel – lim)
= 0
# Exibicao de resultados
print(multa)
005
Problema 2
5 – Testar o script resultante
40
km/h
60
km/h
80
km/h
Problema 3


A equação de uma
circunferência de raio
R é 𝑥 2 + 𝑦 2 = 𝑅2 .
Escreva um algoritmo
que, dado um ponto P
qualquer, verifique se
ele se encontra:
 Na
circunferência
 No interior
 No exterior
y
R
x
Problema 3
2 – Definir entradas e saídas
Entradas
Saídas
Saídas
Grandeza
Unidade de medida
Faixa de valores
Raio
---
>= 0
Coordenada X de P
---
ℝ
Coordenada Y de P
---
ℝ
Localização de P
---
{interior, exterior, na
circunferência}
Problema 3
3 – Projetar algoritmo
X**2 + Y**2 == R**2
F
V
Na
circunferência
X**2 + Y**2 < R**2
V
P é interno
F
P é externo
Problema 3
3 – Projetar algoritmo
início
C1 X**2 + Y**2 == R**2
R, X, Y
C1
V
Na
circunferência
C2
F
C2
X**2 + Y**2 < R**2
F
V
Interno
fim
Externo
Problema 3
4 – Codificar em Python
#
r
x
y
Entrada de dados
= float(input("Digite raio: "))
= float(input("Digite coord. X do ponto: "))
= float(input("Digite coord. Y do ponto: "))
if (x**2 + y**2 == r**2):
print("Ponto estah na circunferencia.")
else:
if (x**2 + y**2 < r**2):
print("Ponto eh interno.")
else:
print("Ponto eh externo.")
006
Problema 4

Dados os coeficientes a, b, c de uma equação de 2º
grau, determine se há raízes reais e, caso positivo,
quais são elas.
Problema 4
2 – Definir entradas e saídas
Entradas
Saídas
Grandeza
Unidade de medida
Faixa de valores
Coeficiente a
---
ℝ
Coeficiente b
---
ℝ
Coeficiente c
---
ℝ
Raiz , se houver
---
ℝ
Raiz , se houver
---
ℝ
Problema 4
3 – Projetar algoritmo
início
a, b, c
delta ← b**2 – 4*a*c
delta < 0
V
Não tem raiz
real
F
delta == 0
V
r ← - b/(2*a)
r
fim
F
r1 ← (- b + delta)/(2*a)
r2 ← (- b - delta)/(2*a)
r1, r2
Problema 4
4 – Codificar em Python
#
a
b
c
Entrada de dados
= float(input("Digite a: "))
= float(input("Digite b: "))
= float(input("Digite c: "))
delta = b**2 – 4 * a * c
if (delta < 0):
print("Nao tem raiz real.")
else:
if (delta == 0):
r = -b / (2 * a)
print("Uma raiz real")
print(r)
else:
r1 = (-b + delta**0.5) / (2 * a)
r2 = (-b - delta**0.5) / (2 * a)
print("Duas raizes reais:")
print(r1)
print(r2)
007
Problema 5


Projete um algoritmo para uma máquina caçaníquel que gere 3 números aleatórios entre 1 e 10.
Se os três números forem iguais, o jogador ganha.
Caso contrário, ele perde.
Problema 5
2 – Definir entradas e saídas
Entradas
Saídas
Grandeza
Unidade de medida
Faixa de valores
N1
---
[1,10]
N2
---
[1,10]
N3
---
[1,10]
Sucesso no jogo
---
{Perdeu, Ganhou}
Problema 5
3 – Projetar algoritmo
N1 == N2
V
F
perdeu
N2 == N3
F
perdeu
V
ganhou
Problema 5
3 – Projetar algoritmo
início
Gerar N1, N2, N3
N1 == N2
F
V
N2 == N3
F
V
Ganhou!
Perdeu!
Perdeu!
Como gerar números
aleatórios?
fim
Problema 5
4 – Codificar em Python
# Biblioteca de nos. aleatorios
import random
# Gera nos. aleatorios entre 1 e 10
n1 = random.randint(1,10)
n2 = random.randint(1,10)
n3 = random.randint(1,10)
if (n1 == n2):
if (n2 == n3):
print("Ganhou")
else:
print("Perdeu")
else:
print("Perdeu")
008
Módulos em Python (Bibliotecas)



Bibliotecas organizam
funções bastante
utilizadas em arquivos
diferentes.
Assim, elas podem ser
chamadas quando
necessário, sem ter de
reescrever tudo.
Em Python, as
bibliotecas também são
conhecidas como
Uso:
módulos.
<módulo>.<função>
Conteúdo
Estruturas Condicionais Simples
Estruturas Condicionais Compostas
Como montar uma condição?
Estruturas Condicionais Encadeadas
Tipos de operadores
.
Operadores
Operandos
Resultado
(entradas)
(saída)
Aritmético
numérico
numérico
Relacional
numérico
lógico
Lógico
lógico
lógico
Tipo
Precedência entre operadores
Operador
Significado
()
Grupos entre parênteses
**
Potenciação
-
Multiplicação, divisão real,
resto, divisão inteira
+ >=
<
<= ==
+
Negação
* / % //
>
Precedência
Subtração, adição
!=
Comparações
not
NÃO lógico
and
E lógico
or
OU lógico
=
Atribuição
–
Exemplos
(x <= 20 or x >= 40)
x
10
20
30
40
50
resultado
V
V
F
V
V
(salario > 1000 and
idade > 18)
salario idade
900
1000
1100
18
19
17
1200
22
resultado
F
F
F
V
Exemplos
(m – 4 > m / 2)
m
2
8
30
resultado
F
F
V
(num % 2 != 0 and
contador < 50)
num
contador
resultado
1231
1232
1233
51
50
49
1234
48
F
F
F
V
Atenção
:: Compare variáveis do mesmo tipo
x = 4
if ("4" == x):
print("igual")
else:
print("diferente")

No exemplo acima, a variável x é do tipo inteiro,
mas a expressão "4" representa um caractere, e
não um número.
009
Armadilhas
:: Números float são aproximações




Há infinitos números
reais.
A memória do
computador é um
recurso finito.
Logo, não há como
representar todos os
números reais em
memória.
Consequentemente,
representamos
aproximações.
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
010
Estabeleça um nível mínimo de
precisão
Alternativa 1
Alternativa 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
011
Funções round e abs
round(x, n)

Arredonda um
número x em n casas
decimais.
abs(z)

Determina o módulo
de um número real z,
ou seja, sua distância
até o zero.
Problema 6

Dados três valores X, Y e Z, verifique:
 Se
eles podem ser os comprimentos dos lados de um
triângulo.
 Caso positivo, se o triângulo é equilátero, isósceles ou
escaleno.
Problema 6
1 – Identificar o problema

Propriedade básica de um triângulo:
O
comprimento de cada lado de um triângulo é menor
do que a soma dos comprimentos dos demais lados.
Equilátero
Isósceles
Escaleno
Triângulo cujos
os lados têm
comprimentos
iguais.
Triângulo que
tem dois lados
com
comprimentos
iguais.
Triângulo que
tem os três
lados com
comprimentos
diferentes.
Problema 6
2 – Definir entradas e saídas
Entradas
Saídas
Saídas
Grandeza
Unidade de medida
Faixa de valores
X
m
>0
Y
m
>0
Z
m
>0
---
“Não é triângulo”,
“Triângulo equilátero”,
“Triângulo isósceles”,
“Triângulo escaleno”
mensagem
Problema 6
3 – Projetar algoritmo
início
X, Y, Z
C1
V
(X > Y + Z) OU (Y > Z + X)
OU (Z > X + Y)
C2
(X == Y) E (Y == Z)
C3
(X == Y) OU (Y == Z) OU
(Z == X)
F
C2
V
Não é
triângulo
C1
F
C3
Equilátero
fim
V
Isósceles
F
Escaleno
Problema 6
4 – Codificar em Python
#
a
b
c
Entrada de dados
= float(input("Digite o lado a: "))
= float(input("Digite o lado b: "))
= float(input("Digite o lado c: "))
if ((a >= b + c) or (b >= a + c) or (c >= b + a)):
print("Nao eh triangulo.")
else:
if ((a == b) and (b == c)):
print("Triangulo equilatero")
else:
if ((a == b) or (b == c) or (c == a)):
print("Triangulo isosceles")
else:
print("Triangulo escaleno")
012
Problema 7


Sejam A, B, C três números inteiros quaisquer.
Escreva um fluxograma para arrumá-los em ordem
decrescente.
Problema 7
1 – Identificar o problema




São dados três números quaisquer A, B, C.
Eles devem ser arrumados em ordem decrescente.
Pode-se considerar que a saída seja
N1 ≥ N2 ≥ N3
Agora, o problema se resume a atribuir:
A
B
C
N1
N2
N3
Problema 7
2 – Definir entradas e saídas
Entradas
Saídas
Grandeza
Unidade de medida
A, B, C
---
N1, N2, N3
---
Faixa de valores
Inteiros, qualquer
ordem
Inteiros, ordem
decrescente
Problema 7
3 – Projetar algoritmo
A>B
V
F
N1 ← A
N2 ← B
N1 ← B
N2 ← A
C > N1
V
F
N3 ← N2
N2 ← N1
N1 ← C
C > N2
V
N3 ← N2
N2 ← C
F
N3 ← C
Problema 7
3 – Projetar algoritmo
início
1
A, B, C
A>B
V
C > N1 F
V
F
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
fim
N3 ← C
Problema 7
4 – Codificar em Python
#
a
b
c
Entrada de dados
= float(input("Digite o numero a: "))
= float(input("Digite o numero b: "))
= float(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)
013
Problema 8



Um gerente quer medir
a eficiência de
processos em sua
empresa.
Um processo X
começou no horário h1
e terminou no mesmo
dia, no horário h2,
também medido em
horas e minutos.
Quanto tempo durou o
processo?
Problema 8
2 – Definir entradas e saídas
Entradas
Saídas
Saídas
Grandeza
Unidade
Unidadede
demedida
medida
Faixa
Faixade
devalores
valores
Horário 1 (hh1, mm1)
horas, minutos
[0; 23], [0; 59]
Horário 1 (hh2, mm2)
horas, minutos
[0; 23], [0; 59]
Diferença de tempo
(Δh, Δm)
horas, minutos
[0; 23], [0; 59]
Problema 8
3 – Projetar algoritmo
Caso 1
Caso 2
mm2 ≥ mm1
mm2 < mm1
Início: 9h 17min
Fim: 15h 43min
Δm = 43 – 17 = 26min
Δh = 15 – 9 =
6h
Início: 9h 43min
Fim: 15h 17min
Δm = 17 – 43 = 34min (-1h)
Δh = 15 – 9 – 1 = 5h
Problema 8
3 – Projetar algoritmo
início
hh1, mm1
hh2, mm2
dm = (mm2 – mm1) % 60
mm2 >= mm1
F
V
dh = hh2 – hh1
dh = hh2 – hh1 – 1
dh, dm
fim
Problema 8
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):
dh = hh2 – hh1
else:
dh = hh2 – hh1 – 1
print(dh, dm)
014
Problema 9


Duas pessoas jogam pedra, papel, tesoura.
Como determinar quem ganhou?
Problema 9
2 – Definir entradas e saídas
Entradas
Saídas
Grandeza
Unidade
Unidadede
demedida
medida
Faixa
Faixade
devalores
valores
Mão do J1
---
{Pedra, Papel, Tesoura}
Mão do J2
---
{Pedra, Papel, Tesoura}
Vencedor
---
{J1, J2}
Problema 9
3 – Projetar algoritmo – versão 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)

J2 ganha caso contrário
Problema 9
3 – Projetar algoritmo – versão 1
início
C1
Sortear J1, J2
J1 == J2
V
(J1 == Pedra E J2 == Tesoura) OU
(J1 == Papel E J2 == Pedra) OU
(J1 == Tesoura E J2 == Papel)
F
C1
F
V
Empate
Jogador 1
ganhou
Jogador 2
ganhou
Como fazer o
sorteio?
fim
Problema 9
4 – Codificar em Python – sorteio
# Sorteio do jogo "Pedra, Papel, Tesoura"
# Pedra
= 0
# Papel
= 1
# Tesoura = 2
import random
j1 = random.randint(0,2)
j2 = random.randint(0,2)
(J1 == Pedra E J2 == Tesoura) OU
(J1 == Papel E J2 == Pedra) OU
(J1 == Tesoura E J2 == Papel)
(J1 == 0 E J2 == 2) OU
(J1 == 1 E J2 == 0) OU
(J1 == 2 E J2 == 1)
Problema 9
4 – Codificar em Python – versão 1
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.")
015
Abstração



Associar objetos (pedra,
papel, tesoura) a números
é uma forma de
abstração.
Adotamos essa abstração
para simplificar o código
do sorteio.
Tal simplificação não
poderia ser também
aplicada ao teste da
condição?
Problema 9
:: Repensando o Jogo
1
1
2
2
0
1
2
0
0
Problema 9
:: Repensando o Jogo


Por exemplo, é natural
pensar que três horas
antes de 2h no relógio
resulta em 11h.
Inconscientemente,
fazemos as seguintes
contas:
 2h
– 3h = –1h
 –1h + 12h = 11h
Problema 9
:: Repensando o Jogo
2
1
0
1
2–1=1
0
2–0=2
0
2
1–0=1
Ganhou quem tirou o
número uma unidade maior
1 – 2 = -1
2
0 – 2 = -2
1
0 – 1 = -1
Ganhou quem tirou o número uma
unidade maior, se pensarmos
como em um relógio de 3 posições
Operador %

O operador % tem uma propriedade interessante:
a%b
Se a é positivo
• Resultado: resto da divisão
Se a é negativo
• Resultado: determinado por aritmética
circular, como em um relógio.
Problema 9
:: Repensando o Jogo
1
2
(2 – 1) % 3 = 1
0
1
2
(2 – 0) % 3 = 2
(1 – 0) % 3 = 1
0
(1 – 2) % 3 = 2
1
(0 – 2) % 3 = 1
2
0
(0 – 1) % 3 = 2
Aritmética circular (ou modular)
0
Uma casa
para trás
2
[0 – 2] = -2
1
0
Duas casas
para trás
2
2
(0 – 2) % 3 = 1
2
1
(0 – 1) % 3 = 2
2
(0 – 0) % 3 = 0
1
0
[0 – 0] = 0
1
1
0
[0 – 1] = -1
0
Zero casas
para trás
0
2
1
Problema 9
3 – Projetar algoritmo – versão 2
início
Teste esta condição no Shell
do Python, para todas as
possibilidades de J1 e J2
Sortear J1, J2
J1 == J2
V
F
(J1-J2)%3 == 1
F
V
Empate
Jogador 1
ganhou
fim
Jogador 2
ganhou
Problema 9
4 – Codificar em Python – versão 2
# Sorteio do jogo "Pedra, Papel, Tesoura"
# Pedra
= 1
# Papel
= 2
# Tesoura = 3
import random
j1 = random.randint(0,2)
j2 = random.randint(0,2)
if (j1 == j2):
print("Empate.")
else:
if ((j1 – j2) % 3 == 1):
print("Jogador 1 ganhou.")
else:
print("Jogador 2 ganhou.")
016
Módulo math

Contém diversas
funções que podem
ser usadas ​em
cálculos matemáticos.

Para utilizá-las, não se
esqueça de colocar o
prefixo math. antes
do nome da função.
Módulo math
:: Funções matemáticas e constantes
exp(x)
• Calcula ex
log(x)
• Logaritmo natural de x (base e)
log10(x)
sqrt(x)
Pi
e
• Logaritmo de x na base 10
• Raiz quadrada de x
• Valor da constante Pi
• Valor da constante de Euler
Módulo math
:: Funções trigonométricas
sin(x)
• Calcula o seno de x (em radianos)
cos(x)
• Calcula o cosseno de x (em radianos)
tan(x)
• Calcula a tangente de x (em radianos)
asin(x)
• Calcula o arco-seno de x
acos(x)
• Calcula o arco-cosseno de x
atan(x)
• Calcula o arco-tangente de x
Módulo math
:: Funções de arredondamento
ceil(x)
floor(x)
• Arredonda x para o inteiro mais
próximo em direção a mais infinito
• Arredonda x para o inteiro mais
próximo em direção a menos
infinito
Funções de arredondamento
:: Diferenças
ceil() e
floor()
• Requer módulo
math.
• Possui apenas um
argumento de
entrada.
• Resulta é um
número inteiro.
round()
• É padrão do Python.
Não requer o
módulo math.
• Possui dois
argumentos de
entrada.
• Resultado é um
número real.
Problema 10

Calcular o alcance 𝑆
de um projétil, dados
a velocidade inicial 𝑣0
e o ângulo 𝜃 entre o
cano do canhão e o
solo. Considere 𝑔 =
9,81𝑚/𝑠 2 .
𝑣02
𝑆=
sen(2𝜃)
𝑔
Problema 10
2 – Definir entradas e saídas
Entradas
Saídas
Grandeza
Unidade de medida
Faixa de valores
Velocidade inicial
m/s
>0
Ângulo com solo
graus
Alcance
m
>0
Problema 10
3 – Projetar algoritmo
início
(v0 >= 0) and (theta > 0) and
(theta < 90)
C1
v0, theta
g = 9.81
C1
F
Dados
inválidos
V
s = (v0**2 / g) * sen(2 * theta)
s
fim
Problema 10
4 – Codificar em Python
# Entrada
v0
=
theta_g =
g
=
de dados e definicao de constantes
float(input("Velocidade inicial: "))
float(input("Angulo: "))
9.81
# Importar modulo matematico
import math
if (v0 >= 0) and (theta_g > 0) and (theta_g < 90):
theta_rad = theta_g * math.pi / 180.0
s = (v0**2 / g) * math.sin(2 * theta_rad)
print(round(s, 3))
else:
print("Dados invalidos.")
017
Problema 11

Uma quantia inicial 𝑞 é
aplicada a uma taxa 𝑡 de
juros. O saldo 𝑠 desse
investimento após 𝑚
meses é dado por:
𝑠 =𝑞 1+𝑡

𝑚
Para uma taxa 𝑡 ao mês,
quanto tempo (em anos e
meses) é necessário para
que o saldo dobre em
relação ao valor inicial?
Problema 11
2 – Definir entradas e saídas
Entradas
Saídas
Grandeza
Unidade de medida
Faixa de valores
Taxa de juros (t)
---
[0; 1]
m (tempo)
anos; meses
[0, +∞[; [0, 11]
Problema 11
3 – Projetar algoritmo


A saída do problema é
a quantidade de
meses e anos, mas a
saída da equação é o
saldo, informação que
já conhecemos.
Portanto, temos de
reescrever a equação,
isolando o 𝑚 no lado
esquerdo.
𝑠 =𝑞 1+𝑡
𝑚
2𝑞
= 1+𝑡
𝑞
𝑚
log 2 = log 1 + 𝑡
𝑚
log 2 = 𝑚 ⋅ log 1 + 𝑡
log 2
𝑚=
log 1 + 𝑡
Problema 11
3 – Projetar algoritmo



A expressão anterior
resultará em um
número com parte
fracionária.
Contudo, o valor da
saída é inteiro, pois o
rendimento acontece
a cada mês.
Logo, o resultado deve
ser arredondado para
cima (math.ceil)
log 2
𝑚=
log 1 + 𝑡
Problema 11
3 – Projetar algoritmo
início
t
(t >= 0) and (t <= 1)
V
F
m = log(2) / log(1 + t)
Dados
inválidos
m // 12
m % 12
fim
Problema 11
4 – Codificar em Python
# Entrada de dados
t = float(input("Informe a taxa de aplicacao: "))
if ((t >= 0) and (t <= 1)):
# Importar modulo matematico
import math
m = math.ceil(math.log(2) / math.log(1 + t))
print(m // 12)
# no. de anos
print(m % 12)
# no. de meses (0 a 11)
else:
print("Dados invalidos")
018
Simplificando o uso de módulos
Python


Se ao longo do código você usa diversas vezes
funções pertencentes a um módulo Python, a
programação pode se tornar cansativa.
Para usar diretamente o nome da função sem
explicitar o nome do módulo como prefixo, use o
seguinte comando:
from <nome_do_módulo> import *
Pode ser o math, o random ou
outro que você necessitar.
Conteúdo
Estruturas Condicionais Simples
Estruturas Condicionais Compostas
Como montar uma condição?
Estruturas Condicionais Encadeadas
Estruturas Condicionais Encadeadas



Estruturas condicionais encadeadas (ou aninhadas)
são estruturas condicionais dentro de outras
estruturas condicionais.
Quando um problema exige um longo
encadeamento de ifs e elses, a criação de
diversos níveis deslocados poderia causar
confusão.
A cláusula elif substitui um par else if sem
criar um outro nível 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 = (-b–delta**0.5)/(2*a)
Δ<0
V
F
Δ=0
V
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
fim
Calcular
r1
Sem
solução
Problema 12

Escrever um script em Python que leia um ângulo
entre 0 e 360° e informe o ponto cardeal
correspondente.
0°
Problema 12
2 – Definir entradas e saídas
Entradas
Saídas
Grandeza
Unidade de medida
Ângulo
graus
Ponto Cardeal
---
Faixa de valores
{N, S, L, O}
Problema 12
3 – Projetar algoritmo
início
ang
ang == 0 or
ang == 360
F
ang == 180 V
V
Norte
Sul
F
ang == 90 V
F
ang == 270 V
F
Desconhecido
fim
Leste
Oeste
Problema 12
4 – Codificar em Python
# Entrada de dados
ang = int(input("Digite o valor de 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")
xxx
Problema 13

Anos bissextos são definidos da
seguinte forma:
1. Anos divisíveis por 400 são
bissextos.
2. Anos divisíveis por 100, mas
não por 400, não são
bissextos.
3. Anos divisíveis por 4, mas não
por 100, são bissextos.
4. Todos os outros anos não são
anos bissextos.

Escreva um fluxograma que
determine se um ano é
bissexto ou não.
Problema 13
2 – Definir entradas e saídas
Entradas
Saídas
Saídas
Grandeza
Unidade de medida
Ano
---
Mensagem
---
Faixa de valores
{bissexto,
não bissexto}
Problema 13
3 – Projetar algoritmo – versão 1
ano % 400 == 0
F
V
Bissexto
ano % 100 == 0
F
V
Não
bissexto
ano % 4 == 0
V
Bissexto
F
Não
bissexto
Problema 13
3 – Projetar algoritmo – versão 1
início
C1 ano % 400 == 0
ano
C2 ano % 100 == 0
C1
V
F
C3
C2
V
F
C3
F
V
Bissexto
Não
bissexto
fim
Bissexto
Não
bissexto
ano % 4 == 0
Problema 13
4 – Codificar em Python – versão 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")
xxx
Problema 13
3 – Projetar algoritmo – versão 2
ano % 400 == 0
F
V
Bissexto
ano % 100 == 0
F
V
Não
bissexto
ano % 4 == 0
V
Bissexto
Bissexto:
F
Não
bissexto
ano % 400 == 0 OU (ano % 100 ≠ 0) E (ano % 4 == 0)
Problema 13
3 – Projetar algoritmo – versão 2
C1
início
(ano % 400 == 0)
OU
((ano % 100 ≠ 0) E (ano % 4 == 0))
ano
V
C1
F
Não
bissexto
Bissexto
fim
Problema 13
4 – Codificar em Python – versão 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")
xxx
Problema 14


A partir da renda
mensal, como
determinar o valor do
imposto de renda
devido?
Importante: as
alíquotas são
aplicadas de forma
progressiva.
Problema 14
2 – Definir entradas e saídas
Entradas
Saídas
Grandeza
Unidade de medida
Faixa de valores
Renda
R$
≥0
Imposto
R$
≥0
Problema 14
3 – Projetar algoritmo

O que é o cálculo progressivo?
 Uma
pessoa que recebe R$ 1.500 mensais não pagará
imposto de 7,5% sobre os R$ 1.500, mas sim sobre a
diferença (1500,00 – 1499,15 = 0,85).
 Da mesma maneira, quem recebe R$ 2.500 pagará:
 7,5%
de (2246,75 – 1499,15)
 15% de (2500 – 2246,75)
E
assim por diante...
Faixa de renda mensal
Alíquota
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 14
3 – Projetar algoritmo

Para simplificar o desenho do fluxograma, vamos
adotar as seguintes convenções:
Faixa de renda mensal Constante
R$ 1.499,15
V1
R$ 2.246,75
R$ 2.995,70
R$ 3.743,19
V2
V3
V4
Problema 14
3 – Projetar algoritmo – versão 1
início
Versão usada na aula anterior
R
V
R > V1
F
R > V2
V
F
R > V3
F
V
R > V4
V
F
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
fim
imp ← 0,075*(V2-V1) +
0,15*(V3-V2) +
0,225*(V4-V3)+
0,275*(R-V4)
Problema 14
3 – Projetar algoritmo – versão 2
início
Facilita uso do elif
R
R <= V1
V
F
R <= V2
F
R <= V3
V
V
F
R <= V4
F
V
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
fim
imp ← 0,075*(V2-V1) +
0,15*(V3-V2) +
0,225*(V4-V3)+
0,275*(R-V4)
Problema 14
4 – Codificar 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)
xxx
Estruturas Condicionais
:: Revisão
Simples
(if)
Estruturas
Condicionais
Composta
(if ... else)
Múltipla escolha
(if ... elif ... else)
Referências bibliográficas




Menezes, Nilo Ney Coutinho (2010). Introdução à
Programação com Python. Editora Novatec.
HETLAND, Magnus Lie (2008). Beginning Python:
From Novice to Professional. Springer eBooks, 2ª
edição. Disponível em:
http://dx.doi.org/10.1007/978-1-4302-0634-7.
Gaddis, Tony (2012). Starting out with Python, 2ª
edição. Editora Addison-Wesley.
DIERBACH, Charles. Introduction to Computer
Science using Python: a computational problemsolving approach. John Wiley & Sons, 2012.
Dúvidas?
Download