Você está na página 1de 10

Algoritmo e Lógica de Programação

Introdução
Prof. Wagner Toscano
wt@wagnertoscano.eti.br

6 de março de 2009

Programar é basicamente construir algoritmos. Essa definição relaciona o aspecto fundamental, a construção
de programas. Construção de programas são estruturas de dados utilizadas no algoritmo para representar as
informações do problema a ser resolvido.
De fato, no processo de construção de programas, a formulação do algoritmo e a definição das estruturas de dados
a serem utilizadas estão intimamente relacionadas. Isto é,

“Decisões sobre as estruturações dos dados não podem ser feitas sem conhecimento dos algoritmos apli-
cados a eles, e vice e versa, a estrutura e a escolha dos algoritmos depende, muitas vezes, da estrutura de
dados”.

Em um algoritmo (e em particular em um programa) deve-se distinguir claramente dois aspectos complementares:


um aspecto estático e um aspecto dinâmico.
A formulação de um algoritmo geralmente consiste em um texto contendo instruções (comandos ou ações) que
devem ser executadas em uma ordem prescrita. Uma ação é um evento que ocorre em um perı́odo de tempo
finito, estabelecendo um efeito intencionado e bem definido. Como exemplos:

”caminhar até a próxima esquina”, ”colocar um livro em cima de uma mesa”, ”descascar as batatas para
o jantar”, ”atribuir o valor 3.14 a uma variável”.

Esses textos são representações concretas dos algoritmos e tem um caráter estático, expandindo somente no espaço.
Por outro lado esses textos não tem importância em sı́, mas os efeitos que podem evocar quando executados no
tempo, dado um conjunto de ”valores iniciais”. Cada execução de um algoritmo é um evento dinâmico, evoluindo no
tempo.
A grande dificuldade na concepção e no entendimento de algoritmos é o problema do relacionamento desses
aspectos, ou seja: como entender (”visualizar”) as estruturas dinâmicas das possı́veis execuções do algoritmo a partir
da estrutura estática do texto do algoritmo.

1 Lógica
A lógica do cotidiano (do dia a dia), as vezes é massivamente utilizada sem no entanto se aperceber disso. A lógica
pode ser descrita como:

Coerência de raciocı́nio de idéias


ou ainda
Seqüência coerente, regular e necessária de acontecimentos, de coisas.
Como exemplo, têm-se:

1
ALP Introdução

1. Sair do Banco.
2. Aguardar a vez de ser atendido.
3. Entrar na fila do caixa.
4. Digitar a senha.
5. Entrar no banco.
6. Informar o valor a ser retirado.
7. Procurar a fila do caixa.
8. Pegar o comprovante do saque, o cartão eletrônico e o dinheiro.
9. Conferir o valor em dinheiro.

Tabela 1: Seqüência de ações a serem efetuadas, para retirada de dinheiro.

O número 3 é menor que o número 5.


O número 7 é maior que o número 5.
Logo, o número 3 é menor que os números 5 e 7.

Quando chove, não é preciso regar as plantas no jardim.


Hoje choveu.
Logo, hoje não é preciso regar as plantas no jardim.

O Brasil fica na América do Sul.


(Quem nasce no Brasil é brasileiro).
A América do Sul fica no continente americano.
(Quem nasce no continente americano é americano.)
Logo, os brasileiros são americanos.

O Raciocı́nio Lógico nasce de um conjunto de idéias desordenadas. Normalmente, pelo motivo de querer chegar
ao resultado mais rapidamente. Como exemplo, na seqüência de ações a seguir (tabela 1), veja se é possı́vel retirar o
dinheiro de um banco, obedecendo, estritamente, a seqüência descrita.

A Lógica de Programação tem como intuito resolver problemas com maior rapidez e menor esforço. Isso é possı́vel
quando se consegue automatizar tarefas. As tarefas devem ser realizadas pelo computador de forma automática, e
ter sido anteriormente, divididas em etapas e colocadas em uma seqüência de ações, e só então inseridas na máquina.
Para isso, a meta principal de um programador é resolver problemas utilizando soluções lógicas, e dessa forma obter
resultados eficientes (corretos) e eficazes (com qualidade).

