Lógica matemática, tabela verdade e programação.
Eu lembro que minha primeira aula na faculdade foi de álgebra abstrata, mais precisamente, lógica matemática e tabela verdade. E o que isso significa? Bem, que para que toda a ementa do curso fizesse algum sentido, seria necessário entender lógica. Então quer dizer que eu preciso saber matemática para me tornar um programador? Sim! Mas não é necessário ser um gênio.
ALGORITMOS
Antes de prosseguir com o tema, vamos relembrar o que é algoritmo.
“um algoritmo é uma sequência finita de ações executáveis que visam obter uma solução para um determinado tipo de problema.” — Conceito de algoritmo segundo o Wikipedia
“Algoritmos são procedimentos precisos, não ambíguos, padronizados, eficientes e corretos.” — Dasgupta, Papadimitriou e Vazirani.
Para tornar essa explicação menos abstrata, podemos usar como exemplo a clássica receita de bolo: um algoritmo seria como uma receita de bolo, um passo a passo, se for seguido de forma precisa e eficiente, teremos como resultado um bolo fresquinho.
Simples, não? A construção de um software funciona da mesma maneira — teremos uma lista de passos e execuções que levam a um resultado esperado. Por exemplo, quais passos teria a funcionalidade de uma calculadora?
- Guarda o primeiro elemento do vetor
- Guarda a operação desejada
- Guarda o segundo elemento
- Executa a função
Seguindo esses 4 passos teremos o resultado da operação desejada.
VOLTANDO A FALAR DE LÓGICA
Ao falar de lógica matemática, temos dois resultados possíveis: Verdadeiro e Falso. A tabela verdade, que falaremos em breve, nos auxiliará bastante na definição dos valores lógicas de cada proposição.
Conceito de proposição
Relembrando as aulas de gramática do colégio, proposição seria uma oração, uma frase, possuindo um sujeito e um predicado — as proposições podem ser simples ou compostas:
Exemplos de proposições simples:
- “A capital da França é paris”
- “As aranhas são insetos”
- “A raiz quadrada de quatro é um número inteiro”
- “Java é abreviação de JavaScript”
Vamos analisar os exemplos das proposições acima. As lendo, mesmo que aleatórias, quais conclusões podemos tirar? Se são FALSAS ou VERDADEIRAS.
- A capital da França é Paris? Então a proposição é VERDADEIRA
- As aranhas são insetos? Não, são aracnídeos, então a proposição é FALSA
Exemplos de proposições compostas:
- “Csharp é compilado e Python é interpretado”
- “A tarde irei ao cinema ou ao parque”
- “Se amanhã fizer sol, então vou à praia”
- “Aprenderei a programar se, e somente se, eu estudar”
Diferente das proposições simples, para definir o valor lógico das proposições compostas, teremos que analisar a TABELA VERDADE e os CONECTIVOS LÓGICOS.
CONECTIVOS LÓGICOS
Eu não sei se vocês repararam, mas enquanto as proposições simples são formadas por uma única oração, as compostas são formadas por duas ou mais proposições simples interligadas ao conectivo lógico ou operador lógico.
- São 4 os operadores lógicos principais — “e”, “ou”, “se… então”, “se e somente se”
- A coluna símbolo é formada pelo p, representando a primeira proposição, e pelo q, representando a segunda proposição.
PROPOSIÇÕES E CONECTIVOS LÓGICOS
Para ficar claro tudo o que foi dito anteriormente, vejamos alguns exemplos:
- Analise as proposições compostas abaixo e defina seus valores lógicos
proposição 1: “Csharp é compilada e Python interpretado” = p ^ q
- p = Csharp é compilado
- ^ = operador lógico “e”
- q = python é interpretado
Analisando a primeira proposição
- O Csharp é compilada? Sim! então o “p” é VERDADEIRO.
- O Python é uma linguagem interpretada? Sim! então o “q” também é VERDADEIRO
Se o operador lógico dessa proposição é o “e”(conjunção) e a tabela verdade diz que para ser verdadeiro, ambas as proposições precisam ser verdadeiras, então essa proposição composta é VERDADEIRA.
proposição 2: “C++ é orientada a objetos ou C++ é estruturada” = p v q
- p = C++ é orientada a objetos
- v = operador lógico “ou”
- q = C++ é estruturada
Analisando a segunda proposição
- C++ é orientada a objetos? Sim! então p é VERDADEIRO
C++ é estruturada? Não! então q é FALSO.
Se o operador lógico dessa proposição é o “ou” (disjunção) e a tabela verdade diz que para ser verdadeiro, basta que uma das proposições seja verdadeira, então essa proposição composta é verdadeira.
TABELA VERDADE
a TABELA VERDADE é uma ferramenta que auxilia na definição dos valores lógicos das proposições compostas:
Há uma tabela para cada operador lógico, suas proposições, valores possíveis e resultado:
- Na primeira coluna temos os possíveis valores da proposição “p”;
- Na segunda coluna temos os possíveis valores da proposição “q”;
- Na terceira coluna temos o resultado das operações;
E NA PROGRAMAÇÃO
Os fundamentos da programação é o algoritmo, a estrutura de dados e a lógica de programação. Durante a construção de um código, estaremos sempre lidando com lógica.
A programação, assim como a lógica matemática, também tem os seus operadores ou conectivos lógicos e a forma como eles são representados depende da linguagem que se esteja trabalhando.
Lógica, operadores lógicos e a linguagem de programação
Veja esse exemplo no código acima. Se o resultado for verdadeiro, ou seja, o valor da variável index for maior ou igual a zero, retornaremos uma operação e o totalCoins. Se for falso, ou seja, menor do que zero, retornaremos um erro.
Aqui temos um outro ponto de vista mais intuitivo. Se o resultado da variável index for maior ou igual a zero, o retorno será verdadeiro, se não, o retorno será falso.
No código acima temos dois operadores lógicos. Se a peça for um peão e (o destino for igual a origem - 2 “ou” o destino for igual a origem + 2), retorna um valor, se não, retorna nulo.
Vamos analisar melhor esse código. Para ser verdadeiro, obrigatoriamente, a peça precisa ser um peão e ter um desses dois movimentos possíveis. Entre os parênteses nós temos as duas condições separadas pelo conectivo ou (||), bastando que uma seja verdadeira, para que toda a sentença seja verdadeira.
reescrevendo:
se (p é Peão e (destino.linha == origem.linha — 2 ou destino.linha == origem.linha + 2)) {
retorna x
} senão {
retorna nulo
}
No exemplo acima temos 3 variáveis com valores inteiros e logo abaixo temos duas variáveis “result”, recebendo dois valores lógicos.
int result1 = (num1 maior que num2) ou (num2 maior que num3)
int result2 = (num1 maior que num2) e (num2 maior que num3)
Curiosidade…
No Python, representamos seus operadores com a palavra em inglês. And, or e not. ao invés de “||” e “&&”.
Obs. Os operadores lógicos em JavaScript é representado da mesma forma do C#.
Conclusão…
Como podemos ver, a lógica é muito presente na programação. E não somente, já que em outras áreas da tecnologia da informação também. Desenvolvimento de Software, analise/ciência/engenharia de dados, DevOps, infraestrutura e etc.
Eu sei que a matemática assusta um pouco, mas não se preocupe, pois não é necessário ser um gênio da matemática. Basta se aprofundar em algoritmo, lógica de programação e estrutura de dados.