Então, o que é “Lógica”?
Talvez a forma mais “poética” de definir Lógica, seja como “a arte de pensar”. A ideia do pensamento lógico é um pensamento corrigido, organizado e correto – pensar de forma racional, considerando o que é certo e errado, quais ações são as melhores e quais são as piores para alcançar determinado objetivo.
Na verdade, o termo “Lógica” possui mais de um significado e acaba por ser um assunto extremamente denso (englobando outras áreas do conhecimento), por isso, seguiremos pela definição acima para falar sobre Lógica de Programação.
A melhor forma de exemplificar o uso da lógica é basear-se em algum acontecimento diário:
O céu está nublado, a roupa lavada está no varal secando e a previsão do tempo indica chuva.
Apesar de um céu nublado não dar certeza de chuva, ainda assim ele indica alta possibilidade de chuva; logo a ação mais lógica seria tirar a roupa do varal para não molhar, caso chova.
Outro exemplo:
É necessário escrever um texto, e a caneta para escreve-lo está dentro da gaveta.
Pensando da maneira mais simples, basta puxar a alça da gaveta para abri-la e pegar a caneta. Outra maneira seria comprar outra caneta, ou quebrar a parte de fora da gaveta para pegar a caneta – mas esses últimos exemplos não são os mais fáceis ou com as melhores consequências; e aí está a ideia da Lógica, apresentar uma solução ou uma estratégia eficiente.
...e a Lógica de Programação?
É aplicar a lógica que vimos acima para organizar e estruturar programas de computador – tanto para criar algoritmos, como para escrever o código em si (veremos posteriormente).
Algoritmos
Um algoritmo pode ser definido como uma sequência de ações para alcançar um determinado objetivo. O melhor exemplo de um algoritmo no cotidiano é uma receita de comida: são passados todos os ingredientes e todos os passos, que (geralmente) resultam no prato desejado.
E o que tem a Lógica a ver com isso?
Ela é necessária porque os algoritmos precisam ser ordenados, precisos, com ações claras e objetivas, de forma que todo o seu desenvolvimento e seu resultado sejam previsíveis; ou seja, os algoritmos devem seguir uma lógica.
Para ficar mais claro, vamos expandir o exemplo da caneta dentro da gaveta:
Algoritmo
Passo 1 - pegar uma folha para escrever;
Passo 2 - ir até a gaveta que contém a caneta;
Passo 3 - puxar a alça da gaveta para abri-la;
Passo 4 - pegar a caneta;
Passo 5 - fechar a gaveta;
Passo 6 - tirar a tampa da caneta;
Passo 7 - Usa-la para escrever.
Temos passos organizados e lógicos para pegarmos a caneta e escrevermos o texto (considerando que somos perfeitos e não precisamos de borracha). Pode parecer algo besta, mas, quando vamos tratar de coisas mais complicadas, os algoritmos são fundamentais para, não só organizar o programa, como organizar nosso próprio pensamento.
Podemos ter vários algoritmos para um mesmo objetivo – na verdade, é quase impossível que exista apenas um algoritmo para um objetivo; cada um dos vários algoritmos criados para resolver um único problema costuma ter benefícios e malefícios se comparados entre si.
Vamos ao exemplo:
Troca de Lâmpada - Algoritmo 1
Pegar uma escada;
Posiciona-la embaixo da lâmpada;
Pegar uma lâmpada nova;
Acionar o interruptor;
Se a lâmpada do teto não acender, então:
Subir na escada;
Retirar e trocar a lâmpada queimada pela nova lâmpada.
Troca de Lâmpada - Algoritmo 2
Acionar o interruptor;
Se a lâmpada do teto não acender, então:
Pegar uma escada;
Posiciona-la embaixo da lâmpada queimada;
Pegar uma lâmpada nova;
Subir a escada;
Trocar a lâmpada queimada pela nova lâmpada.
Veja que ambos resultam no mesmo objetivo: trocar uma lâmpada que esteja queimada.
O 1º tem o benefício de que, se a lâmpada já estiver queimada, você já possui uma lâmpada nova em mãos e a escada, basta apenas troca-la pela queimada; mas, se a lâmpada não estiver queimada, você fez passos desnecessários.
O 2º é exatamente o oposto da primeira: você só age depois de ter confirmado que a lâmpada está queimada; caso esteja, aí você tem o trabalho de buscar os materiais necessários.
E aí vem a pergunta: qual é a melhor?
Quando levamos essa questão à programação, a resposta costuma ser “depende”, cada uma terá seu benefício dependendo da situação em que o algoritmo é aplicado.
No exemplo acima, talvez o segundo algoritmo seja mais interessante se os materiais necessários forem de difícil acesso. Em contrapartida, o primeiro seria aconselhável caso a escada e a lâmpada fossem de fácil acesso.
Para formalizarmos o algoritmo, a imagem a seguir mostra o fluxograma do algoritmo de troca de lâmpada. Um fluxograma é uma forma de representar os passos necessários para a execução de um processo ou trabalho:
Foco no processo
Lógica, no cotidiano, é também muito usada em Matemática, principalmente para resolver aqueles problemas caricatos de quantidade de maçãs do Joãozinho. Contudo, a solução desses problemas está preocupada em encontrar um valor específico, já a preocupação da Lógica e Algoritmos é com o processo para solucionar o problema. Então vamos a um exemplo disso.
Visualize a seguinte questão:
Uma empresa de brinquedos precisa fazer uma peça maciça com as seguintes características:
Formato de um cubo, cujas dimensões são 10 cm, por 10 cm por 20 cm.
Em cada face, há um furo cilíndrico, com 2 cm de diâmetro e 2 cm de profundidade.
Essa peça é confeccionada em uma única máquina que injeta nylon em um molde que atende as características exigidas.
Desconsiderando eventuais desperdícios e utilizando π = 3,1, o volume de nylon utilizado para confeccionar 500 dessas peças é:
Corte vertical de um molde
Se formos resolver a questão, precisamos descobrir o volume útil do cubo, descontando o volume dos furos.
Assim, devemos calcular o volume do cubo, que será 10 x 10 x 20 = 2000 cm³.
Depois calcular o volume do furo, que será 3,14 x 1² x 2 = 6,3 cm³.
Para descontar o volume dos furos, fazemos 2000 - 6 x 6,3 = 1962.2 cm³.
E, por fim, multiplicamos 1962.2 cm³ por 500, chegando na resposta 981100 cm³.
Perceba que se mudarmos as dimensões do cubo ou dos furos, a nossa resposta será outro valor, portanto, nesse caso, a solução matemática preocupa-se em encontrar a resposta para o conjunto de valores informados no enunciado, e especificamente eles.
Agora, se formos solucionar exclusivamente pela Lógica, devemos nos preocupar com o processo, ou o conjunto de passos, para chegar ao resultado. Veja:
Primeiro calculamos o volume do cubo, que é o resultado da multiplicação entre a altura, a largura e a profundidade;
Depois, calculamos o volume do furo cilíndrico, usando a fórmula pi x raio² x altura;
Na sequência, descontamos o volume do cubo do volume dos furos, ou seja, subtraímos o volume dos furos do volume do cubo;
O resultado da subtração nos dá o volume útil do cubo, em que cabe o nylon, assim, para saber o volume total de 500 peças, multiplicamos o volume útil por 500.
Os passos acima, então, nos dá o processo para resolver a questão do enunciado anterior.
É importante notar que no caso da resposta Lógica, não é o último passo a resposta, mas sim todos os 4 passos, pois, se tirar qualquer um deles, é impossível resolver a questão.
Além disso, veja que não importam os valores ou dimensões do cubo e dos furos, os passos funcionam para qualquer que sejam os valores.
Quando programamos estamos sempre pensando em soluções lógicas, e não em soluções matemáticas.
Na próxima aula veremos um tipo específico de lógica. Até lá.