1.1 Exercı́cios
1. Aplicando um raciocı́nio lógico, resolva o enunciado:

Existe um rio a ser atravessado por 3 pessoas. Essas pessoas pesam 50, 50 e 100kg. Para atravessar
esse rio, as 3 pessoas dispõem de uma canoa que leva no máximo 100kg por viagem. Essa canoa
tem que ser conduzida, isto é, ela não navega sozinha. Como essas pessoas chegam ao outro lado da
margem?

2. Menos conhecidos que seus primos distantes, companheiros da Branca de Neve, os cinco anões desta história
raramente têm companhia. Eles são lenhadores. Quando vão para a floresta, cada um põe na cabeça um boné de
cor diferente. E cada anão derruba apenas um tipo de árvore, diferente da dos outros quatro. Com as indicações
a seguir, associe cada anão ao seu boné e à sua árvore.

a) Léo usa boné vermelho.


b) Dino derruba olmos.
c) O anão que derruba carvalhos não usa boné amarelo.
d) Quem usa boné verde corta salgueiros.
e) Boni não usa boné amarelo.
f) Leno usa boné azul e não preto.
g) Boni derruba maçarandubas.
h) O anão de boné azul derruba pinheiros.

6 de março de 2009 2 Prof. Wagner Toscano


ALP Introdução

3. Em uma corrida, estão alinhados, lado a lado, 8 carros de marcas e cores diferentes. Estabeleça a ordem em
que os carros estão dispostos, com base nas informações:

a) O Ferrari está entre os carros vermelho e cinza.


b) O Lotus é o segundo carro à direita do carro creme e o segundo a
esquerda do carro marrom.
c) O carro cinza está à esquerda da Lotus.
d) À direita do carro verde está o March.
e) O Shadow não tem carro algum à sua esquerda e está à esquerda
do carro verde.
f) O Mclaren é o segundo carro à esquerda do Ferrari e o primeiro à
direita do carro azul.
g) O Tyrrel não tem carro à sua direita e está logo depois do carro
preto.
h) O carro preto está entre o Tyrrel e o carro amarelo.
i) O Lola é o segundo carro à esquerda do Isso.

2 Algoritmos
Algoritmo não é a solução de um problema, senão, cada problema teria um único algoritmo. Algoritmo é um caminho
para a solução de um problema, e em geral, são diversos os caminhos. O algoritmo deve ser entendido como o alicerce
de uma casa, se não for bem construı́do o resultado é algo de pouca duração.
Sabendo que Lógica de Programação é a técnica de encadear pensamentos, ou organizar as idéias em uma
seqüência lógica, para atingir determinado objetivo. E que Sequência Lógica são ações executadas, de forma
organizada e lógicamente dispostas, com o objetivo de solucionar um determinado problema.
As ações a serem executadas podem ser denominadas de Instruções, que são um conjunto de regras, ou normas
definidas para a realização de algo. O objetivo das instruções é manipular dados. Um dado é um conjunto
de sı́mbolos, sem informação perceptı́vel, como exemplo OIOCOMB. Organizando os sı́mbolos dos dados e/ou
agregando novos dados organizados tem-se uma informação. A Informação pode ser definida, então, como um
conjunto de sı́mbolos que possuem nexo em um determinado universo. Utilizando o dado anterior, tem-se a informação
COMBOIO.
Esse processo de organizar/agrupar os dados em informações é denominado de Processamento, mais comnhecido
com o complemento: Processamento de Dados.
Com os conceitos, anteriores, pode-se definir que o Algoritmo é uma seqüência finita de instruções, logicamente
organizadas, que processam os dados com o intuito de fornecer informações, ou,

é uma sequência finita de ações que contribuem para a execução de uma tarefa.
Aplicando o conceito em um processo denominado de chupar uma bala:
a) pegar uma bala.
b) retirar o papel.
c) colocar bala na boca.
d) jogar papel no lixo.

