A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

IEC037 Introdução à Programação de Computadores Aula 09 – Estruturas Condicionais em Python Turma: 03 Professor: Leandro Galvão

Apresentações semelhantes


Apresentação em tema: "IEC037 Introdução à Programação de Computadores Aula 09 – Estruturas Condicionais em Python Turma: 03 Professor: Leandro Galvão"— Transcrição da apresentação:

1 IEC037 Introdução à Programação de Computadores Aula 09 – Estruturas Condicionais em Python Turma: 03 Professor: Leandro Galvão Página: ipc-t03.weebly.com

2 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 algoritmo Decompor Refinar passo a passo Refinar passo a passo Testar o programa resultante

3 Conteúdo Estruturas Condicionais Simples Estruturas Condicionais Compostas Como montar uma condição? Estruturas Condicionais Encadeadas

4 Estruturas de Programação  Qualquer programa de computador pode ser escrito combinando-se os três tipos básicos de estruturas de programação:

5 Estruturas de Programação  Teorema provado em 1966 por Corrado Böhm (1923-) e Giuseppe Jacopini ( ) no artigo: “Flow Diagrams, Turing Machines And Languages With Only Two Formation Rules”.

6 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)

7 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 ?

8 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?

9 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 fim delta < 0 F Não tem raízes reais V delta ← b**2 – 4*a*c

10 Estrutura Condicional Simples :: Em Python a = float(input("Digite a: ")) b = float(input("Digite b: ")) c = float(input("Digite c: ")) 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") 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)

11 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) # 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

12 Conteúdo Estruturas Condicionais Simples Estruturas Condicionais Compostas Como montar uma condição? Estruturas Condicionais Encadeadas

13 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 fim delta < 0 F Não tem raízes reais V delta ← b**2 – 4*a*c Tem raiz real

14 Estruturas Condicionais Compostas :: Em Python if (delta < 0): print("Nao tem raiz real") else: print("Tem raiz real") 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: ")) a = float(input("Digite a: ")) b = float(input("Digite b: ")) c = float(input("Digite c: ")) delta = b**2 – 4 * a * c

15 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") # 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

16 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.

17 Indentação :: Cuidados Indentação VálidaIndentação Inválida if (condição): comando else: comando if (condição): comando else: comando if (condição): comando else: comando if (condição): comando else: comando if (condição): comando else: comando if (condição): comando else: comando

18 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") if (temp > 25): print("Quente") print("Ligue o ventilador") print("Tchau") if (temp > 25): print("Quente") print("Ligue o ventilador") print("Tchau") F V t > 25 Tchau Quente Ligue o F V t > 25 Tchau Quente Ligue o...

19 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

20 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?

21 Problema 1 2 – Definir entradas e saídas GrandezaUnidade de medidaFaixa de valores Entradas Saídas GrandezaUnidade de medidaFaixa de valores Entradas PrecoAR$8.39 PesoAkg0.4 PrecoBR$20.30 PesoBkg1.0 SaídasMarca---{“A”, “B”}

22 Problema 1 3 – Projetar algoritmo F V início PrecoA, PesoA PrecoB, PesoB fim marca ← “A” rA > rB marca ← “B” rA ← PrecoA/PesoA rB ← PrecoB/PesoB marca

23 Problema 1 4 – Codificar em Python # Entrada de dados pA = 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 / mA rB = pB / mB if (rA > rB): marca = "B" else: marca = "A" print("Compre a marca ", marca) # Entrada de dados pA = 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 / 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

24 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.

25 Problema 2 2 – Definir entradas e saídas GrandezaUnidade de medidaFaixa de valores Entradas Saídas GrandezaUnidade de medidaFaixa de valores EntradasVelocidadekm/h≥ 0 SaídasMultaR$≥ 0

26 Problema 2 3 – Projetar o algoritmo V F início vel fim multa ← * (vel – lim) vel > lim multa ← 0 lim ← 60 multa

27 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 do valor da multa if (vel > lim): multa = * (vel – lim) else: multa = 0 # Exibicao de resultados print(multa) # 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 = * (vel – lim) else: multa = 0 # Exibicao de resultados print(multa) 005

28 Problema 2 5 – Testar o script resultante

29 Problema 3 y x R

30 Problema 3 2 – Definir entradas e saídas GrandezaUnidade de medidaFaixa de valores Entradas Saídas GrandezaUnidade de medidaFaixa de valores Entradas Raio--->= 0 Coordenada X de P--- Coordenada Y de P--- SaídasLocalização de P--- {interior, exterior, na circunferência}

31 Problema 3 3 – Projetar algoritmo X**2 + Y**2 == R**2 X**2 + Y**2 < R**2 Na circunferência V P é interno F P é externo V F

