Você está na página 1de 41

Introdução à Lógica de

Programação
Algoritmos
• Algoritmo é uma seqüência de passos que visam atingir
um objetivo bem definido.
• Os algoritmos são utilizados no dia-a-dia para a solução
dos mais diversos problemas
– Receita de bolo
– Manual de instruções
– Uma coreografia
– A solução de uma equação do segundo grau

• O que essas coisas têm em comum?


– uma série finita e bem definida de passos ou regras que,
quando realizadas, atingem um objetivo previamente definido
Algoritmos
• Outra definição pode ser
– Algoritmo é a descrição de um conjunto de ações que,
obedecidas, resultam numa sucessão finita de passos, atingindo
um objetivo esperado.

• O que importa no algoritmo é o efeito das ações para a


obtenção do resultado esperado.
• São propriedades de algoritmos:
– ações simples, claras e bem definidas (não ambíguas);
– seqüência ordenada de ações;
– seqüência finita de passos;
Algoritmos
Algoritmo: Troca de lâmpada queimada
• 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.

Obs.: esse algoritmo está descrito em linguagem coloquial ou forma


narrativa.
Algoritmos
Algoritmo: Troca de lâmpada com teste
• 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.
Algoritmos
Algoritmo: Troca de lâmpada com teste no início
• 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.
Algoritmos
Algoritmo: Troca de lâmpada com teste e condição de parada
• acionar o interruptor;
• se a lâmpada não acender, então
– pegar uma escada;
– posicionar a escada embaixo da lâmpada;
– buscar lâmpadas novas;
– subir na escada;
– retirar a lâmpada queimada;
– colocar a lâmpada nova.
– enquanto a lâmpada não acender, faça
• retirar lâmpada queimada
• colocar lâmpada nova
Algoritmos
• Temos três hastes. Uma das hastes serve de suporte para três
discos de tamanhos diferentes. Os discos menores são sempre
colocados sobre os discos maiores.
• Situação inicial

• Desejamos mover todos discos para outra haste, porém só


podemos movimentar um disco de cada vez e um disco maior
nunca pode ser colocado sobre um disco de menor tamanho.

• Como seria um algoritmo para resolver esse problema?


Algoritmos
Nomeamos as hastes como 1, 2 e 3 e os discos como p, m e
g. Considera-se que inicialmente os discos estão na haste 1.
Os passos são:
1. move o disco p para a haste 2.
2. move o disco m para a haste 3.
3. move o disco p para a haste 3.
4. move o disco g para a haste 2.
5. move o disco p para a haste 1.
6. move o disco m para a haste 2.
7. move o disco p para a haste 2.
Algoritmos
Exercício: Faça um algoritmo para resolver o problema
abaixo.

Temos três recipientes de tamanhos distintos: o primeiro


com capacidade para 8 litros, outro para 5 litros e o
terceiro com capacidade para 3 litros. O recipiente de 8
litros está totalmente cheio. Deseja-se colocar 4 litros em
dois recipientes. Considere que os recipientes não sejam
graduados.
Algoritmos
Exercício: Faça um algoritmo para resolver o problema
abaixo.

Numa determinada noite, acontece uma queda de energia.


