iec037 introdução à programação de computadores aula 09 – estruturas condicionais em python...

Post on 21-Apr-2015

126 Views

Category:

Documents

13 Downloads

Preview:

Click to see full reader

TRANSCRIPT

IEC037Introdução à Programação de

ComputadoresAula 09 – Estruturas Condicionais em Python

Turma: 03Professor: Leandro GalvãoE-mail: galvao@icomp.ufam.edu.brPágina: ipc-t03.weebly.com

Resolução de Problemas Algorítmicos

Definir as entradas e as saídas

Fim

Identificar o problema

Início

Converter o algoritmo em declarações da linguagem de

programação

Projetar o algoritmoDecompor

Refinarpasso a passo

Testar o programa resultante

1

2

3

4

5

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 = 3b = 4m = (a + b)/2print(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, ou Falsidade

?

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.

if (delta < 0):

print('Nao tem raizes reais')

início

a, b, c

fim

delta < 0

F Não tem raízes reais

V

delta ← b**2 – 4*a*c

Estrutura Condicional Simples:: Em Python

a = float(input("Digite a: "))

b = float(input("Digite b: "))

c = float(input("Digite c: "))

início

a, b, c

fim

delta < 0

F Não tem raízes reais

v

delta ← b**2 – 4*a*c

if (delta < 0):

print("Nao tem raizes reais")

delta = b**2 – 4 * a * c

Condições sempre terminam com sinal de dois pontos

Comandos internos às condições devem ser recuados (tecla TAB)

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.

if (delta < 0): print("Nao tem raiz real")else: print("Tem raiz real")

início

a, b, c

fim

delta < 0

F

Não tem raízes reais

V

delta ← b**2 – 4*a*c

Tem raiz real

Estruturas Condicionais Compostas:: Em Python

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

início

a, b, c

fim

delta < 0

F

Não tem raízes reais

V

delta ← b**2 – 4*a*c

Tem raiz real

a = float(input("Digite a: "))

b = float(input("Digite b: "))

c = float(input("Digite c: "))

delta = b**2 – 4 * a * c

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 Indentação Inválida

if (condição): comando comandoelse: comando comando

if (condição): comando comando else: comando comando

if (condição): comando comandoelse: comando comando

Indentação:: Diferenças

if (temp > 25): print("Quente") print("Ligue o ventilador")print("Tchau")

if (temp > 25): print("Quente") print("Ligue o ventilador") print("Tchau")

F

Vt > 25

Tchau

Quente

Ligue o ...

003

F

Vt > 25

Tchau

Quente

Ligue o ...

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 12 – Definir entradas e saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Saídas

Grandeza Unidade de medida Faixa de valores

Entradas

PrecoA R$ 8.39

PesoA kg 0.4

PrecoB R$ 20.30

PesoB kg 1.0

Saídas Marca --- {“A”, “B”}

Problema 13 – Projetar algoritmo

F

V

início

PrecoA, PesoAPrecoB, PesoB

fim

marca ← “A”

rA > rB

marca ← “B”

rA ← PrecoA/PesoArB ← PrecoB/PesoB

marca

Problema 14 – Codificar em Python

# Entrada de dadospA = float(input("Digite o preco da marca A: "))pB = float(input("Digite o preco da marca B: "))mA = float(input("Digite o peso da marca A: "))mB = float(input("Digite o peso da marca B: "))

rA = pA / mArB = 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 22 – Definir entradas e saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Saídas

Grandeza Unidade de medida Faixa de valores

Entradas Velocidade km/h ≥ 0

Saídas Multa R$ ≥ 0

Problema 23 – Projetar o algoritmo

V

F

início

vel

fim

multa ← 200 + 3 * (vel – lim)

vel > lim

multa ← 0

lim ← 60

multa

Problema 24 – Codificar em Python

# Entrada de dados e definicao de constantesvel = float(input("Informe a velocidade: "))lim = 60 # Limite de velocidade

# Calculo do valor da multaif (vel > lim): multa = 200 + 3 * (vel – lim) else: multa = 0

# Exibicao de resultadosprint(multa)

005

Problema 25 – Testar o script resultante

40km/h

60km/h

80km/h

Problema 3

A equação de uma circunferência de raio R é .

Escreva um algoritmo que, dado um ponto P qualquer, verifique se ele se encontra: Na circunferência No interior No exterior

y

x

R

Problema 32 – Definir entradas e saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Raio --- >= 0

Coordenada X de P ---

Coordenada Y de P ---

Saídas Localização de P --- {interior, exterior, na circunferência}

Problema 33 – Projetar algoritmo

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

X**2 + Y**2 < R**2Na

circunferência

V

P é interno

F

P é externo

V F

Problema 33 – Projetar algoritmo

V

F

fim

Externo

C2

Interno

V

F

início

R, X, Y

Na circunferência

C1

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

X**2 + Y**2 < R**2C2

006

Problema 34 – Codificar em Python

# Entrada de dadosr = float(input("Digite raio: "))x = float(input("Digite coord. X do ponto: "))y = 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.")

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 42 – Definir entradas e saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Coeficiente a ---

Coeficiente b ---

Coeficiente c ---

SaídasRaiz , se houver ---

Raiz , se houver ---

Problema 43 – Projetar algoritmo

V

F

início

a, b, c

fim

Não tem raiz real

delta < 0

r ← - b/(2*a)

delta ← b**2 – 4*a*c

V

delta == 0F

r

r1 ← (- b + delta)/(2*a)r2 ← (- b - delta)/(2*a)

r1, r2

Problema 44 – Codificar em Python

# Entrada de dadosa = float(input("Digite a: "))b = float(input("Digite b: "))c = 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ça-ní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 52 – Definir entradas e saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Saídas

Grandeza Unidade de medida Faixa de valores

Entradas

N1 --- [1,10]

N2 --- [1,10]

N3 --- [1,10]

Saídas Sucesso no jogo --- {Perdeu, Ganhou}

Problema 53 – Projetar algoritmo

N1 == N2

N2 == N3perdeu

F

perdeu

V

ganhou

F V

Problema 53 – Projetar algoritmo

V

F

F

início

Gerar N1, N2, N3

Ganhou!

fim

N1 == N2

Perdeu!Perdeu!

N2 == N3

V

Como gerar números aleatórios?

?

Problema 54 – Codificar em Python

# Biblioteca de nos. aleatoriosimport random

# Gera nos. aleatorios entre 1 e 10n1 = 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 módulos.

Uso:<módulo>.<função>

Conteúdo

Estruturas Condicionais Simples

Estruturas Condicionais Compostas

Como montar uma condição?

Estruturas Condicionais Encadeadas

Tipos de operadores

Resultado(saída)

Operandos(entradas)

Tipo.

Operadores

Aritmético numérico numérico

Relacional numérico lógico

Lógico lógico lógico

Precedência entre operadores

Operador Significado Precedência

() Grupos entre parênteses +

** Potenciação

- Negação

* / % // Multiplicação, divisão real, resto, divisão inteira

+ - 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)(salario > 1000 and

idade > 18)