O resultado da tradução de um algoritmo para uma linguagem de programação (C, Algol, Fortran, OGL, Java)
é denominado de Programa. Esses programas são interpretados pelo compilador da respectiva linguagem, trans-
formandos em linguagem de máquina (seqüências de 0s e 1s. A linguagem de máquina é a única linguagem que um
processador sabe interpretar e executar.

3 Representação de um algoritmo
Um algoritmo pode ser representado de várias formas:
Por meio de um idioma : Forma utilizada nos manuais de instruções, nas receitas culinárias, etc.
Por meio de uma linguagem de Programação : Forma utilizada por alguns programadores experientes, que
”pulam”a etapa do projeto do programa (algoritmo) e passam direto para a programação em si.
Por representação gráfica : Utiliza formas geométricas para substituir algumas palavras.
As formas mais utilizadas, e categóricas, são:

6 de março de 2009 3 Prof. Wagner Toscano


ALP Introdução

Falso N > 1 ? Verdadeiro


NFACT 2
Para I 3 ... N
NFACT 1
NFACT
NFACT * I

Retorna NFACT

Figura 1: Diagrama Nassi-Shneiderman, representando o cálculo do fatorial de um número N .

Início
Entrada
de dados

Processo

Saida de
Informação

Fim

Figura 2: Exemplo de uma representação de algoritmo em Diagrama de Fluxo.

• Diagrama de Nassi-Shneiderman (Diagrama de Chapin).


Os Diagramas Nassi-Shneiderman, também denominados de Diagramas de Chapin, surgiram nos anos 70, como
uma maneira de ajudar nos esforços da abordagem de programação estruturada. Um tı́pico diagrama Nassi-
Shneiderman pode ser visualizado na figura 1. O exemplo representa o algoritmo para cálculo do fatorial de
um número N .Apesar de o diagrama ser de fácil leitura e entendimento, sua confecção é trabalhosa. A idéia
básica deste diagrama é representar as ações de um algoritmo dentro de um único retângulo, subdividindo-o
em retângulos menores, que representam os diferentes blocos de seqüência de ações a serem procesadas.
• Fluxograma (Diagrama de Fluxo):
Os Fluxogramas ou Diagramas de Fluxo, são uma representação gráfica que utilizam formas geométricas padro-
nizadas conectadas por linhas de fluxo, para indicar as diversas ações (instruções, tarefas, processos) e decisões
que devem ser seguidas para resolver o problema em questão. permitindo visualizar os caminhos e as etapas, do
processamento de dados, possı́veis. Na figura 2, pode ser visualizado um exemplo de fluxograma, e na figura 3,
pode ser visualizado um fluxo para escovar os dentes. Porém, os sı́mbolos que serão utilizados nesta disciplina
estão representados na figura 4.
• Português Estruturado (Pseudocódigo, Portugol ou Pseudolinguagem)
O Português Estruturado, é uma forma especial de linguagem bem mais restrita que a Lı́ngua Portuguesa e com
significados bem definidos para todos os termos utilizados nas instruções (comandos). Essa linguagem também
é conhecida como Portugol (junção de Português com Algol), Pseudocódigo ou Pseudolinguagem.
1. Portugol, utiliza expressões em português e sı́mbolos matemáticos
2. Pseudocódigo, mistura o Portugol com algumas sintaxes de código de uma linguagem de programação
especı́fica.

6 de março de 2009 4 Prof. Wagner Toscano


ALP Introdução

Figura 3: Fluxograma para escovar os dentes.

Somar Fim

S N
(término)
(início) X > 10

(decisão)

X  10+Y Dividir()

(processo) (chamada a outro


processo) Tudo Bom? X, Y

A A (saída) (entrada)

(conectores)

Figura 4: Sı́mbolos de fluxograma que serão utilizados nesta disciplina.

6 de março de 2009 5 Prof. Wagner Toscano


ALP Introdução

Figura 5: Disposição inicial da Torre de Hanoi.

3. Pseudolinguagem, Acrescenta ao pseudocódigo a estrutura de uma linguagem especı́fica.


O Português Estruturado na verdade é uma simplificação extrema da lı́ngua portuguesa, limitada a pouquı́ssimas
palavras e estruturas que têm significado pré-definido, pois deve-se seguir um padrão. Emprega uma linguagem
intermediária entre a linguagem natural e uma linguagem de programação, para descrever os algoritmos.
O conjunto de palavras e regras que definem o formato das sentenças válidas chama-se de “sintaxe da lingua-
gem”. A sintaxe do Português Estruturado não precisa ser seguida tão rigorosamente quanto a sintaxe de uma
linguagem de programação, já que o algoritmo não será executado como um programa.
Embora o Português Estruturado seja uma linguagem bastante simplificada, possui todos os elementos básicos
e uma estrutura semelhante à de uma linguagem de programação de computadores. Portanto, resolver proble-
mas com português estruturado pode ser uma tarefa tão complexa quanto a de escrever um programa em uma
linguagem de programação qualquer só não tão rı́gida quanto a sua sintaxe, ou seja, o algoritmo não deixa
de funcionar se esquecer de colocar um ’;’ (ponto-e-vı́rgula), já alguns programas não funcionariam. Na algo-
ritmo 3.1, pode ser visualizado um exemplo de algoritmo na forma de representação de português estruturado.

Algoritmo 3.1: Exemplo de uma representação de algoritmo em Português estruturado.


Recebe: Opcional
Declara: Opcional
inı́cio
...
<instruções>
...
retorna Opcional
fim

Não existe consenso entre os especialistas sobre qual é a melhor maneira de representar um algoritmo.
Um exemplo sobre a “Torre de Hanoi”. O problema a seguir foi criado em 1883 pelo matemático francês Edouard
Lucas (1842-1891), que também criou uma lenda curiosa para enunciar o problema.
Existem 3 hastes. Uma das hastes serve de suporte para três discos de tamanhos diferentes (Pequeno,
Médio e Grande). Os discos menores são sempre colocados sobre os discos maiores. Na figura 5 pode ser
visualizada a disposição dos discos.
O objetivo é mover todos discos para outra haste, porém só pode ser movimentado um disco de cada vez e um disco
maior nunca pode ser colocado sobre um disco de menor tamanho.

Solução : Em forma narrativa dá-se nome às hastes: {1, 2, 3}, e aos discos: {P, M, G}. Considera-se que inicialmente
os discos estão na haste 1, como pode ser visualizado na figura 5. A seqüência de ação será:
1) move o disco P para a haste 3.
2) move o disco M para a haste 2.
3) move o disco P para a haste 2.
4) move o disco G para a haste 3.
5) move o disco P para a haste 1.
6) move o disco M para a haste 3.
7) move o disco P para a haste 3.

