Introdução à Lógica de Programação

De Aulas

Links relacionados: Lógica de Programação

Conceitos gerais

  • Lógica de programação é a técnica de encadear pensamentos para atingir determinado objetivo.
  • É por meio da lógica de programação que conseguimos construir programas com uma sequência lógica.
  • Essa Sequência Lógica são os passos executados até atingir um objetivo ou solução de um problema.

Instrução

  • Conjunto de regras ou normas definidas para a realização de determinada atividade.
  • No caso da informática: uma ação elementar a executar em um computador.

Algoritmo

Um algoritmo é um conjunto finito de regras que fornece uma sequência de operações para resolver um problema específico. É algo como uma receita, ou uma rotina.

Para resolver um problema em um computador, de modo semelhante ao que fazemos para resolver um problema do nosso cotidiano, devemos encontrar uma maneira de descrever esse problema de uma forma clara e precisa, através de uma sequência de passos a serem seguidos até que se atinja a solução procurada (CRUZ; KNOPMAN, 2001).

O uso de algoritmos surgiu como uma forma de indicar o caminho para a solução dos mais variados problemas.

  • Estruturação que deve seguir uma determinada lógica para se atingir um objetivo.
  • Sequência finita de passos que levam a execução de uma tarefa.
  • Tal como uma receita, uma sequência de instruções que dão cabo de uma meta específica.
  • As tarefas devem ser claras e precisas (não podem ser redundantes nem subjetivas).
  • São descritos em uma linguagem chamada pseudocódigo;
    • Quando estamos implementando em linguagem de programação, estamos gerando código na linguagem específica. Por isso, os algoritmos são independente de linguagem de programação;
  • Não existe um formalismo rígido, mas existem sugestões para formalização da escrita dos algoritmos;
  • Deve ser fácil de se interpretar e codificar (intermediário entre a linguagem falada e a linguagem de programação).

Dado um problema, as principais funções de um programador são:

  • Entender perfeitamente o problema;
  • Escolher métodos para sua solução;
  • Desenvolver um algoritmo baseado nos métodos;
  • Codificar o algoritmo na linguagem de programação disponível.

Exemplos

    • operações básicas (adição, multiplicação, divisão e subtração) de números reais decimais>
    • receitas de culinária que definem os ingredientes envolvidos e o passo a passo de como preparar o alimento.
    • manual de montagem de um móvel, etc.
    • Ou mesmo atividades simples que podem ser descritas por sequencias lógicas:

Chupar uma picolé

1. Pegar o picolé.
2. Retirar o papel.
3. Chupar o picolé.
4. Jogar o papel e o palito fora.

Cuidados ao se criar Algoritmos

  • Usar somente um verbo por frase;
  • Imaginar que você está desenvolvendo um algoritmo para pessoas que não trabalham com informática;
  • Usar frases curtas e simples;
  • Ser objetivo;
  • Evitar o uso de palavras com sentido dúbio.

Fases

Qualquer tarefa que siga determinado padrão pode ser descrita por um algoritmo, por exemplo:

COMO FAZER OKONOMIYAKI

ou

CALCULAR O VALOR LÍQUIDO DA FOLHA DE PAGAMENTO

Contudo, para montar um algoritmo, precisamos primeiramente dividir o problema apresentado em três fases fundamentais:

+---------+      +---------------+      +-------+
| ENTRADA | ---> | PROCESSAMENTO | ---> | SAÍDA |
+---------+      +---------------+      +-------+
  • ENTRADA: dados de entrada do algoritmo.
  • PROCESSAMENTO: procedimentos utilizados para chegar ao resultado final.
  • SAÍDA: dados já processados.

Exemplo de Algoritmo

Calcular a média final dos alunos de uma disciplina sendo que eles tiveram 3 provas.

Média Final = P1 + P2 + P3 / 3

Para montar o algoritmo precisamos fazer a abstração da situação para uma estrutura lógica fazemos. Neste caso, fazemos três perguntas:

a) Quais são as informações de entrada?

R: Notas das provas P1, P2 e P3;

b) Qual é o processamento utilizado?

R: A soma de todas as entradas dividida pela quantidade de provas (três).

c) Quais são as informações de saída?

R: A nota final da disciplina (média das notas).

Algoritmo

1. Informe a nota da Prova 1 (P1)
2. Informe a nota da Prova 2 (P2)
3. Informe a nota da Prova 3 (P3)
4. Some todas as notas e divida por 3
5. Mostre o resultado

