Lógica de Programação - Lógica e Algoritmos



Introdução à Lógica

       As diversas ciências definem a lógica e seus atributos de várias maneiras, no entanto, utilizar a lógica é um fator a ser considerado por todos, principalmente pelos profissionais da área do desenvolvimento tecnológico e de informação.

        Devemos desde o início pensar de um modo único sobre algo: lógica não é um benefício que somente algumas pessoas possuem, todos, sem exceção, possuem este benefício.

        A lógica está relacionada normalmente com o pensar, no entanto, ela simplesmente nos auxilia quando pensamos de um modo e não de outro. Por esse fato, podemos relacionar a lógica a “correção do pensamento”, analisando e aprendendo a utilizar as leis do pensamento.

        Tendo o raciocínio como um pensamento mais complexo, e, que possivelmente podemos nos perder na escolha deste ou daquele procedimento, a lógica tem como função ordená-lo, definindo-se assim como “ordem ao raciocínio”. Por isso a lógica estuda e ensina a colocar “ordem no pensamento”.

Lógica Computacional e Algoritmos

            Na área de desenvolvimento, o bom uso da lógica é um bem valioso. A construção de um pensamento com bons resultados é sempre a melhor oferta. Quando falamos de computadores e de sistemas, será mais bem sucedido àquele que desenvolver a resposta mais “afinada”, isto é, o sistema que tiver o melhor processo para resolver determinado problema, como uma planilha de calculo, ou enviar um e-mail ou ainda pagar uma conta de modo seguro, e, para isto, o sistema deve possuir um bom algoritmo.

            Algoritmos são sequencias de instruções para a resolução de um determinado problema. Podemos notar um algoritmo em execução quando observamos alguém fazendo um bolo através de uma receita. Neste caso a receita é o algoritmo. Para que o bolo saia como desejamos devemos seguir a receita na ordem que esta descrita, sem inverter os ingredientes ou a ordem de utilizá-los, senão teremos um resultado, mas, não será o bolo!.

           Normalmente montamos um algoritmo antes de realizar a tarefa, quando ainda estamos pensando no problema, tais quais:

Ir para a escola, neste caso pensamos: qual caminho pegar? Vou de carro? Carona? Sozinho? O que vou levar hoje?  

Fazer café, já neste caso observaríamos: tenho os ingredientes? O que faço primeiro? Com ou sem açúcar?

         O principal agente no desenvolvimento de sistemas é o algoritmo, e a lógica é o principal agente no desenvolvimento de algoritmos, portanto; o principal objetivo da Lógica é a construção de Algoritmos válidos e coerentes.

            Todos os algoritmos são finitos e bem definidos, estruturados em ações e sequenciais. Sempre!

            Vejamos exemplos de algoritmos:

1º - Criar um algoritmo para fazermos uma salada de frutas.

            Pois bem, neste caso teríamos:

Resposta:

1 - pegar um utensílio para colocar as frutas cortadas;
2 - coletar as frutas para a salada;
3 - lavar as frutas;
4 - descascar as frutas;
5 - cortar em tamanhos pequenos;
6 - colocar todas as frutas cortadas no utensílio;

            Para esta resolução, foi abordado um algoritmo bastante superficial, que possui apenas a síntese da resposta, isto é, o desenvolvedor do processo pode escrever o algoritmo no nível que achar necessário, descrevendo ou não os detalhes de acordo com o problema. Imagine um algoritmo para trocar uma lâmpada queimada;

2 º - Criar um algoritmo para a troca de uma lâmpada queimada.

Resposta:

1 - pegar a escada;
2 - pegar a lâmpada nova;
3 - subir na escada;
4 - retirar a lâmpada queimada;
5 - colocar a lâmpada nova;
6 - acionar o interruptor;

            Observe que não houve um detalhamento muito grande para o algoritmo, e não significa que está errado, e sim, que não foi necessário um grande nível de detalhe para a resposta. Se fosse preciso maior detalhe, poderíamos inserir diversas observações lógicas no caso como: Onde está a lâmpada? Alto, baixo? Qual o tipo de lâmpada? Preciso de algum recurso para removê-la? Entre outras questões que colaboram com a construção de um melhor algoritmo, podendo criar novos passos ou otimizar os que já tem.

            Desenvolva os algoritmos das situações a seguir:


3º - criar um algoritmo da Torre de Hanói para 3 hastes e 3 discos.

            A Torre de Hanói possui as seguintes regras:

          - todos os discos devem ser colocados em outra haste diferente da inicial (1) da mesma forma como o jogo se inicia ( A - pequeno, B - médio e C - grande ).        
          - nunca um disco maior fica sobre o menor;
          - apenas movimente um disco por vez;
          - discos A, B e C cada um com um tamanho diferente;
          - hastes 1, 2 e 3 de mesmo tamanho;
           






Resposta:

1-    Mova o disco A para a haste 3;
2-    Mova o disco B para a haste 2;
3-    Mova o disco A para a haste 2;
4-    Mova o disco C para a haste 3;
5-    Mova o disco A para a haste 1;
6-    Mova o disco B para a haste 3;
7-    Mova o disco A para a haste 3;


4º - Criar um algoritmo para atravessar três jesuítas para a outra margem do rio.

          Considere a situação: 3 jesuítas e 3 canibais estão na margem do rio. Para a segurança dos jesuítas devemos atravessá-los para a outra margem do rio com um barco seguindo as seguintes regras:

            - nunca os jesuítas devem estar em menor número em nenhuma das margens;
            - apenas duas pessoas podem ir ao barco por vez;
            - apenas o barco pode ser utilizado para a travessia;
            - considere a margem A na direita e a margem B na esquerda.




Resposta:

1-    Mova 1 canibal e 1 jesuíta para a margem A para a margem B;
2-    Mova 1 jesuíta da margem B para a margem A;
3-    Mova 2 canibais da margem A para a margem B;
4-    Mova 1 canibal da margem B para a margem A;
5-    Mova 2 jesuítas da margem A para a margem B;
6-    Mova 1 canibal e 1 jesuíta da margem B para a margem A;
7-    Mova 2 jesuítas da margem A para a margem B;
8-    Mova 1 canibal da margem B para a margem A;