6 de março de 2009 6 Prof. Wagner Toscano


ALP Introdução

Figura 6: Algoritmo gráfico do problema da Torre de Hanoi.

A solução pode ser representada, também, de forma gráfica, desenhando as hastes e a posição dos discos a cada
instante (ou passo). Como pode ser visualizado na figura 6, com 3 discos foi necessário efetuar, no mı́nimo, 7 passos
para solucionar o problema. Quantos passos serão necessários para mover 4 discos? E para n discos?

OBS:As expressões matemáticas, quando escritas em Algoritmos Estruturados, devem ser “linearizadas”,

isto
é, devem ser escritas em uma única linha, ou diversas linhas. Porém, como exemplo, sem os sı́mbolos de . . . ou . . .2

4 Exemplos de algoritmos
A seguir exemplos de algoritmo, com base no seguinte enunciado:
Desenvolva um algoritmo que receba 2 números inteiros, faça a soma e mostre o resultado.

• algoritmo 4.1, em Portugol;

Algoritmo 4.1: SomaToNum


Declara: N 1, N 2, Result inı́cio
N1, N2 ← Ler Teclado
Result ← N1 + N2
Mostrar Result
fim

• algoritmo 1, em Pseudocódigo, tendo como base a linguagem Pascal;


• algoritmo 2, em Pseudolinguagem, sendo mais tendencioso à linguagem Pascal, por utilizar sı́mbolos pecı́ficos
de uma linguagem, neste caso Pascal.
• algoritmo 3, em Linguagem Pascal;
• algoritmo 4, em Linguagem C;
• algoritmo 5, em Linguagem Smalltalk.