x resultado1020304050

VV

FVV

salario idade resultado900 18

1000 191100 171200 22

FF

FV

Exemplos

(m – 4 > m / 2)(num % 2 != 0 and contador < 50)

m resultado28

30FF

V

num contador resultado1231 511232 501233 491234 48

FF

FV

Atenção:: Compare variáveis do mesmo tipo

No exemplo acima, a variável x é do tipo inteiro, mas a expressão "4" representa um caractere, e não um número.

x = 4

if ("4" == x): print("igual")else: print("diferente")

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)

print(u + (v + w))

u + (v + w) == (u + v) + w

9.51111111

9.511111110448837

False

010

Estabeleça um nível mínimo de precisão

Alternativa 1 Alternativa 2

u = 11111113v = -11111111w = 7.51111111x = (u + v) + wy = u + (v + w)

x == y

round(x,6) == round(y,6)

False

True

u = 11111113v = -11111111w = 7.51111111x = (u + v) + wy = u + (v + w)

x == y

abs(x-y) < 0.0000001

False

True

011

Funções round e abs

Arredonda um número x em n casas decimais.

Determina o módulo de um número real z, ou seja, sua distância até o zero.

round(x, n) abs(z)

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 61 – 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.

Triângulo cujos os lados têm

comprimentos iguais.

Equilátero

Triângulo que tem dois lados

com comprimentos

iguais.

Isósceles

Triângulo que tem os três lados com

comprimentos diferentes.

Escaleno

Problema 62 – Definir entradas e saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Saídas