Teste de Mesa

  • Forma de verificação da eficácia do algoritmo;
  • Segue-se as instruções do algoritmo anotando os valores das informações e suas alterações;
  • Mostra se o procedimento descrito no algoritmo está correto ou não.

Observação: mais tarde faremos alguns testes de mesa para testar a eficácia dos nossos algoritmos.

Programas

  • Algoritmos escritos numa linguagem de computador (Pascal, C, Go, Java) que são interpretados e

executados por um computador.

Observação: Para que um algoritmo seja executado em um computador, é necessário que ele seja convertido em uma linguagem de máquina, seja ele compilado, interpretado por um programa interpretador ou máquina virtual (veremos isso mais tarde).

Construção de Algoritmos

  • Quando criamos um algoritmo, apenas apontamos uma sequência de atividades que levam à solução de um problema.
  • Até mesmo as soluções para os problemas cotidianos mais simples podem ser descritas por sequências lógicas de atividades, ou seja, por algoritmos.

Técnica para Elaboração de um Algoritmo

A seguir são apresentados os passos para a elaboração de um algoritmo (ASCENCIO e CAMPOS, 2002):

  1. ler atentamente o enunciado, destacando os pontos mais importantes;
  2. definir os dados de entrada;
  3. definir que dados de saída se deseja obter;
  4. definir o processamento (de que maneira será ordenada a sequência de passos);
  5. construir o algoritmo;
  6. testar o algoritmo realizando simulações.

Exemplo

Problema: Trocar uma lâmpada.

Sequência de passos para a solução:

1. Pegue uma escada;
2. Posicione a escada embaixo da lâmpada;
3. Pegue uma lâmpada nova;
4. Suba na escada;
5. Retire a lâmpada velha;
6. Coloque a lâmpada nova.

Esta solução é apenas uma das muitas soluções possíveis para o problema apresentado. Assim, ao criarmos um algoritmo, indicamos uma dentre várias possíveis sequências de passos para solucionar o problema.

Por exemplo, o problema acima poderia ser resolvido mesmo se alterasse-mos a sequência de passos para:

1. Pegue uma lâmpada nova;
2. Pegue uma escada;
3. Posicione a escada embaixo da lâmpada;
4. Suba na escada;
5. Retire a lâmpada velha;
6. Coloque a lâmpada nova.

Exercícios

1. Escreva um algoritmo (sequência de passos) para trocar um pneu de um carro.

2. Descreva um algoritmo que defina como fazer um bolo.

3. Descreva um algoritmo que defina como preparar um ovo frito.

Estruturas de Decisão

  • Alguns passos podem depender de decisões a serem tomadas;
  • Algum fato pode indicar se um ou mais passos do algoritmo deve ser executado ou não;

Exemplo

Se em algum momento do algoritmo para trocar uma lâmpada perguntarmos se a lâmpada está queimada para não termos que trocar a lâmpada sem necessidade. Assim, acrescentamos um teste para verificar se a lâmpada deve ser trocada.

1. Ligue o interruptor
2. Se a lâmpada não acender:
  2.1. Pegue uma escada;
  2.2. Posicione a escada embaixo da lâmpada;
  2.3. Pegue uma lâmpada nova;
  2.4. Suba na escada;
  2.5. Retire a lâmpada velha;
  2.6. Coloque a lâmpada nova.

Dessa forma, só executamos os passos definidos de 2.1 a 2.6 caso a condição definida do passo 2 seja verdadeira, ou seja, caso a lâmpada não acenda.

Estruturas de Repetição

Apesar do nosso algoritmo verificar agora a necessidade de trocar a lâmpada antes de fazê-lo, podemos estar instalando outra lâmpada que não está funcionando. Para resolver este problema, teríamos que testar esta nova lâmpada também. Assim, vamos incluir este novo teste:

1. Ligue o interruptor
2. Se a lâmpada não acender:
  2.1. Pegue uma escada;
  2.2. Posicione a escada embaixo da lâmpada;
  2.3. Pegue uma lâmpada nova;
  2.4. Suba na escada;
  2.5. Retire a lâmpada velha;
  2.6. Coloque a lâmpada nova;
  2.7. Se a lâmpada não acender:
    2.7.1. Retire a lâmpada;
    2.7.2. Coloque uma outra lâmpada;
    2.7.3. Se a lâmpada ainda não acender:
      2.7.3.1. Retire a lâmpada;
      2.7.3.2. Coloque uma outra lâmpada;