6 de março de 2009 7 Prof. Wagner Toscano


ALP Introdução

Algorithm 1 Pseudocódigo
program SomaToNum
var N1, N2, Result: inteiro
inı́cio
leia N1
leia N2
Result ← N1 + N2
escreva ← Result
fim.

Algorithm 2 Pseudolinguagem
program SomaToNum;
var N1, N2, Result: inteiro;
inı́cio
leia N1;
leia N2;
Result:= N1 + N2;
escreva Result;
fim.

Algorithm 3 Linguagem Pascal


program SomaToNum;
var N1, N2, Result: integer;
begin
read(N1);
read(N2);
Result:= N1 + N2;
write(Result);
end.

Algorithm 4 Linguagem C
main(){
int N1, N2, Result;
scanf(”%d”,&N1);
scanf(”%d”,&N2);
Result = N1 + N2;
printf(”%d”,Result);
}

Algorithm 5 Linguagem Samlltalk


somaToNum:
|N 1, N 2|
N1:= (Dialog request: ’Primeiro número’).
N2:= (Dialog request: ’Segundo número’).
Result:= N1 + N2.
’Result’ printNl!
.

6 de março de 2009 8 Prof. Wagner Toscano


ALP Introdução

SomarToNum

N1, N2

Result N1 + N2

Result

Fim

Figura 7: Fluxograma do enunciado.

• figura 7, em Fluxograma.

6 de março de 2009 9 Prof. Wagner Toscano


ALP Introdução

4.1 Exercı́cios
1. Construa um diagrama de fluxo que:

a) Leia a cotação do dólar.


b) Leia um valor em dólares.
c) Converta esse valor para Real.
d) Mostre o resultado.

2. Desenvolva um diagrama que:

a) Leia 4 (quatro) números.


b) Calcule o quadrado para cada um.
c) Some todos os quadrados calculados.
d) Mostre o resultado.

3. Construa um algoritmo e o diagrama de fluxo, para pagamento de comissão de vendedores de peças, levando-se
em consideração que sua comissão será de 5% do total da venda e que exista os seguintes dados:

a) Identificação do vendedor.
b) Código da peça.
c) Preço unitário da peça.
d) Quantidade vendida.

4. Existem 3 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.
5. Em uma determinada noite, acontece uma queda de energia. Existe 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.
6. Desenvolva um algoritmo que represente a fórmula de Baskara:

−b ± b2 − 4ac
Raizes =
2a
Sabe-se que:

• X 2 , pode ser representado por: X ∗ X = X ∧ 2 Porém, se X for levado à centésima potência, tem-se:
X ∗ X ∗ X ∗ . . . = X ∧ 100.
√ 1
• X, pode ser representado por X 2 = X 0,5 = X ∧ 0, 5

7. Desenvolva um algoritmo que represente a fórmula de Pitágoras:

H 2 = Ca2 + Co2

Referências
[1] CARVALHO, Flávia Pereira de Algoritmos. Disponı́vel em: http://fit.faccat.br/f̃pereira/formas rep algoritmos.html.
Acesso em: 21/02/2006.
[2] EGYPTO, Cândido Introdução à Programação.João Pessoa, ASPER-Associação Paraibana de Ensino Renovado,
03/2004.
[3] GAMA, Claudia Introdução à Lógica de Programação - MAT 146. Universidade Federal da Bahia, Departamento
de Ciência da Computação, 01/2004.
[4] MORAES, Paulo Sérgio de Lógica de Programação. Unicamp, Centro de Computação - DSC, 04/2000.
[5] NASSI, I. SHNEIDERMAN, B. FlowChart Techniques for Estructured Programming. SIGLAN Notices, August,
1973.
[6] PEREIRA, Vania Cristina de Souza Algoritmos e Lógica de Programação. Notas de Aula.

6 de março de 2009 10 Prof. Wagner Toscano

Você também pode gostar