Quando se está aprendendo programação, em algum momento você irá se deparar com as tais “Tabelas-Verdade”, onde são mostrados os resultados das operações lógicas (álgebra booleana) not
, and
, or
e xor
:
A | not A |
---|---|
Falso | Verdade |
Verdade | Falso |
not
(não
)A | B | A and B |
---|---|---|
Falso | Falso | Falso |
Falso | Verdade | Falso |
Verdade | Falso | Falso |
Verdade | Verdade | Verdade |
and
(e
)A | B | A or B |
---|---|---|
Falso | Falso | Falso |
Falso | Verdade | Verdade |
Verdade | Falso | Verdade |
Verdade | Verdade | Verdade |
or
(ou
)A | B | A xor B |
---|---|---|
Falso | Falso | Falso |
Falso | Verdade | Verdade |
Verdade | Falso | Verdade |
Verdade | Verdade | Falso |
xor
(ou-exclusivo
)Tirando a operação de negação (not
– não
), que é muito simples, é comum a gente pensar que precisa decorar essas tabelas. Mas, a verdade sobre as tabelas-verdade é que não precisamos decorá-las. O que falta, é a gente entender que os resultados dessas operações são baseados na lógica do nosso dia-a-dia.
Vejamos: normalmente, para passar de ano, você precisar “tirar média” e “ter presença”. Supondo que a média seja 7,0 e que você precisa ter 85% de presença, não é preciso muito esforço para saber que, se sua nota for 5,0, você não passou. Ou, ainda, que se sua presença foi de 50%, você não passou. Será que agora você consegue montar uma tabela que indica que para passar de ano, você precisar “tirar média” AND “ter presença”?
Tirar Média | Ter Presença | Passou de Ano = Tirar Média AND Ter Presença |
---|---|---|
Falso | Falso | Não tirou média e nem tem presença = Não Passou = Falso |
Falso | Verdade | Não tirou média = Não Passou = Falso |
Verdade | Falso | Não tem presença = Não Passou = Falso |
Verdade | Verdade | Tirou média e tem presença = Passou = Verdade |
Interessante, não? Mas, e o caso da operação or
(ou
)? Bom, aí a gente pode imaginar uma escola “diferentona” em que o aluno passa de ano se ele “tira média” ou “tem presença”! Hum, quer dizer que o aluno só precisa frequentar aula para passar? Sim! Ou, ele pode escolher ficar em casa e estudar por conta e “tirar média”. Ou os dois, claro! Vamos montar uma tabela que indica como passar de ano nessa escola, onde você precisar “tirar média” OR “ter presença”?
Tirar Média | Ter Presença | Passou de Ano = Tirar Média OR Ter Presença |
---|---|---|
Falso | Falso | Não tirou média e nem tem presença = Não Passou = Falso |
Falso | Verdade | Tem Presença = Passou = Verdade |
Verdade | Falso | Tirou Média = Passou = Verdade |
Verdade | Verdade | Tirou média e ainda tem presença = Passou = Verdade |
Tá, mas, e o caso da operação xor
(ou-exclusivo
)? Aí, não dá, né? Bom, na verdade, dá! 🙂 Nesse caso, a gente pode imaginar uma escola mais “diferentona” ainda em que o aluno tem que escolher se ele quer “tirar média” ou “tem presença” mas, não os dois! Ou seja, tem que ser exclusivamente um ou outro! Eita! Quer dizer que ele pode escolher só ir na aula e não fazer prova? E, pior (ou melhor), se ele escolher isso, melhor ele nem ir fazer as provas porque vai que passa? É isso mesmo! Você entendeu!!! Vamos montar uma tabela que indica como passar de ano nessa escola “maluca”, onde você precisar “tirar média” OR “ter presença” eXclusivamente?
Tirar Média | Ter Presença | Passou de Ano = Tirar Média XOR Ter Presença |
---|---|---|
Falso | Falso | Não tirou média e nem tem presença = Não Passou = Falso |
Falso | Verdade | Tem Presença = Passou = Verdade |
Verdade | Falso | Tirou Média = Passou = Verdade |
Verdade | Verdade | Tirou média e ainda tem presença, mas não podia, lembra? Ou um ou outro! = Não Passou = Falso |
Espero que você tenha conseguido perceber que não é necessário decorar essas tabelas. Que basta usar a lógica normal, de como pensamos e falamos. E, antes de terminar esse artigo, deixa eu dar uma dica de programação nessa linha:
Vamos imaginar que estamos fazendo um programa justamente para saber se um aluno passou na escola – vamos considerar a escola normal, ok? 😉 – e que temos como entrada a média e a presença dele. E, continuaremos a supor que a média seja 7,0 e que você precisa ter 85% de presença. Dessa forma, é muito comum vermos um iniciante fazer o programa assim (usarei Python aqui, ok?):
media = float(input('Média: '))
presenca = float(input('Presença: '))
if media >= 7 and presenca >= 85:
print('Passou')
else:
print('Não passou')
Para uma lógica simples assim, o if
até que não fica tão complicado. Mas, vamos aproveitar esse fato para demonstrar que podemos separar essas condições em variáveis e tornar o código mais legível:
media = float(input('Média: '))
presenca = float(input('Presença: '))
tem_media = media >= 7
tem_presenca = presenca >= 85
if tem_media and tem_presenca:
print('Passou')
else:
print('Não passou')
Agora, leia novamente o if
. Parece que estamos falando em língua natural: “se tem_media e tem_presenca” então mostre “Passou”.
Vou me permitir ir um pouco além, para fins de demonstração:
media = float(input('Média: '))
presenca = float(input('Presença: '))
tem_media = media >= 7
tem_presenca = presenca >= 85
passou = tem_media and tem_presenca
if passou:
print('Passou')
else:
print('Não passou')
E, caso você precisasse dizer “não passou” você usaria o código not passou
! Bacana, não?
Espero que tenha te ajudado um pouco nessa aventura legal que é aprender programação. E, caso tenha ficado alguma dúvida ou apenas queira deixar uma palavra, por favor, coloque nos comentários!
Um grande abraço!