Grandeza Unidade de medida Faixa de valores

Entradas

X m > 0

Y m > 0

Z m > 0

Saídas mensagem ---“Não é triângulo”,

“Triângulo equilátero”,“Triângulo isósceles”,“Triângulo escaleno”

Problema 63 – Projetar algoritmo

V

F

fim

C2

Equilátero

V

F

início

X, Y, Z

Não é triângulo

C1

(X > Y + Z) OU (Y > Z + X) OU (Z > X + Y)C1

(X == Y) E (Y == Z)C2

(X == Y) OU (Y == Z) OU (Z == X)C3

V

F

Escaleno

C3

Isósceles

Problema 64 – Codificar em Python

# Entrada de dadosa = float(input("Digite o lado a: "))b = float(input("Digite o lado b: "))c = 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 71 – 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

BC

N1N2

N3

Problema 72 – Definir entradas e saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Saídas

Grandeza Unidade de medida Faixa de valores

Entradas A, B, C --- Inteiros, qualquer ordem

Saídas N1, N2, N3 --- Inteiros, ordem decrescente

Problema 73 – Projetar algoritmo

A > B

C > N1

N1 ← AN2 ← B

V F

N1 ← BN2 ← A

V F

N3 ← N2N2 ← N1N1 ← C

C > N2

N3 ← N2N2 ← C

V F

N3 ← C

Problema 73 – Projetar algoritmo

V

F

fim

C > N1

N3 ← N2N2 ← N1N1 ← C

N1, N2, N3

V

F

início

A, B, C

N1 ← AN2 ← B

A > BV

F

N3 ← C

C > N2

N3 ← N2N2 ← C

N1 ← BN2 ← A

1

1

Problema 74 – Codificar em Python

# Entrada de dadosa = float(input("Digite o numero a: "))b = float(input("Digite o numero b: "))c = float(input("Digite o numero c: "))

if (a > b): n1 = a n2 = belse: n1 = b n2 = a

if (c > n1): n3 = n2 n2 = n1 n1 = celse: 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 82 – Definir entradas e saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Saídas

Grandeza Unidade de medida Faixa de valores

EntradasHorário 1 (hh1, mm1) horas, minutos [0; 23], [0; 59]

Horário 1 (hh2, mm2) horas, minutos [0; 23], [0; 59]

Saídas Diferença de tempo(Δh, Δm) horas, minutos [0; 23], [0; 59]

Problema 83 – Projetar algoritmo

mm2 ≥ mm1 mm2 < mm1

Caso 1 Caso 2

Início: 9h 17minFim: 15h 43min

Δm = 43 – 17 = 26minΔh = 15 – 9 = 6h

Início: 9h 43minFim: 15h 17min

Δm = 17 – 43 = 34min (-1h)Δh = 15 – 9 – 1 = 5h

Problema 83 – Projetar algoritmo

dh = hh2 – hh1

fim

V

F

início

hh1, mm1hh2, mm2

mm2 >= mm1

dh = hh2 – hh1 – 1

dm = (mm2 – mm1) % 60

dh, dm

Problema 84 – Codificar em Python

# Entrada de dadoshh1 = int(input("Hora inicial: "))mm1 = int(input("Minuto inicial: "))hh2 = int(input("Hora final: "))mm2 = int(input("Minuto final: "))

# Diferenca de minutosdm = (mm2 – mm1) % 60

# Diferenca de horasif (mm2 >= mm1): dh = hh2 – hh1else: dh = hh2 – hh1 – 1

print(dh, dm)

014

Problema 9

Duas pessoas jogam pedra, papel, tesoura. Como determinar quem ganhou?

Problema 92 – Definir entradas e saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Saídas

Grandeza Unidade de medida Faixa de valores

EntradasMão do J1 --- {Pedra, Papel, Tesoura}

Mão do J2 --- {Pedra, Papel, Tesoura}

Saídas Vencedor --- {J1, J2}

Problema 93 – 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 93 – Projetar algoritmo – versão 1

V

F

Empate

fim

Jogador 2 ganhou

C1

Jogador 1 ganhou

V

F

início

Sortear J1, J2

J1 == J2

(J1 == Pedra E J2 == Tesoura) OU(J1 == Papel E J2 == Pedra) OU(J1 == Tesoura E J2 == Papel)

C1