O problema é, até quando vamos ficar fazendo esses testes?

  • Percebemos um padrão nesses testes, fazendo com que tenhamos que repetir certos passos por n iterações indefinidamente.
  • Em casos como esse, devemos utilizar estruturas de repetição.
  • As estruturas de repetição definem um fluxo de ações que se repete enquanto uma determinada situação acontece.

Assim, se substituirmos nossa sequência indefinida de estruturas de decisão por uma estrutura de repetição:

1. Ligue o interruptor;
  2. Se a lâmpada não acender:
  2.1. Pegue uma escada;
  2.2. Posicione a escada embaixo da lâmpada;
  2.3. Pegue uma lâmpada nova;
  2.4. Suba na escada;
  2.5. Retire a lâmpada velha;
  2.6. Coloque a lâmpada nova.
  2.7. Enquanto a lâmpada não acender:
    2.7.1. Retire a lâmpada;
    2.7.2. Coloque uma outra lâmpada.
  • neste novo algoritmo, enquanto a condição definida na linha 2.7 for verdadeira as ações definidas em 2.7.1 e 2.7.2 serão repetidas.
  • Abstraímos os fatos de ter de descer da escada para pegar uma lâmpada nova e subir novamente.

Diagrama de Blocos / Fluxograma

  • Forma padronizada para representar os passos lógicos de um determinado processamento.
  • Podemos definir uma sequência de símbolos, com significado bem definido para facilitar a visualização dos passos de um processamento.
  • Existem diversos símbolos que serão vistos mais tarde.
  • A seguir são apresentados alguns elementos:
Fluxograma simbologia.png

Representação do algoritmo de cálculo de média de um aluno na forma de fluxograma:

Fluxograma algoritmo01.png

Representação do algoritmo de troca de lâmpadas na forma de fluxograma:

Fluxograma algoritmo02.png

Exercícios

1. Elabore um algoritmo que indique como fazer uma prova. Faça o algoritmo pensando que o aluno não deve deixar questões em branco; assim, deve continuar fazendo a prova enquanto existir questão em branco e o tempo de prova não tiver acabado. Além disso, o aluno só deve resolver uma questão se souber resolvê-la, senão pula para a próxima.

2. Suponha que você tenha uma caixa cheia de bolas. Nessa caixa existem bolas azuis e bolas vermelhas. Além disso, você tem também duas caixas vazias. Vamos chamar a caixa que contém as bolas de caixa 1 e as duas caixas vazias de caixa 2 e caixa 3. Neste contexto, escreva um algoritmo que defina como tirar todas as bolas da caixa 1, colocando as bolas azuis na caixa 2 e as bolas vermelhas na caixa 3.

3. José trabalha no departamento de recursos humanos de uma empresa. A empresa de José definiu que os salários dos empregados serão aumentados seguindo a seguinte regra: caso o salário seja menor que R$ 1.000,00, o aumento será de 10%; caso contrário, será de 8%. José recebeu uma lista contendo os nomes e salários de todos os funcionários da empresa e foi solicitado que calculasse o novo salário desses funcionários. Assim, escreva um algoritmo para que José calcule corretamente os novos salários.

4. Desafio de lógica: Três missionários e três canibais encontram-se na margem esquerda de um rio. Nessa margem também existe um bote que pode transportar uma ou duas pessoas. As seis pessoas pretendem todas passar para a margem direita (usando o bote). No entanto, os missionários têm de arranjar um plano para consegui-lo de modo que, em nenhuma circunstância, existam missionários numa margem em minoria relativamente aos canibais, pois têm receio do que lhes possa acontecer. Quando o bote chega à margem, os elementos do bote são contados como estando na margem. Assim, se houver apenas um canibal em uma margem, não podemos enviar a essa margem o bote com um canibal e um missionário, pois, ao chegar à outra margem, serão dois canibais contra um missionário. Lembre-se de que para o bote ir de uma margem a outra é necessário que alguém esteja remando, ou seja, o bote nunca atravessa vazio. Faça um algoritmo que exiba, passo a passo, como efetuar esta travessia de forma segura.

5. Crie o diagrama de blocos (fluxograma) dos algoritmos apresentados nas questões anteriores.

Referências