32 Problema 3 3 – Projetar algoritmo V F fim Externo C2 Interno V F início R, X, Y Na circunferência C1 X**2 + Y**2 == R**2 C1 X**2 + Y**2 < R**2 C2

33 006 Problema 3 4 – Codificar em Python # Entrada de dados r = 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.") # Entrada de dados r = 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.")

34 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.

35 Problema 4 2 – Definir entradas e saídas GrandezaUnidade de medidaFaixa de valores Entradas Saídas GrandezaUnidade de medidaFaixa de valores Entradas Coeficiente a--- Coeficiente b--- Coeficiente c--- Saídas Raiz, se houver--- Raiz, se houver---

36 Problema 4 3 – 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 == 0 F r r1 ← (- b +  delta)/(2*a) r2 ← (- b -  delta)/(2*a) r1, r2

37 Problema 4 4 – Codificar em Python # Entrada de dados a = 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) # Entrada de dados a = 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

38 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.

39 Problema 5 2 – Definir entradas e saídas GrandezaUnidade de medidaFaixa de valores Entradas Saídas GrandezaUnidade de medidaFaixa de valores Entradas N1---[1,10] N2---[1,10] N3---[1,10] SaídasSucesso no jogo---{Perdeu, Ganhou}

40 Problema 5 3 – Projetar algoritmo N1 == N2 N2 == N3 perdeu F V ganhou F V

41 Problema 5 3 – Projetar algoritmo V F F início Gerar N1, N2, N3 Ganhou! fim N1 == N2 Perdeu! N2 == N3 V Como gerar números aleatórios?

42 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") # 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

43 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:.

44 Conteúdo Estruturas Condicionais Simples Estruturas Condicionais Compostas Como montar uma condição? Estruturas Condicionais Encadeadas

45 Tipos de operadores Resultado (saída) Operandos (entradas) Tipo. OperadoresAritméticonumérico RelacionalnuméricológicoLógicológico

46 Precedência entre operadores OperadorSignificadoPrecedê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–

47 Exemplos (x = 40) (salario > 1000 and idade > 18) x resultado V V F V V salarioidade resultado F F F V

48 Exemplos (m – 4 > m / 2) (num % 2 != 0 and contador < 50) m resultado F F V numcontador resultado F F F V

49 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") x = 4 if ("4" == x): print("igual") else: print("diferente") 009

50 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 = v = w = print((u + v) + w) print(u + (v + w)) u + (v + w) == (u + v) + w u = v = w = print((u + v) + w) print(u + (v + w)) u + (v + w) == (u + v) + w False 010

51 Estabeleça um nível mínimo de precisão Alternativa 1Alternativa 2 u = v = w = x = (u + v) + w y = u + (v + w) x == y round(x,6) == round(y,6) u = v = w = x = (u + v) + w y = u + (v + w) x == y round(x,6) == round(y,6) False True u = v = w = x = (u + v) + w y = u + (v + w) x == y abs(x-y) < u = v = w = x = (u + v) + w y = u + (v + w) x == y abs(x-y) < False True 011

52 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)

53 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.

54 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. 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

55 Problema 6 2 – Definir entradas e saídas GrandezaUnidade de medidaFaixa de valores Entradas Saídas GrandezaUnidade de medidaFaixa de valores Entradas Xm> 0 Ym Zm Saídasmensagem--- “Não é triângulo”, “Triângulo equilátero”, “Triângulo isósceles”, “Triângulo escaleno”

56 Problema 6 3 – 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

57 Problema 6 4 – Codificar em Python # Entrada de dados a = 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") # Entrada de dados a = 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

58 Problema 7  Sejam A, B, C três números inteiros quaisquer.  Escreva um fluxograma para arrumá-los em ordem decrescente.

59 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

60 Problema 7 2 – Definir entradas e saídas GrandezaUnidade de medidaFaixa de valores Entradas Saídas GrandezaUnidade de medidaFaixa de valores EntradasA, B, C--- Inteiros, qualquer ordem SaídasN1, N2, N3--- Inteiros, ordem decrescente

61 Problema 7 3 – Projetar algoritmo A > B C > N1 N1 ← A N2 ← B VF N1 ← B N2 ← A VF N3 ← N2 N2 ← N1 N1 ← C C > N2 N3 ← N2 N2 ← C VF N3 ← C

62 Problema 7 3 – Projetar algoritmo V F fim C > N1 N3 ← N2 N2 ← N1 N1 ← C N1, N2, N3 V F início A, B, C N1 ← A N2 ← B A > B V F N3 ← C C > N2 N3 ← N2 N2 ← C N1 ← B N2 ← A 1 1

63 Problema 7 4 – Codificar em Python # Entrada de dados a = 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 = 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) # Entrada de dados a = 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 = 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