Como fazer o sorteio?

?

Problema 94 – Codificar em Python – sorteio

# Sorteio do jogo "Pedra, Papel, Tesoura"# Pedra = 0# Papel = 1# Tesoura = 2import 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 94 – 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

02

1

02

1

02

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

021

201

120

Ganhou quem tirou o número uma unidade maior

Ganhou quem tirou o número uma unidade maior, se pensarmos como em um relógio de 3 posições

2 – 1 = 1

2 – 0 = 2

1 – 0 = 1

1 – 2 = -1

0 – 2 = -2

0 – 1 = -1

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

02

(2 – 1) % 3 = 1

(2 – 0) % 3 = 2

1

02

1

02

(1 – 0) % 3 = 1

(1 – 2) % 3 = 2

(0 – 2) % 3 = 1

(0 – 1) % 3 = 2

Aritmética circular (ou modular)

0

12[0 – 2] = -2

0

12

0

12[0 – 1] = -1

0

12

0

12[0 – 0] = 0

0

12

(0 – 2) % 3 = 1

(0 – 1) % 3 = 2

(0 – 0) % 3 = 0

Uma casa para trás

Duas casas para trás

Zero casas para trás

Problema 93 – Projetar algoritmo – versão 2

V

F

Empate

fim

Jogador 2 ganhou

(J1-J2)%3 == 1

Jogador 1 ganhou

V

F

início

Sortear J1, J2

J1 == J2

Teste esta condição no Shell do Python, para todas as possibilidades de J1 e J2

Problema 94 – Codificar em Python – versão 2

# Sorteio do jogo "Pedra, Papel, Tesoura"# Pedra = 1# Papel = 2# Tesoura = 3import 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

• Calcula exexp(x)

• Logaritmo natural de x (base e)log(x)

• Logaritmo de x na base 10log10(x)

• Raiz quadrada de xsqrt(x)

• Valor da constante PiPi

• Valor da constante de Eulere

Módulo math:: Funções trigonométricas

• Calcula o seno de x (em radianos)sin(x)• Calcula o cosseno de x (em radianos)cos(x)• Calcula a tangente de x (em radianos)tan(x)• Calcula o arco-seno de xasin(x)• Calcula o arco-cosseno de xacos(x)• Calcula o arco-tangente de xatan(x)

Módulo math:: Funções de arredondamento

• Arredonda x para o inteiro mais próximo em direção a mais infinitoceil(x)

• Arredonda x para o inteiro mais próximo em direção a menos infinito

floor(x)

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 e o ângulo entre o cano do canhão e o solo. Considere .

𝑆=𝑣02

𝑔sen(2𝜃)

Problema 102 – Definir entradas e saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Saídas

Grandeza Unidade de medida Faixa de valores

EntradasVelocidade inicial m/s > 0

Ângulo com solo graus

Saídas Alcance m > 0

Problema 103 – Projetar algoritmo

fim

F

V

início

v0, theta

Dados inválidos

C1

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

s = (v0**2 / g) * sen(2 * theta)

g = 9.81

s

Problema 104 – Codificar em Python

017

# Entrada de dados e definicao de constantesv0 = float(input("Velocidade inicial: "))theta_g = float(input("Angulo: "))g = 9.81

# Importar modulo matematicoimport 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.")

Problema 11

Uma quantia inicial é aplicada a uma taxa de juros. O saldo desse investimento após meses é dado por:

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 112 – Definir entradas e saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Saídas

Grandeza Unidade de medida Faixa de valores

Entradas Taxa de juros (t) --- [0; 1]

