Introdução à Lógica de Programação 1
Sumário Noções de Lógica; Algoritmo; leonardobcamposatgmail.com 2/18
Noções de Lógica O uso corriqueiro da palavra lógica está normalmente relacionado à coerência e à racionalidade; Frequentemente se associa lógica apenas à matemática, não se percebendo sua aplicabilidade e sua relação com as demais ciências; Podemos relacionar a lógica com a correção do pensamento, pois uma de suas preocupações é determinar quais operações são válidas e quais não são, fazendo análise das formas e leis do pensamento. Como filosofia, ela procura saber por que pensamos assim não de outro jeito; leonardobcamposatgmail.com 3/18
Noções de Lógica Visto que a forma mais complexa do pensamento é o raciocínio, a lógica estuda a correção do raciocínio. Ou seja, a lógica estuda e ensina a colocar ordem no pensamento ; Sempre que pensamos, a lógica ou a ilógica necessariamente nos acompanha; leonardobcamposatgmail.com 4/18
Noções de Lógica Vejamos uma aplicação de lógica em alguns simples testes de psicotestes: Se mais fosse menos e se vezes fosse dividido, qual seria o resultado da expressão: 16 : 2 (7 + 3) x 1 1? a) 7 b) 4 c) 6 d) 2 e) 1 Tem-se nove velas acesas. Apagam-se 3, quantas ficam? a) 5 2 b) 2 x 3 c) 8 + 1 d) dois ao cubo e) 48 : 4 Mais testes clique AQUI leonardobcamposatgmail.com 5/18
Noções de Lógica Quando queremos pensar, falar, escrever ou agir corretamente, precisamos colocar ordem no pensamento, isto é, utilizar lógica. A gaveta está fechada; A caneta está dentro da gaveta; Precisamos primeiro abrir a gaveta para depois pegar a caneta; Mas e a lógica de programação? Obviamente não é programação da TV; Mas sim, o uso correto das leis do pensamento, da ordem da razão e de processos de raciocínio e simbolização formais na programação de computadores; leonardobcamposatgmail.com 6/18
O objetivo principal do estudo da Lógica de Programação é a construção de algoritmos coerentes e válidos. Mas o que é um algoritmo? Um algoritmo pode ser definido como uma sequência de passos que visam a atingir um objetivo bem definido; Na medida em que precisamos especificar uma sequência de passos, é necessário utilizar ordem, ou seja, pensar com ordem, portanto precisamos utilizar lógica; leonardobcamposatgmail.com 7/18
Apesar do nome pouco usual, algoritmos são comuns em nosso cotidiano, como, por exemplo, uma receita de bolo; Ações claras e precisas, que a partir de um estado inicial, após um período de tempo finito, produzem um estado final previsível e bem definido. Um algoritmo tem por objetivo representar mais fielmente o raciocínio envolvido na Lógica de Programação e, dessa forma, permite-nos abstrair uma série de detalhes computacionais e Codificar uma solução algorítmica para qualquer linguagem de programação; leonardobcamposatgmail.com 8/18
Podemos escrever um primeiro algoritmo de exemplo, utilizando português coloquial, que descreva o comportamento na resolução de uma determinada atividades, como, por exemplo, a troca de uma lâmpada: Pegar uma escada; Posicionar a escada embaixo da lâmpada; Buscar uma lâmpada nova; Subir na escada; Retirar a lâmpada velha; Colocar a lâmpada nova. E se a lâmpada não estivesse queimada? leonardobcamposatgmail.com 9/18
Podemos fazer um teste, a fim de verificar se a lâmpada está ou não queimada; Pegar uma escada; Posicionar a escada embaixo da lâmpada; Buscar uma lâmpada nova; Acionar o interruptor; Se a lâmpada não acender, então Subir na escada; Retirar a lâmpada queimada; Colocar a lâmpada nova. O algoritmo está correto mas pode ser melhorado, como? leonardobcamposatgmail.com 10/18
Mudemos então o teste condicional se a lâmpada não acender para o início da sequência de ações Acionar o interruptor; Se a lâmpada não acender, então Pegar uma escada; Posicionar a escada embaixo da lâmpada; Buscar uma lâmpada nova; Subir na escada; Retirar a lâmpada queimada; Colocar a lâmpada nova. O algoritmo ainda não prevê a possibilidade da lâmpada nova não funcionar; leonardobcamposatgmail.com 11/18
Podemos fazer um refinamento, uma melhoria no algoritmo, de tal modo que se troque a lâmpada diversas vezes, se necessário, até que funcione: Acionar o interruptor; Se a lâmpada não acender, então Pegar uma escada; Posicionar a escada embaixo da lâmpada; Buscar uma lâmpada nova; Buscar uma lâmpada nova; Subir na escada; Subir na escada; Retirar a lâmpada queimada; Retirar a lâmpada queimada; Colocar outra lâmpada nova; Colocar a lâmpada nova; Acionar o interruptor; Acionar o interruptor; Se a lâmpada não acender, então Se a lâmpada não acender, então Subir na escada... leonardobcamposatgmail.com 12/18 Buscar uma lâmpada nova;
Observemos que o teste da lâmpada nova é efetuada por um mesmo conjunto de ações: Se a lâmpada não acender, então Retirar a lâmpada queimada; Colocar a lâmpada nova; Portanto, em vez de reescrever várias vezes esse conjunto de ações, podemos alterar o fluxo sequencial de execução e voltemos a executar o teste (se a lâmpada não acender); Precisamos, então, determinar um limite para tal repetição, com o objetivo de garantir uma condição de parada; leonardobcamposatgmail.com 13/18
Podemos então, testar a lâmpada nova até que ela acenda; Enquanto a lâmpada não acender, faça Retirar a lâmpada queimada; Colocar uma lâmpada nova. A condição lâmpada não acender permaneceu e estabelecemos um fluxo repetitivo que será finalizado assim que a condição de parada for falsa, ou seja, assim que a lâmpada acender: Percebemos que o número de repetições é indefinido, porém é finito, e que depende apenas da condição estabelecida, o que leva a repetir as ações até alcançar o objetivo; leonardobcamposatgmail.com 14/18
O novo algoritmo ficaria: Acionar o interruptor; Se a lâmpada não acender, então Pegar uma escada; Posicionar a escada embaixo da lâmpada; Buscar uma lâmpada nova; Subir na escada; Retirar a lâmpada queimada; Colocar a lâmpada nova; Acionar o interruptor; Enquanto a lâmpada não acender, faça Buscar uma lâmpada nova; Subir na escada; Retirar a lâmpada queimada; Colocar uma lâmpada nova; Acionar o interruptor; leonardobcamposatgmail.com 15/18
Até agora estamos efetuando a troca de uma única lâmpada, na verdade estamos testando um soquete. O que faríamos se tivéssemos mais soquetes a testar, por exemplo, dez soquetes? Acionar o interruptor do primeiro soquete; Se a lâmpada não acender, então Pegar uma escada; Posicionar a escada embaixo da lâmpada; Buscar uma lâmpada nova; Subir na escada; Retirar a lâmpada queimada; Colocar a lâmpada nova; Acionar o interruptor; Enquanto a lâmpada não acender, faça Retirar a lâmpada queimada; Colocar uma lâmpada nova; Acionar o interruptor do segundo soquete; Se a lâmpada não acender, então... leonardobcamposatgmail.com 16/18
Observamos que o algoritmo anterior é apenas um conjunto de dez repetições; Repetição? Isso nos remete à solução usada para testar as lâmpadas queimadas. EURECA!!!!! Solução: Exercício para casa. leonardobcamposatgmail.com 17/18
Bibliografia FORBELLONE, André L. V., Lógica de Programação: a construção de algoritmos e estruturas de dados. - 3. ed. - São Paulo: Prentice Hall, 2005 leonardobcamposatgmail.com 18/18