Você sabia que poderia encontrar uma vela na gaveta da
cozinha, um lampião embaixo da cama, fusíveis de reserva
no armário da sala e fósforos na estante da cozinha.
Descreva a seqüência de passos que poderia ser utilizada
para diagnosticar e resolver o problema, o que pode ser
previsto em duas possibilidades:
a) o fusível queimou;
b) a queda é na estação da companhia elétrica.
Algoritmos Computacionais
• O algoritmo é uma seqüência de instruções, onde cada
instrução representa uma AÇÃO que deve ser entendida
e realizada.
• Como saber se já temos detalhes suficientes em um
algoritmo para que a AÇÃO possa ser entendida e
realizada?
– Depende do agente que irá executar o algoritmo
• No caso de algoritmos computacionais
– O agente é o computador
– o computador possui um conjunto limitado de instruções e o
algoritmo deve ser expresso nos termos destas instruções
Descrição de Algoritmos
• Descrição Narrativa
– Especificação verbal dos passos em
linguagem natural.
– Desvantagens: a linguagem natural é prolixa
e imprecisa e freqüentemente pouco confiável
como um veículo de transferir informação.
• Fluxograma
– Um fluxograma mostra, de forma gráfica, a
lógica de um algoritmo, enfatizando passos
individuais e o fluxo de execução.
– Desvantagem: pouco escalável
Descrição de Algoritmos
• Pseudocódigo ou Linguagem Algorítmica ou
Pseudolinguagem
– Linguagem especial para expressão de algoritmos
– Funciona como uma "linguagem simplificada de
programação“
– Utiliza expressões concisas e pré-definidas
– Descrição textual, estruturada e regida por regras
– Utiliza-se palavras-chaves, indentação, apenas um
passo por linha
• Usaremos o Portugol
– Estrutura similar a do Pascal
Exemplo de Algoritmo
{ declaração de variáveis }
real: p1, p2, p3, p4, Media;
inicio
{ comandos de entrada de dados }
leia (p1);
leia (p2);
leia (p3);
leia (p4);
{ processamento - Calculo da media }
Media ← (p1 + p2 + p3 + p4)/4;
{ saída de dados }
escreva (‘ Media final = ’, Media);
fim.
Estruturas de Dados
• Um aspecto fundamental na construção de
algoritmos computacionais são as estruturas de
dados, que representam as informações do
problema a ser resolvido.
• Outros conceitos relacionados a estruturas de
dados
– Variável e Constante
• Estruturas de dados são organizadas em tipos
distintos de informação
– Tipos primitivos de dados
– Tipos estruturados
Variáveis
• Representam informações cujos valores são
modificados ao longo da execução do algoritmo.
• Podemos definir variáveis também como um
local onde um determinado valor (de um dos
tipos definidos) é armazenado.
• Assim, a variável é composta de dois elementos
básicos:
– Conteúdo: valor atual da variável
– Identificador: nome dado à variável para possibilitar
sua manipulação
Variáveis
O conceito de variável, na verdade, corresponde a “posições
de memória RAM”, onde serão armazenados os dados
manipulados pelo programa.
Constantes
• Representam valores constantes, ou seja,
que não variam no decorrer do algoritmo.
Tipos Primitivos
• Tipos primitivos são os grupos básicos de
informações que o computador manipula
• Inteiro
– Ex: 1 -4 100 0 -905
• Real
– Ex: 1,3 816,97 3,0 -0,0055
• Caracter
– Ex: ‘CASA’ ‘livro’ ’18’ ‘R$ 55,36’ ‘A’
• Lógico
– Falso, Verdadeiro (ou False, True)
Identificador
• Nome de um local onde se pode colocar qualquer valor
do conjunto de valores possíveis de um tipo básico
associado.
– Nome de uma variável
– Nome de uma constante
• Regras para formação de um identificador
– deve começar por um caracter alfabético (uma letra);
– pode ser seguido de letras e/ou dígitos;
– só é permitido o uso do caracter especial “_” situado entre letras
e/ou dígitos
• Exemplos de identificadores válidos
Identificador
• Exemplos de identificadores válidos
– Nome, X, y, ENDERECO, Aluno_01, Media
• Exemplos de identificadores inválidos
– 5X, E(13), A:B, X-Y, Nota/2

• O identificador deve representar de forma significativa o


conteúdo que irá armazenar
Declaração de Variáveis
• É a criação (ou definição) de locais na memória rotulados
com o identificador da variável (ou constante) que será
utilizada no algoritmo para a manipulação de um
determinado tipo de informação.

• Representação em Portugol

Tipo: Lista de Variáveis;


ou
Lista de Variáveis: Tipo;
Declaração de Variáveis
Exemplos
Inteiro: NUM, X;
real: parcela;
lógico: resposta;
real: PI;
caracter: NOME, ENDEREÇO;

• Neste momento, as variáveis ainda não contém nenhum


valor associado a elas.
• A declaração de variáveis deve ser feita antes da
definição das ações do algoritmo.
Expressões aritméticas
• + : adição
• - : subtração
• * : multiplicação
• / : divisão
• div : quociente : ex: 30 div 7 = 4 5 div 7 = 0
• mod : resto : 30 mod 7 = 2 5 mod 7 = 5
• Parênteses

Ex: 2 + (3 * 4)