Saídas m (tempo) anos; meses [0, +∞[; [0, 11]

Problema 113 – 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 113 – 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 113 – Projetar algoritmo

fim

F

V

início

t

Dados inválidos

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

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

m % 12

m // 12

Problema 114 – Codificar em Python

# Entrada de dadost = 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")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

Δ<0F

V

Sem solução

Calcular r1

Δ=0V

F

fim

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)

Problema 12

Escrever um script em Python que leia um ângulo entre 0 e 360° e informe o ponto cardeal correspondente.

Problema 122 – Definir entradas e saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Saídas

Grandeza Unidade de medida Faixa de valores

Entradas Ângulo graus

Saídas Ponto Cardeal --- {N, S, L, O}

Problema 123 – Projetar algoritmo

F

F

F

F

V

V

V

V

início

ang

fim

ang == 0 orang == 360

Norte

ang == 180

ang == 90

Sul

Leste

Desconhecido

ang == 270 Oeste

xxx

Problema 124 – Codificar em Python

# Entrada de dadosang = 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")

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 132 – Definir entradas e saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Saídas

Grandeza Unidade de medida Faixa de valores

Entradas Ano ---

Saídas Mensagem --- {bissexto, não bissexto}

Problema 133 – Projetar algoritmo – versão 1

ano % 400 == 0

ano % 100 == 0Bissexto

V

Não bissexto

F

V F

ano % 4 == 0

Bissexto Não bissexto

V F

Problema 133 – Projetar algoritmo – versão 1

V

F

fim

C2

Não bissexto

V

F

início

ano

Bissexto

C1

ano % 400 == 0C1

ano % 100 == 0C2

ano % 4 == 0C3

V

F

Não bissexto

C3

Bissexto

Problema 134 – Codificar em Python – versão 1

xxx

# Entrada de dadosano = int(input("Digite o ano: "))

# Verifica se ano eh bissextoif (ano % 400 == 0): print("Bissexto")elif (ano % 100 == 0): print("Nao Bissexto")elif (ano % 4 == 0): print("Bissexto")else: print("Nao Bissexto")

Problema 133 – Projetar algoritmo – versão 2

ano % 400 == 0

ano % 100 == 0Bissexto

V

Não bissexto

F

V F

ano % 4 == 0

Bissexto Não bissexto

V F

Bissexto: ano % 400 == 0

(ano % 100 ≠ 0) E (ano % 4 == 0)

OU

Problema 133 – Projetar algoritmo – versão 2

fim

Não bissexto

V F

início

ano

Bissexto

C1

(ano % 400 == 0)OU

((ano % 100 ≠ 0) E (ano % 4 == 0))

C1

Problema 134 – Codificar em Python – versão 2

xxx

# Entrada de dadosano = int(input("Digite o ano: "))

# Verifica se ano eh bissextoif ((ano%400 == 0) or ((ano%100 != 0) and (ano%4 == 0))): print("Bissexto")else: print("Nao Bissexto")

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 142 – Definir entradas e saídas

Grandeza Unidade de medida Faixa de valores

Entradas

Saídas

Grandeza Unidade de medida Faixa de valores

Entradas Renda R$ ≥ 0

Saídas Imposto R$ ≥ 0

Problema 143 – 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íquotaAté R$ 1.499,15 IsentoDe 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 143 – Projetar algoritmo

Para simplificar o desenho do fluxograma, vamos adotar as seguintes convenções:

Faixa de renda mensal ConstanteR$ 1.499,15 V1R$ 2.246,75 V2R$ 2.995,70 V3R$ 3.743,19 V4

Problema 143 – Projetar algoritmo – versão 1

início

R

R > V1 V

imp ← 0,075*(R-V1)

FR > V2 R > V3

F F

V VR > V4F

V

imp ← 0

imp ← 0,075*(V2-V1) +0,15*(R-V2)

imp ← 0,075*(V2-V1) +0,15*(V3-V2) +

0,225*(R-V3)

imp ← 0,075*(V2-V1) +0,15*(V3-V2) +

0,225*(V4-V3)+0,275*(R-V4)

fim

imp

Versão usada na aula anterior

V

Problema 143 – Projetar algoritmo – versão 2

início

R

R <= V1 F

imp ← 0,075*(R-V1)

R <= V2 R <= V3V V

F FR <= V4V

F

imp ← 0

imp ← 0,075*(V2-V1) +0,15*(R-V2)

imp ← 0,075*(V2-V1) +0,15*(V3-V2) +

0,225*(R-V3)

imp ← 0,075*(V2-V1) +0,15*(V3-V2) +

0,225*(V4-V3)+0,275*(R-V4)

fim

imp

Facilita uso do elif

Problema 144 – Codificar em Python

xxx

# Entrada de dados e definicao de constantesr = float(input("Digite sua renda: "))v1 = 1499.15v2 = 2246.75v3 = 2995.70v4 = 3743.19

if (r <= v1): imp = 0elif (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:: Revisão

Estruturas Condicionais

Simples(if)

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 problem-solving approach. John Wiley & Sons, 2012.

Dúvidas?

top related