64 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?

65 Problema 8 2 – Definir entradas e saídas GrandezaUnidade de medidaFaixa de valores Entradas Saídas GrandezaUnidade de medidaFaixa de valores Entradas Horá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]

66 Problema 8 3 – Projetar algoritmo mm2 ≥ mm1mm2 < mm1 Caso 1Caso 2 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

67 Problema 8 3 – Projetar algoritmo dh = hh2 – hh1 fim V F início hh1, mm1 hh2, mm2 mm2 >= mm1 dh = hh2 – hh1 – 1 dm = (mm2 – mm1) % 60 dh, dm

68 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) # 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

69 Problema 9  Duas pessoas jogam pedra, papel, tesoura.  Como determinar quem ganhou?

70 Problema 9 2 – Definir entradas e saídas GrandezaUnidade de medidaFaixa de valores Entradas Saídas GrandezaUnidade de medidaFaixa de valores Entradas Mão do J1---{Pedra, Papel, Tesoura} Mão do J2---{Pedra, Papel, Tesoura} SaídasVencedor---{J1, J2}

71 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

72 Problema 9 3 – 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?

73 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) # 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)

74 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.") 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

75 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?

76 Problema 9 :: Repensando o Jogo

77  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

78 Problema 9 :: Repensando o Jogo 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

79 Operador %  O operador % tem uma propriedade interessante: a % ba % b Se a é positivo Resultado: resto da divisão Se a é negativo Resultado: determinado por aritmética circular, como em um relógio.

80 Problema 9 :: Repensando o Jogo 1 02 (2 – 1) % 3 = 1 (2 – 0) % 3 = (1 – 0) % 3 = 1 (1 – 2) % 3 = 2 (0 – 2) % 3 = 1 (0 – 1) % 3 = 2

81 Aritmética circular (ou modular) 0 12 [0 – 2] = [0 – 1] = [0 – 0] = (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

82 Problema 9 3 – 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

83 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.") # 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

84 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.

85 Módulo math :: Funções matemáticas e constantes Calcula e x exp(x) Logaritmo natural de x (base e) log(x) Logaritmo de x na base 10 log10(x) Raiz quadrada de x sqrt(x) Valor da constante Pi Pi Valor da constante de Euler e

86 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 x asin(x) Calcula o arco-cosseno de x acos(x) Calcula o arco-tangente de x atan(x)

87 Módulo math :: Funções de arredondamento Arredonda x para o inteiro mais próximo em direção a mais infinito ceil(x) Arredonda x para o inteiro mais próximo em direção a menos infinito floor(x)

88 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.

89 Problema 10

90 Problema 10 2 – Definir entradas e saídas GrandezaUnidade de medidaFaixa de valores Entradas Saídas GrandezaUnidade de medidaFaixa de valores Entradas Velocidade inicialm/s> 0 Ângulo com solograus SaídasAlcancem> 0

91 Problema 10 3 – 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

92 Problema 10 4 – Codificar em Python 017 # Entrada de dados e definicao de constantes v0 = float(input("Velocidade inicial: ")) theta_g = float(input("Angulo: ")) g = 9.81 # Importar modulo matematico import math if (v0 >= 0) and (theta_g > 0) and (theta_g < 90): theta_rad = theta_g * math.pi / s = (v0**2 / g) * math.sin(2 * theta_rad) print(round(s, 3)) else: print("Dados invalidos.") # Entrada de dados e definicao de constantes v0 = float(input("Velocidade inicial: ")) theta_g = float(input("Angulo: ")) g = 9.81 # Importar modulo matematico import math if (v0 >= 0) and (theta_g > 0) and (theta_g < 90): theta_rad = theta_g * math.pi / s = (v0**2 / g) * math.sin(2 * theta_rad) print(round(s, 3)) else: print("Dados invalidos.")

93 Problema 11

94 Problema 11 2 – Definir entradas e saídas GrandezaUnidade de medidaFaixa de valores Entradas Saídas GrandezaUnidade de medidaFaixa de valores EntradasTaxa de juros (t)---[0; 1] Saídasm (tempo)anos; meses[0, +∞[; [0, 11]

95 Problema 11 3 – Projetar algoritmo

96  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 )

97 Problema 11 3 – 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

98 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") # 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

99 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 import * Pode ser o math, o random ou outro que você necessitar.

100 Conteúdo Estruturas Condicionais Simples Estruturas Condicionais Compostas Como montar uma condição? Estruturas Condicionais Encadeadas

101  Estruturas condicionais encadeadas (ou aninhadas) são estruturas condicionais dentro de outras estruturas condicionais.  Quando um problema exige um longo encadeamento de if s e else s, 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.

102 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) 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 r 1 e r 2 Δ<0 F V Sem solução Calcular r 1 Δ=0 V 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) 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)

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

