Todo mamífero e um animal.
Todo cavalo e um mamífero.
Portanto, todo cavalo e um animal.
A gaveta está fechada.
A caneta está dentro da gaveta.
Então, precisamos abrir a gaveta para depois pegar a caneta.
A lógica de programação consiste no 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 compudores.
Permitir a resolução de problemas específicos com soluções de boa qualidade.
O objetivo da lógica de programação é a construção de algoritmos corretos e válidos.
Os algoritmos fixam um padrão de comportamento a ser seguido; uma norma de execução a ser trilhada, visando alcançar, como resultado final, a solução de um problema
Algoritmo 1.1 - Trocar uma lâmpada queimada
Reexaminando o algoritmo 1.1, notamos que ele tem um objetivo bem definido: trocar uma lâmpada queimada. Porém o algoritmo não atingirá seu objetivo se a lâmpada nova estiver queimada. Para tal, acrescentamos um teste condicional (estrutura seletiva).
Algoritmo 1.2 - Trocar uma lâmpada queimada (uso de teste condicional)
. . .
até quando????
O Algoritmo 1.2 não está terminado. As ações cessarão quando conseguirmos colocar uma lâmpada que acenda (objetivo do algoritmo). Ao invés de reescrevermos várias vezes um conjunto de ações, podemos alterar o fluxo seqüencial de execução para permitir que ações sejam reexecutadas quantas vezes forem necessárias. Precisamos expressar essa repetição (estrutura de repetição) garantindo uma condição de parada.
Algoritmo 1.3 - Trocar uma lâmpada queimada (uso de estruturas de repetição)
A série de Fibonacci: 1 1 2 3 5 8 13 ...
Algoritmo 2 - Calcular a série de Fibonacci
...
...
área = pi * raio 2
área = 3,14 * raio * raio
área e raio representam variáveis, uma vez que seus valores dependem de qual círculo estamos considerando; 3,14 é um valor constante utilizado para calcular a área de qualquer círculo.
<nome_do_tipo> : lista de identificadores
numérico:
área, raio;
literal:
nome;
atentar para a ordem de precedência entre os operadores:
(maior precedência) | parênteses mais internos |
pot rad | |
* / | |
(menor precedência) | + - |
Operação de Negação
A | NOT A |
V | F |
F | V |
Operação de Conjunção
A | B | A AND B |
F | F | F |
F | V | F |
V | F | F |
V | V | F |
Operação de Disjunção
A | B | A OR B |
F | F | F |
F | V | V |
V | F | V |
V | V | V |
2 < 5 AND 15/3 = 5 | |
V AND V | |
resultado da expressão: | V |
ordem de precedência entre todos os operadores:
(maior precedência) | parênteses mais internos |
operadores aritméticos | |
operadores relacionais | |
(menor precedência) | operadores lógicos |
Comando de Atribuição
Permite-nos fornecer um valor para uma variável (conteúdo para armazenamento na memória principal).
Forma geral de um comando de atribuição:
<identificador> ¬ valor
Exemplos:
lógico:
A;
numérico:
X;
A ¬ VERDADE;
X ¬ 8 + 12/3;
A ¬ X = 3;
Comandos de Entrada e Saída
permite-nos fornecer um os dados que "alimentam" os algoritmos e mostram os resultados processados pelos mesmos.
O comando leia, permite atribuir o dado lido (externo ao algoritmo) à variável identificada.
Exemplo: leia(raio); {atribui o valor lido à variável raio}
O comando escreva, permite exibir o valor de constantes ou o conteúdo armazenado nas variáveis identificadas.
Exemplo: escreva("o valor do raio é", raio); - escreve a constante "o valor do raio é" seguido do valor armazenado na variável raio.
Blocos
Caracteriza um conjunto finito de ações com uma função definida, então, um algoritmo é um bloco.
Todo bloco tem início e fim, o que é delimitado pelas palavras início e fim, respectivamente.
Comentários
Texto explicativo que aparece entre {} ou /* */ ao longo do algoritmo.
Os
comentários não fazem parte das ações (comandos) do algoritmo e têm
como finalidade aumentar a clareza na leitura do algoritmo, ou seja,
facilitar o entendimento das pessoas acerca do que sendo descrito no
algoritmo.
As estruturas de controle determinam a sequência de execução (fluxo de execução) das ações dos algoritmos.
Existem três tipos de estruturas de controle: estrutura seqüencial, estrutura de seleção, estrutura de repetição. Vejamos um pouco mais sobre cada uma delas...
Estrutura Seqüencial:
por via de regra, as ações descritas num algoritmo serão executadas numa sequência linear, isto é, da primeira à última, na ordem em que aparecem.
o delimitador ' ; ' indicará o fim de cada ação.
modelo geral de um algoritmo:
início
/* Declaração de variáveis
...
/* Corpo do algoritmo */
ação1;
ação2;
...
açãoN;
fim /* do algoritmo */
Para exercitar em sala: escreva um algoritmo para calcular a média aritmética entre quatro notas de disciplina, fornecidas por um aluno.
Algoritmo 4 - Cálculo da média aritmética de quatro valores
início
/* Declaração de variáveis */
numérico: nota1, nota2, nota2, média;
/* Obtenção da notas */
escreva("Informe as notas do aluno: ");
leia(nota1, nota2, nota3, nota4);
/* Cálculo da média */
média = (nota1 + nota2 + nota3 + nota4) / 4;
escreva("Média calculada: " média);
fim
Estruturas de seleção
se <condição>
então /* Bloco
verdade */
início
sequência de comandos;
fim
fim-se
se <condição>
então /* Bloco
verdade */
início
sequência de
comandos;
fim
senão /* Bloco
falso*/
início
sequência de
comandos;
fim
fim-se
se <condição1>
então
se <condição2>
então
início
sequência de comandos;
fim
fim-se
senão
se <condição3>
então
início
sequência de comandos;
fim
senão
início
sequência de comandos;
fim
fim-se
Algoritmo 5 - Verificar se três lados formam um triângulo e que tipo de triângulo
início
/* Declaração de variáveis */
numérico: lado1, lado2, lado3;
/* Obtenção dos dados */
leia(lado1, lado2, lado3);
se (lado1 <
lado2+lado3) AND (lado2 < lado1+lado3) AND (lado3 < lado2+lado1) /* Testa
se é triângulo */
então
se (lado1=lado2) AND (lado2=lado3) /* Testa se é equilátero */
então
escreva ("Os valores fornecidos formam um triângulo equilátero.");
senão /* Testa se é isósceles */
se (lado1 = lado2) OR (lado2 = lado3) OR (lado1 = lado3)
então
escreva ("Os valores fornecidos formam um triângulo isósceles");
senão /* É escaleno */
escreva ("Os valores fornecidos formam um triângulo escaleno");
fim-se
fim-se
fim-se
fim /* do algoritmo */
1 - Padrão se-então-se:
se <condição1>
então se <condição2>
então comando;
fim-se
fim-se
se var = valor1
então
comando1;
fim-se
se var = valor2
então
comando2;
fim-se
melhorando o desempenho dessa estrutura (diminuindo a quantidade média de testes):
se var = valor1
então
comando1;
senão se var = valor2
então
comando2;
fim-se
fim-se
outra forma de representar a situação descrita acima é através do uso de uma estrutura de seleção de múltipla escolha:
escolha (var)
caso valor1: comando1;
caso valor2: comando2;
caso contrário: comandoErro;
fim-escolha
Estruturas de repetição
Laço indeterminado
enquanto <condição> faça
início
comandos;
fim
fim-enquanto
Exemplo: calcular a média aritmética de quatro notas para um conjunto de alunos.
Algoritmo 6 - Calcular a média aritmética de 4 notas para vários alunos
início
/* Declaração de variáveis */
numérico: nota1, nota2, nota3, nota4, média;
literal: resposta;
resposta ¬ "S";
enquanto (resposta =
"S") faça
início
/* Obtenção da notas */
escreva("Informe as notas
do aluno: ");
leia(nota1, nota2, nota3, nota4);
/* Cálculo da média */
média = (nota1 + nota2 + nota3 + nota4) / 4;
escreva("Média
calculada: " média);
escreva("Deseja calcular outras médias de alunos (S/N)?");
leia(resposta);
fim
fim-enquanto
fim /* do algoritmo */
Tipos de laços
Laço determinado
para <variável> de
<valorInicial> até <valorFinal> passo <incremento> faça
início
comandos;
fim
fim-para
Exemplo: modificar o algoritmo 6, considerando a quantidade de alunos igual a 50.
Algoritmo 7 - Calcular a média aritmética de 4 notas para 50 alunos
início
/* Declaração de variáveis */
numérico: nota1, nota2, nota2, média, numAlunos;
para numAlunos de 1 até 50
passo 1 faça
início
/* Obtenção da notas */
escreva("Informe as notas
do aluno: ");
leia(nota1, nota2, nota3, nota4);
/* Cálculo da média */
média = (nota1 + nota2 + nota3 + nota4) / 4;
escreva("Média
calculada: " média);
fim
fim-enquanto
fim /* do algoritmo */
Versão ".doc" do material apresentado acima (aqui)