Escolar Documentos
Profissional Documentos
Cultura Documentos
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”.
”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:
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.
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.
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:
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:
Retorna NFACT
Início
Entrada
de dados
Processo
Saida de
Informação
Fim
Somar Fim
S N
(término)
(início) X > 10
(decisão)
X 10+Y Dividir()
A A (saída) (entrada)
(conectores)
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.
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.
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 4 Linguagem C
main(){
int N1, N2, Result;
scanf(”%d”,&N1);
scanf(”%d”,&N2);
Result = N1 + N2;
printf(”%d”,Result);
}
SomarToNum
N1, N2
Result N1 + N2
Result
Fim
• figura 7, em Fluxograma.
4.1 Exercı́cios
1. Construa um diagrama de fluxo que:
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
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.