turma: matemática professor: andré luiz da costa carvalho e-mail: [email protected] iec037...
TRANSCRIPT
Turma: Matemática
Professor: André Luiz da Costa Carvalho
E-mail: [email protected]
IEC037Introdução à Programação de
ComputadoresAula 06 – Operadores Lógicos
Problema Inicial
Três jogadores (A, B, C) lançam dados. Ganha aquele que tirar a face com maior número.
Como determinar quem ganhou? Ou se houve empate?
Processo de resolução de problemas algorítmicos
Fim
Início
1
Definir as entradas e as saídas2
Projetar o algoritmo3
Converter o algoritmo em linguagem de programação4
Testar solução5
Decompor
Refinarpasso a passo
Identificar o problema
Problema Inicial:: Identificar o problema
Existem diversas possibilidades de vitória, empate entre dois jogadores e empate entre os três jogadores a se considerar.
Para não se perder na árvore de decisão, vamos considerar um cenário mais simples, onde os dados lançados pelos jogadores nunca empatam.
Problema Inicial Simplificado:: Árvore de decisão
J1 > J2
J1 > J3
J1 ganhou
J3 ganhou
J2 > J3
J2 ganhou
J3 ganhou
V F
V F V F
De volta ao Problema Inicial:: Árvore de decisão parcial
J1 == J2
J3 > J1
Empate J3 ganhou
J2 == J3
J1 > J2
Empate J1 ganhou
J1 == J3
J2 > J1
Empate J2 ganhou
Árvore simplificada
Como saber se houve empate?
V F
F V
F V
F V
V F
V F
De volta ao Problema Inicial:: Árvore de decisão completa
J1 == J2
J3 > J1
Empate J3 ganhou
J2 == J3
J1 > J2
Empate J1 ganhou
J1 == J3
J2 > J1
Empate J2 ganhou
J1 > J2
J1 > J3
J1 ganhou
J3 ganhou
J2 > J3
J2 ganhou
J3 ganhou
V F
F V
F V
F V
F V F V
V F
V F
F V
De volta ao Problema Inicial:: Testar Solução
J1 = 1, J2 = 2, J3 = 3J1 = 6, J2 = 5, J3 = 4J1 = 6, J2 = 5, J3 = 5J1 = 5, J2 = 5, J3 = 5J1 = 4, J2 = 5, J3 = 5
J1 == J2
J3 > J1
Empate J3 ganhou
J2 == J3
J1 > J2
Empate J1 ganhou
J1 == J3
J2 > J1
Empate J2 ganhou
J1 > J2
J1 > J3
J1 ganhou
J3 ganhou
J2 > J3
J2 ganhou
J3 ganhou
V F
F V
F V
F V
F V F V
V F
V F
F V
Problema 1
Duas pessoas jogam pedra, papel, tesoura. Como determinar quem ganhou?
Tipos de operadores
Operadores
Aritméticos
Relacionais
Lógicos
Comparando Operadores:: Entrada e saída
Resultado
OperadoraritméticoOperando1 Operando2
número número
número
OperadoresAritméticos
Resultado
OperadorrelacionalOperando1 Operando2
número número
Verdadeiro/falso
OperadoresRelacionais
Resultado
OperadorlógicoOperando1 Operando2
Verdadeiro/falso Verdadeiro/falso
Verdadeiro/falso
OperadoresLógicos
Operadores Lógicos
Operadores lógicos (ou booleanos) são utilizados para a efetuar avaliações entre valores lógicos (Verdadeiro ou Falso).
Operador Operação ExemplosNÃO Negação NÃO (COR == “azul”)
E Conjunção (ladoA == ladoB) E (ladoB == ladoC)
OU Disjunção (ladoA == ladoB) OU (ladoB == ladoC) OU (ladoA == ladoC)
Verifica se triângulo é equilátero.
Verifica se triângulo é isósceles.
Possui um único operando.
Operadores Lógicos:: Tabelas Verdade
Conjunto de todas as possibilidades de resultados de cada operador lógico.
A B (A) E (B)F F FF V FV F FV V V
A B (A) OU (B)F F FF V VV F VV V V
A NÃO (A)F VV F
Precedência entre operadores
Prioridade Operador lógico1 NÃO2 E3 OU
Prioridade Operador1 Parênteses mais internos2 Operadores aritméticos3 Operadores relacionais4 Operadores lógicos
Da esquerda para a direita
Juntando todos os operadores:: Exemplos
Exemplo A2 < 5 E 15/3 == 5
Exemplo BF OU 20 // (18/3) != (21/3) % 4
5
2 < 5 E 5 == 5V
V E V
V
V
6 7
F OU 20 // 6 != 7 % 433
F OU 3 != 3F
F OU FF
Problema 2
Quais valores de X, Y e Z fazem a expressão abaixo ser verdadeira?
A. X = F, Y = V, Z = FB. X = V, Y = V, Z = FC. X = F, Y = F, Z = FD. X = V, Y = V, Z = V
NÃO ( X E Y ) E ( NÃO Y OU Z )
Problema 3
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.
Processo de resolução de problemas algorítmicos
Fim
Início
1
Definir as entradas e as saídas2
Projetar o algoritmo3
Converter o algoritmo em linguagem de programação4
Testar solução5
Decompor
Refinarpasso a passo
Identificar o problema
Problema 3:: 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 comprimento 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 3:: 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 3:: Árvore de decisão
(X < Y + Z) E (Y < Z + X) E (Z < X + Y)
(X == Y) E (Y == Z)Não é
triângulo
F
Equilátero
V
V F
(X == Y) OU (Y == Z) OU (Z == X)
Isósceles Escaleno
V F
Condições:: Como NÃO montar (1)
(X == Y) resulta em V/F. A comparação == ocorre
entre dois operando aritméticos, mas o resultado de (X==Y) é lógico, não podendo ser comparado com Z.
Compare os valores dois a dois.
Junte os resultados de cada comparação – cujo resultado é V ou F – através de operadores lógicos:
Por que não é assim? Como deveria ser montada?
X == Y == Z
(X == Y) E (Y == Z)
Condições:: Como NÃO montar (2)
Cada comparação gera um valor lógico.
Mas a condição deve resultar em um único valor lógico.
Diversos valores lógicos são consolidados por operadores lógicos (e não por vírgulas).
Compare os valores dois a dois.
Junte os resultados de cada comparação através de operadores lógicos:
Por que não é assim? Como deveria ser montada?
X == Y, Y == Z, Z == X
(X == Y) OU (Y == Z) OU (Z == X)
Problema 3:: Solução
V
F
fim
C2
Equilátero
F
V
início
X, Y, Z
Não é triângulo
C1
(X < Y + Z) E (Y < Z + X) E (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 3:: Testar Solução
V
F
fim
C2
Equilátero
F
V
início
X, Y, Z
Não é triângulo
C1
(X < Y + Z) E (Y < Z + X) E (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
X = 1, Y = 2, Z = 3X = 4, Y = 4, Z = 4X = 3, Y = 2, Z = 3X = 3, Y = 4, Z = 5
Voltando ao Problema 1
Duas pessoas jogam pedra, papel, tesoura. Como determinar quem ganhou?
Voltando ao Problema 1:: Identificando o problema
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
Voltando ao Problema 1:: Solução Final
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
Voltando ao Problema 1:: Testando Solução
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
J1 J2
Problema 1 pode ficar mais interessante?
Como determinar o vencedor no jogo Pedra, Papel, Tesoura, Lagarto, Spock?
Problema 4
Sejam A, B, C três números inteiros quaisquer. Escreva um fluxograma para arrumá-los em ordem
decrescente.
Problema 4:: 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 4:: 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 4:: Árvore de decisão
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 4:: Solução
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 4:: Teste
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
1A = 1, B = 2, C = 3A = 4, B = 4, C = 4A = 1, B = 4, C = 3A = 3, B = 5, C = 5
Estrutura Condicional deSeleção Múltipla
Utilizada em situações onde há necessidade de se testar uma mesma variável (ou expressão) que pode assumir diversos valores.
Executa ações diferentes para valores (casos) diferentes.
início
ler signo
fim
áries?V Ganhará na
loteriaF
touro?
gêmeos?
Não saia de casa hoje!
Sorte no amor
F
F
V
V
tente de novo
Problema 5
A alíquota de imposto de renda é determinada de acordo com a faixa de renda mensal.
Escreva um algoritmo que determine a alíquota de imposto que uma pessoa deve pagar com base na renda mensal informada.
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 5:: 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 Alíquota % ≥ 0
Problema 5:: Solução
início
R
R ≤ 1499,15 V A = 0F
R ≤ 2264,75
R ≤ 2995,70
A = 7,5
A = 15
F
F
V
V
R ≤ 3743,19 A = 22,5F
Vfim
1
1
A
A = 27,5
Problema 6
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 6:: 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 6:: Projeto do 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 (2264,75 – 1499,15) 15% de (2500 – 2264,75)
E assim por diante...
Problema 6:: Projeto do 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 6:: Solução
início
R
R > V1 V
imp = 0,075*(R-V1)
F R > V2
R > V3F
F
V
VR > V4F
V
imp = 0
imp = 0,075*(V2-V1) +
0,15*(R-V3)imp = 0,075*(V2-V1) +
0,15*(V3-V2) +0,225*(R-V4)
imp = 0,075*(V2-V1) +
0,15*(V3-V2) +0,225*(V4-V3)+
0,275*(R-V4)
fim
imp
Problema 7
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 7:: 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 7:: Árvore de decisão
ano % 400 == 0
ano % 100 == 0Bissexto
V
Não bissexto
F
V F
ano % 4 == 0
Bissexto Não bissexto
V F
Problema 7:: Soluçã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 7:: Teste da Soluçã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
1900, 2000, 2014, 2016, 2100 e 2400
Problema 7:: Soluçã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 7:: Soluçã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 7:: Teste da Soluçã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
1900, 2000, 2014, 2016, 2100 e 2400
Equivalência entre Expressões Booleanas
Na álgebra numérica, existem expressões equivalentes, ou seja, cujo valor é sempre o mesmo:
O mesmo ocorre com expressões booleanas:
𝑥 (𝑦+𝑧)𝑥𝑦+𝑥𝑧
num ≠ 0
NÃO (num == 0)
Equivalência entre Expressões Booleanas
(num ≠ 0) E (num ≠ 6)NÃO (num == 0 OU num == 6)
(num ≥ 0) E (num ≤ 6)(NÃO num < 0) E (NÃO num > 6)NÃO (num < 0 OU num > 6)
(num < 0) OU (num > 6)(NÃO num ≥ 0) E (NÃO num ≤ 6)NÃO (num ≥ 0 OU num ≤ 6)
... -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 ...
... -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 ...
... -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 ...
Referências bibliográficas
Menezes, Nilo Ney Coutinho (2010). Introdução à Programação com Python. Editora Novatec.
Farrer, Harry (2011). Algoritmos Estruturados, 3ª edição. Editora LTC.
Forbellone, A. L. V.; Eberspächer, H. F. (2006) Lógica de Programação, 3ª edição. Pearson.
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.
Dúvidas?