IEC037
Introdução à Programação de Computadores
Aula 06 – Operadores Lógicos
Turma: Matemática
Professor: André Luiz da Costa Carvalho
E-mail: [email protected]
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
Início
1
Identificar o problema
2
Definir as entradas e as
saídas
Decompor
3
Projetar o algoritmo
4
Converter o algoritmo em
linguagem de programação
5
Testar solução
Fim
Refinar
passo a passo
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
V
F
J1 > J3
V
J1
ganhou
J2 > J3
F
J3
ganhou
V
J2
ganhou
F
J3
ganhou
De volta ao Problema Inicial
:: Árvore de decisão parcial
Como saber se houve empate?
J1 == J2
V
F
J3 > J1
F
Empate
J2 == J3
V
V
J3
ganhou
F
J1 > J2
F
Empate
J1 == J3
V
V
J1
ganhou
F
J2 > J1
F
Empate
Árvore
simplificada
V
J2
ganhou
De volta ao Problema Inicial
:: Árvore de decisão completa
J1 == J2
V
F
J3 > J1
F
Empate
V
V
J3
ganhou
J2 == J3
J1 > J2
F
Empate
V
V
J1
ganhou
F
J1 == J3
J2 > J1
F
Empate
F
V
J2
ganhou
F
J1 > J2
J1 > J3
F
V
J2 > J3
V
F
V
J1
J3
J2
J3
ganhou ganhou ganhou ganhou
De volta ao Problema Inicial
:: Testar Solução
J1 == J2
V
F
J3 > J1
F
V
V
Empate
J3
ganhou
J2 == J3
J1 > J2
F
Empate
V
V
J1
ganhou
J1 == J3
J2 > J1
F
Empate
J1 = 1, J2 = 2, J3 = 3
J1 = 6, J2 = 5, J3 = 4
J1 = 6, J2 = 5, J3 = 5
J1 = 5, J2 = 5, J3 = 5
J1 = 4, J2 = 5, J3 = 5
F
F
V
J2
ganhou
F
J1 > J2
J1 > J3
F
V
J2 > J3
V
F
V
J1
J3
J2
J3
ganhou ganhou ganhou ganhou
Problema 1


Duas pessoas jogam pedra, papel, tesoura.
Como determinar quem ganhou?
Tipos de operadores
Aritméticos
Operadores
Relacionais
Lógicos
Comparando Operadores
:: Entrada e saída
Operadores
Aritméticos
número
Operando1
número
Operador
aritmético
Resultado
Operadores
Relacionais
Operadores
Lógicos
número
Operando1
número
número
Operador
relacional
Operando2
Resultado
Verdadeiro/falso
Verdadeiro/falso
Operando1
Operando2
Verdadeiro/falso
Operador
lógico
Operando2
Resultado
Verdadeiro/falso
Operadores Lógicos

Operadores lógicos (ou booleanos) são utilizados
para a efetuar avaliações entre valores lógicos
(Verdadeiro ou Falso).
Possui um
Operador
Operação
Exemplos
NÃO
Negação
NÃO (COR == “azul”)
E
OU
Conjunção (ladoA == ladoB) E (ladoB == ladoC)
Disjunção
(ladoA == ladoB) OU (ladoB == ladoC)
OU (ladoA == ladoC)
único
operando.
Verifica se
triângulo é
equilátero.
Verifica se
triângulo é
isósceles.
Operadores Lógicos
:: Tabelas Verdade

Conjunto de todas as possibilidades de resultados
de cada operador lógico.
A
NÃO (A)
A
B
(A) E (B)
A
B
(A) OU (B)
F
V
F
F
F
F
F
F
V
F
F
V
F
F
V
V
V
F
F
V
F
V
V
V
V
V
V
V
Precedência entre operadores
Prioridade Operador lógico
1
NÃO
2
E
3
Prioridade
1
2
3
4
OU
Operador
Parênteses mais internos
Operadores aritméticos
Operadores relacionais
Operadores lógicos
Da esquerda
para a direita
Juntando todos os operadores
:: Exemplos
Exemplo A
2 < 5 E 15/3 == 5
5

Exemplo B
F OU 20 // (18/3) != (21/3) % 4
6
7

2 < 5 E 5 == 5
V
V
F OU 20 // 6 != 7 % 4
3
3
VEV
V
F OU 3 != 3
F
F OU F
F
Problema 2

Quais valores de X, Y e Z fazem a expressão abaixo
ser verdadeira?
NÃO ( X E Y ) E ( NÃO Y OU Z )

A.
B.
C.
D.
X = F, Y = V, Z = F
X = V, Y = V, Z = F
X = F, Y = F, Z = F
X = V, Y = V, Z = V
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
Início
1
Identificar o problema
2
Definir as entradas e as
saídas
Decompor
3
Projetar o algoritmo
4
Converter o algoritmo em
linguagem de programação
5
Testar solução
Fim
Refinar
passo a passo
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.
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 3
:: 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 3
:: Árvore de decisão
(X < Y + Z) E (Y < Z + X) E (Z < X + Y)
V
F
Não é
triângulo
(X == Y) E (Y == Z)
F
V
Equilátero
(X == Y) OU (Y == Z) OU (Z == X)
V
Isósceles
F
Escaleno
Condições
:: Como NÃO montar (1)
X == Y == Z
Por que não é assim?