• Precedência
– ()
– operador unário
– div, mod, *, /
– +, -
Expressões Relacionais
• > maior do que
• >= maior do que ou igual a
• < menor do que
• <= menor do que ou igual a
• = igual
• <> diferente

• 3 > 5 resulta falso


• 7 <= 7 resulta verdadeiro
• 3*4 - 5 < 2*3 - 4 resulta falso
Expressões Lógicas
• e
• ou
• não

• operadores relacionais têm prioridade mais


baixa que os operadores lógicos
– não (5 > 3) ou (5 < 3)
• false
Funções Matemáticas
• Representação em Portugol:
nome da função(argumento)
• O argumento é a informação que é dada à função para
que ela possa ser efetuada adequadamente. Pode ser
uma constante ou uma variável.

• Potenciação
– pot(x, y)
– x elevado a y
– pot(2,3)

• Radiciação
– rad(x)
– raiz quadrada de x
– rad(9)
Comando de Atribuição
• Serve para atribuir (ou associar) um valor a uma variável
• Sintaxe Geral em Pseudolinguagem:
identificador ← expressão ;
onde expressão pode ser um(a): constante, variável,
expressão matemática, função matemática, expressão
booleana, etc.
Comando de Atribuição
Exemplos

lógico: A, B, Erro;
inteiro: x;
caracter: Nome;

x ← 8 + 13 div 5;
B ← 5 = 3;
X ← 2;
A ← B;
Erro ← Verdadeiro;
Nome ← ‘Fulano de Tal’;
Comandos de Entrada e Saída de
Dados
• Representam as ações básicas de algoritmos
para recebimento e apresentação de dados,
respectivamente.
Comandos de Entrada e Saída de
Dados
• Entrada de Dados: informações que são fornecidas ao
programa pelo “usuário” durante a resolução do
problema.

• Representação em Portugol:
leia (identificador, identificador, ...);

• Ex:
leia (x);
leia (altura, idade, sexo);
Comandos de Entrada e Saída de
Dados
• Saída de Dados: informações que são mostradas ao
usuário como resposta ao problema.

• Representação em Portugol
escreva (expressão, expressão, ...);

• Ex:
escreva (‘Seu peso ideal eh : ’ , peso_ideal) ;
escreva (‘Media final = ’, (P1 + P2)/2) ;
Comentários
• Os comentários representam qualquer texto que
explique uma ação ou um dado usado no algoritmo. Eles
podem ser colocados em qualquer ponto do algoritmo,
utilizando { } como delimitador.
Esquema Genérico
{ declaração das variáveis }
inicio {começo do algoritmo}

{ corpo do algoritmo }
ação 1;
ação 2;
.
.
.
fim. { fim do algoritmo }
Exemplo de Algoritmo
{ declaração de variáveis }
real: p1, p2, p3, p4, Media;
inicio
{ comandos de entrada de dados }
leia (p1);
leia (p2);
leia (p3);
leia (p4);
{ processamento - Calculo da media }
Media ← (p1 + p2 + p3 + p4)/4;
{ saída de dados }
escreva (‘ Media final = ’, Media);
fim.
Estrutura de Sequencial
• Conjunto de comandos que são executados
numa seqüência linear, de cima para baixo, na
mesma ordem em que aparecem.
– Cada ação é seguida por um ponta-e-vírgula
Estrutura Sequencial
inicio {começo do algoritmo}
{ declaração das variáveis }

{ corpo do algoritmo }
ação 1;
ação 2;
.
.
ação n;
fim. { fim do algoritmo }
Exemplo de Algoritmo
inicio {cálculo da média aritmética}
{ declaração de variáveis }
real: N1, N2, N3, N4; {notas bimestrais}
real: Media; {média final}

{ comandos de entrada de dados }


leia (N1, N2, N3, N4);

{ processamento - Calculo da media }


Media ← (N1 + N2 + N3 + N4)/4;

{ saída de dados }
escreva (‘ Media final = ’, Media);
fim.
Exercícios
• Construa um algoritmo para calcular as
raízes de uma equação do 2o grau (Ax2 +
Bx + C), sendo que os valores A, B e C
são fornecidos pelo usuário (considere
que a equação possui duas raízes reais)
Exercícios
• Construa um algoritmo que, tendo como
dados de entrada dois pontos quaisquer
do plano, P(x1, y1) e Q(x2, y2), imprima a
distância entre eles.