104 Problema 12 2 – Definir entradas e saídas GrandezaUnidade de medidaFaixa de valores Entradas Saídas GrandezaUnidade de medidaFaixa de valores EntradasÂngulograus SaídasPonto Cardeal---{N, S, L, O}

105 Problema 12 3 – Projetar algoritmo F F F F V V V V início ang fim ang == 0 or ang == 360 Norte ang == 180 ang == 90 Sul Leste Desconhecido ang == 270 Oeste

106 xxx 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") # 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")

107 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.

108 Problema 13 2 – Definir entradas e saídas GrandezaUnidade de medidaFaixa de valores Entradas Saídas GrandezaUnidade de medidaFaixa de valores EntradasAno--- SaídasMensagem--- {bissexto, não bissexto}

109 Problema 13 3 – Projetar algoritmo – versão 1 ano % 400 == 0 ano % 100 == 0 Bissexto V Não bissexto F V F ano % 4 == 0 Bissexto Não bissexto V F

110 Problema 13 3 – Projetar algoritmo – versão 1 V F fim C2 Não bissexto V F início ano Bissexto C1 ano % 400 == 0 C1 ano % 100 == 0 C2 ano % 4 == 0 C3 V F Não bissexto C3 Bissexto

111 Problema 13 4 – Codificar em Python – versão 1 xxx # 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") # 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")

113 Problema 13 3 – Projetar algoritmo – versão 2 fim Não bissexto VF início ano Bissexto C1 (ano % 400 == 0) OU ((ano % 100 ≠ 0) E (ano % 4 == 0)) C1

114 Problema 13 4 – Codificar em Python – versão 2 xxx # 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") # 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")

115 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.

116 Problema 14 2 – Definir entradas e saídas GrandezaUnidade de medidaFaixa de valores Entradas Saídas GrandezaUnidade de medidaFaixa de valores EntradasRendaR$≥ 0 SaídasImpostoR$≥ 0

117 Problema 14 3 – Projetar algoritmo  O que é o cálculo progressivo?  Uma pessoa que recebe R$ 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$ pagará: 7,5% de (2246,75 – 1499,15) 15% de (2500 – 2246,75)  E assim por diante... Faixa de renda mensalAlíquota Até R$ 1.499,15Isento De R$ 1.499,16 até R$ 2.246,757,5% De R$ 2.246,76 até R$ 2.995,7015% De R$ 2.995,71 até R$ 3.743,1922,5% acima de R$ 3.743,1927,5%

118 Problema 14 3 – Projetar algoritmo  Para simplificar o desenho do fluxograma, vamos adotar as seguintes convenções: Faixa de renda mensalConstante R$ 1.499,15V1 R$ 2.246,75V2 R$ 2.995,70V3 R$ 3.743,19V4

119 Problema 14 3 – Projetar algoritmo – versão 1 início R R > V1 V imp ← 0,075*(R-V1) F R > V2R > V3 FF VV R > V4 F 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

120 V Problema 14 3 – Projetar algoritmo – versão 2 início R R <= V1 F imp ← 0,075*(R-V1) R <= V2R <= V3 VV FF R <= V4 V 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

121 Problema 14 4 – Codificar em Python xxx # Entrada de dados e definicao de constantes r = float(input("Digite sua renda: ")) v1 = v2 = v3 = v4 = if (r <= v1): imp = 0 elif (r <= v2): imp = 0.075*(r-v1) elif (r <= v3): imp = 0.075*(v2-v1) *(r-v2) elif (r <= v4): imp = 0.075*(v2-v1) *(v3-v2) *(r-v3) else: imp = 0.075*(v2-v1) *(v3-v2) *(v4-v3) *(r-v4) print(imp) # Entrada de dados e definicao de constantes r = float(input("Digite sua renda: ")) v1 = v2 = v3 = v4 = if (r <= v1): imp = 0 elif (r <= v2): imp = 0.075*(r-v1) elif (r <= v3): imp = 0.075*(v2-v1) *(r-v2) elif (r <= v4): imp = 0.075*(v2-v1) *(v3-v2) *(r-v3) else: imp = 0.075*(v2-v1) *(v3-v2) *(v4-v3) *(r-v4) print(imp)

122 Estruturas Condicionais :: Revisão Estruturas Condicionais Simples ( if ) Composta ( if... else ) Múltipla escolha ( if... elif... else )

123 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:  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.

124 Dúvidas?


Carregar ppt "IEC037 Introdução à Programação de Computadores Aula 09 – Estruturas Condicionais em Python Turma: 03 Professor: Leandro Galvão"

Apresentações semelhantes


Anúncios Google