(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.
Como deveria ser montada?


Compare os valores dois a
dois.
Junte os resultados de
cada comparação – cujo
resultado é V ou F –
através de operadores
lógicos:

(X == Y) E (Y == Z)
Condições
:: Como NÃO montar (2)
X == Y, Y == Z, Z == X
Por que não é assim?



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).
Como deveria ser montada?


Compare os valores dois a
dois.
Junte os resultados de
cada comparação através
de operadores lógicos:

(X == Y) OU (Y == Z) OU (Z == X)
Problema 3
:: Solução
início
X, Y, Z
C1
F
C1
(X < Y + Z) E (Y < Z + X)
E (Z < X + Y)
C2
(X == Y) E (Y == Z)
C3
(X == Y) OU (Y == Z)
OU (Z == X)
V
C2
V
F
C3
F
V
Não é
triângulo
Equilátero
fim
Isósceles
Escaleno
Problema 3
:: Testar Solução
início
X, Y, Z
C1
F
C1
(X < Y + Z) E (Y < Z + X)
E (Z < X + Y)
C2
(X == Y) E (Y == Z)
C3
(X == Y) OU (Y == Z)
OU (Z == X)
V
C2
V
F
C3
F
V
Não é
triângulo
Equilátero
fim
Isósceles
Escaleno
X = 1, Y = 2, Z = 3
X = 4, Y = 4, Z = 4
X = 3, Y = 2, Z = 3
X = 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
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
fim
Jogador 2
ganhou
Voltando ao Problema 1
:: Testando Solução
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
J1
F
V
Empate
Jogador 1
ganhou
fim
Jogador 2
ganhou
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
B
C
N1
N2
N3
Problema 4
:: 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 4
:: Árvore de decisão
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 4
:: Solução
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 4
:: Teste
início
1
A, B, C
A>B
V
A = 1, B = 2, C = 3
A = 4, B = 4, C = 4
A = 1, B = 4, C = 3
A = 3, B = 5, C = 5
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
Estrutura Condicional de
Seleçã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
áries?
V
Ganhará na
loteria
V
Não saia de
casa hoje!
V
Sorte no amor
F
touro?
F
gêmeos?
F
tente de novo
fim
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í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 5
:: Definir Entradas e Saídas
Entradas
Saídas
Grandeza
Unidade de medida
Faixa de valores
Renda
R$
≥0
Alíquota
%
≥0
Problema 5
:: Solução
início
R
R ≤ 1499,15
V
A=0
1
F
R ≤ 2264,75
V
A = 7,5
F
R ≤ 2995,70
V
A
A = 15
F
fim
R ≤ 3743,19
F
A = 27,5
1
V
A = 22,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
Entradas
Saídas
Grandeza
Unidade de medida
Faixa de valores
Renda
R$
≥0
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 Constante
R$ 1.499,15
V1
R$ 2.246,75
R$ 2.995,70
R$ 3.743,19
V2
V3
V4
Problema 6
:: Solução
início
R
R > V1
F
imp = 0
V
R > V2
F
V
R > V3
V
V
imp = 0,075*(R-V1) F
R > V4
imp = 0,075*(V2-V1) + F
0,15*(R-V3)
imp = 0,075*(V2-V1) +
0,15*(V3-V2) +
0,225*(R-V4)
imp
fim
imp = 0,075*(V2-V1) +
0,15*(V3-V2) +
0,225*(V4-V3)+
0,275*(R-V4)
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
Entradas
Saídas
Saídas
Grandeza
Unidade de medida
Ano
---
Mensagem
---
Faixa de valores
{bissexto,
não bissexto}
Problema 7
:: Árvore de decisão
ano % 400 == 0
F
V
Bissexto
ano % 100 == 0
F
V
Não
bissexto
ano % 4 == 0
V
Bissexto
F
Não
bissexto
Problema 7
:: Soluçã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 7
:: Teste da Solução 1
início
C1 ano % 400 == 0
ano
C2 ano % 100 == 0
C1
V
F
C3
C2
V
ano % 4 == 0
F
C3
F
V
Bissexto
Não
bissexto
fim
Bissexto
Não
bissexto
1900, 2000,
2014, 2016,
2100 e 2400
Problema 7
:: Soluçã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 7
:: Solução 2
início
C1
(ano % 400 == 0)
OU
((ano % 100 ≠ 0) E (ano % 4 == 0))
ano
V
C1
F
Não
bissexto
Bissexto
fim
Problema 7
:: Teste da Solução 2
início
C1
(ano % 400 == 0)
OU
((ano % 100 ≠ 0) E (ano % 4 == 0))
ano
V
C1
F
Não
bissexto
Bissexto
fim
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)
... -8 -7 -6 -5 -4 -3 -2 -1
0
1
2
3
4
5
6
7
8
...
0
1
2
3
4
5
6
7
8
...
0
1
2
3
4
5
6
7
8
...
(num ≥ 0) E (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
(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
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?
Download

File