Você está na página 1de 25

Algoritmos

Copyright 1997 - Adriano Joaquim de Oliveira Cruz


Introduo 1.
Representao de Algoritmos
Linguagem Natural 1.
Fluxogramas 2.
Pseudo-Linguagem 3.
2.
A Pseudo-Linguagem a--
Tipos de Dados 1.
Variveis 2.
Expresses
Expresses Aritmticas 1.
Expresses Lgicas 2.
3.
Comandos 4.
3.
Exemplos de Algoritmos 4.
Exerccios 5.
Introduo
Para resolver um problema no computador necessrio que seja primeiramente
encontrada uma maneira de descrever este problema de uma forma clara e precisa.
preciso que encontremos uma seqncia de passos que permitam que o problema
possa ser resolvido de maneira automtica e repetitiva. Alm disto preciso denir
como os dados que sero processados sero armazenados no computador. Portanto, a
soluo de um problema por computador baseada em dois pontos: a seqncia de
passos e a forma como os dados sero armazenados no computador. Esta seqncia
de passos chamada de algoritmo. Um exemplo simples e prosaico, de como um
problema pode ser resolvido caso forneamos uma seqncia de passos que mostrem
a soluo, uma receita para preparar um bolo.
A noo de algoritmo central para toda a computao. A criao de algoritmos para
resolver os problemas uma das maiores diculdades dos iniciantes em programao
em computadores. Isto porque no existe um conjunto de regras, ou seja um
algoritmo, que nos permita criar algoritmos. Caso isto fosse possvel a funo de
criador de algoritmos desapareceria. Claro que existem linhas mestras e estruturas
bsicas, a partir das quais podemos criar algoritmos, mas a soluo completa
depende em grande parte do criador do algoritmo. Geralmente existem diversos
algoritmos para resolver o mesmo problema, cada um segundo o ponto de vista do
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
1 de 25 08-08-2012 13:56
seu criador.
No seu livro Fundamental Algorithms vol. 1 Donald Knuth apresenta uma verso para
a origem desta palavra. Ela seria derivada do nome de um famoso matemtico persa
chamado Abu Jafar Maom ibn Ms al-Khowrism (825) que traduzido literalmente
quer dizer Pai de Jafar, Maom, lho de Moiss, de Khowrizm. Khowrizm hoje a
cidade de Khiva, na ex Unio Sovitica. Este autor escreveu um livro chamado Kitab
al jabr wal-muqabala (Regras de Restaurao e Reduo). O ttulo do livro deu
origem tambm a palavra lgebra.
O signicado da palavra muito similar ao de uma receita, procedimento, tcnica,
rotina. Um algoritmo um conjunto nito de regras que fornece uma
seqncia de operaes para resolver um problema especco. Segundo o
dicionrio do prof. Aurlio Buarque de Holando um algoritmo um: "Processo de
clculo, ou de resoluo de um grupo de problemas semelhantes, em que se
estipulam, com generalidade e sem restries, regras formais para a obteno de
resultado ou de soluo de problema."
Um algoritmo opera sobre um conjunto de entradas (no caso do bolo, farinha ovos,
fermento, etc.) de modo a gerar uma sada que seja til (ou agradvel) para o usurio
(o bolo pronto). Um algoritmo tem cinco caractersticas importantes:
Finitude:
Um algoritmo deve sempre terminar aps um nmero nito de passos.
Denio:
Cada passo de um algoritmo deve ser precisamente denido. As aes devem ser
denidas rigorosamente e sem ambiguidades.
Entradas:
Um algoritmo deve ter zero ou mais entradas, isto quantidades que so lhe so
fornecidas antes do algoritmo iniciar.
Sadas:
Um algoritmo deve ter uma ou mais sadas, isto quantidades que tem uma
relao especca com as entradas.
Efetividade:
Um algoritmo deve ser efetivo. Isto signica que todas as operaes devem ser
sucientemente bsicas de modo que possam ser em princpio executadas com
preciso em um tempo nito por um humano usando papel e lpis.
claro que todos ns sabemos construir algoritmos. Se isto no fosse verdade, no
conseguiramos sair de casa pela manh, ir ao trabalho, decidir qual o melhor
caminho para chegar a um lugar, voltar para casa, etc. Para que tudo isto seja feito
necessrio uma srie de entradas do tipo: a que hora acordar, que hora sair de casa,
qual o melhor meio de transporte, etc.
Um fator importante que pode haver mais de um algoritmo para resolver um
determinado problema. Por exemplo, para ir de casa at o trabalho, posso escolher
diversos meios de transporte em funo do preo, conforto, rapidez, etc. A escolha
ser feita em funo do critrio que melhor se adequar as nossas necessidades.
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
2 de 25 08-08-2012 13:56
Um exemplo de algoritmo pode ser as instrues que um professor passa aos seus
alunos em uma academia de ginstica. Por exemplo:
Repetir 10 vezes os quatro passos abaixo:
Levantar e abaixar brao direito; 1.
Levantar e abaixar brao esquerdo; 2.
Levantar e abaixar perna esquerda; 3.
Levantar e abaixar perna direita. 4.
1.
Para mostrar outro exemplo de algoritmo considere o seguinte problema. Dispomos
de duas vasilhas com capacidades de 9 e 4 litros respectivamente. As vasilhas no
tem nenhum tipo de marcao, de modo que no possvel ter medidas como metade
ou um tero. Mostre uma seqncia de passos, que usando as vasilhas de 9 e 4 litros
encha uma terceira vasilha de medida desconhecida com seis litros de gua.
Uma possvel soluo :
Encha a vasilha de 9 litros; 1.
Usando a vasilha de 9 litros, encha a vasilha de 4 litros; 2.
Despeje o que sobrou na vasilha de 9 litros (5 litros) na terceira vasilha. Observe
que falta um litro para completar os seis litros;
3.
Esvazie a vasilha de 4 litros; 4.
Torne a encher a vasilha de 9 litros; 5.
Usando a vasilha de 9 litros encha a vasilha de 4 litros; 6.
Esvazie a de 4 litros; 7.
Usando o que restou na vasilha de 9 litros (5 litros), encha novamente a vasilha
de quatro litros;
8.
Despeje o que sobrou na vasilha de 9 litros (1 litro) na terceira vasilha, que
agora tem 6 litros.
9.
Um outro exemplo de algoritmo o que resolve o seguinte problema. Considere cinco
rs esto posicionadas em seis casas da seguinte maneira:
r 1 r 2 r 3 r 4 r 5
As rs foram treinadas para trocar de casas, mas sempre obedecendo as seguintes
regras:
elas podem pular para a casa vizinha (frente ou trs), se ela estiver vazia;
elas podem pular sobre a r vizinha para uma casa livre (frente ou trs).
Mostre como as rs podem chegar a seguinte posio nal:
r 5 r 4 r 3 r 2 r 1
Este um problema de colocar em ordem um conjunto de dados, no caso ordenao
decrescente, tarefa muito comum em computao. Uma possvel soluo para este
problema esta mostrada na Figura a seguir. Observe que em negrito esto as rs que
esto no momento sendo dirigidas para o seu destino.
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
3 de 25 08-08-2012 13:56
A partir destes exemplos podemos ver que a criao de algoritmos tem muito de
inspirao. No entanto, a aparente desordem esconde alguma ordem. Observe que no
problema das rs, elas seguiram um plano bsico, que era fazer com que cada uma
delas, uma por vez, achasse a sua posio nal. A primeira a ir para sua posio nal
foi a r 1, em seguida a r 2 e assim por diante. Para fazer isto o algoritmo procura
liberar uma casa vazia logo direita da r que est se movendo. Uma vez que a r
atingiu o seu lugar, o algoritmo procura mover a casa vazia para esquerda at que
ela chegue perto da prxima r que ir se mover.
Computadores so mquinas muito ecientes na resoluo de problemas matemticos
ou que envolvam nmeros. Vamos agora mostrar um algoritmo que seja deste tipo.
Considere o seguinte problema. Um escritrio de previso do tempo armazena
diariamente a temperatura mdia de uma determinada regio. A tarefa descobrir
qual a menor temperatura jamais registrada nos arquivos do escritrio. Lembrar
que temperaturas podem ser negativas ou positivas. Um possvel algoritmo seria o
seguinte:
Incio do algoritmo.
Pegue a primeira temperatura registrada.
Anote esta temperatura como a menor de todas as temperaturas.
Enquanto ainda houver registros de temperaturas, execute repetidamente e
em ordem todas as instrues numeradas abaixo:
Pegue a prxima temperatura. 1.
Se esta temperatura for menor que quela registrada no momento
como a menor ento
jogue fora a anteriormente registrada e anote a nova temperatura
como a menor de todas.
2.
Leia a temperatura que est anotada como a menor. Esta a temperatura
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
4 de 25 08-08-2012 13:56
que estvamos procurando.
Fim do algoritmo.
Este algoritmo faz o seguinte. Pega a primeira temperatura e a anota como a menor j
encontrada. A partir da o algoritmo ca repetidamente lendo temperaturas dos
registros do escritrio comparando com a temperatura que no momento consta como
a menor de todas. Se a temperatura tirada dos arquivos for menor que a menor atual,
o algoritmo joga fora a temperatura anotada e guarda a que foi lida como a nova
menor temperatura. Quando no houver mais temperaturas para ler a que estiver
anotada como a menor a menor verdadeiramente.
Neste algoritmo mostramos como pode-se escrever um algoritmo para tratar e
processar nmeros, no caso temperaturas. Esta no a nica soluo possvel e
poderamos imaginar outras. Alm disso, temos a forma como o algoritmo foi escrito.
Esta maneira uma das maneiras que dispomos para descrever algoritmos. Este
algoritmo foi descrito em linguagem natural, ou seja a linguagem que normalmente
usamos para nos comunicarmos. Na prxima seo iremos mostrar outras maneiras
que podem ser usadas para escrever algoritmos.
Representao de Algoritmos
As formas mais comuns de representao de algoritmos so as seguintes:
Linguagem Natural
Os algoritmos so expressos diretamente em linguagem natural, como nos
exemplos anteriores.
Fluxograma Convencional
Esta um representao grca que emprega formas geomtricas padronizadas
para indicar as diversas aes e i decises que devem ser executadas para
resolver o problema.
Pseudo-linguagem
Emprega uma linguagem intermediria entre a linguagem natural e uma
linguagem de programao para descrever os algoritmos.
No existe consenso entre os especialistas sobre qual seria a melhor maneira de
representar um algoritmo. Atualmente a maneira mais comum de representar-se
algoritmos atravs de uma pseudo-linguagem ou pseudo-cdigo. Esta forma de
representao tem a vantagem de fazer com que o algoritmo seja escrito de uma
forma que est prxima de uma linguagem de programao de computadores.
Algoritmo de encontrar a menor temperatura dentro de registros de temperaturas
mostrada na seo anterior usou linguagem natural para representar o algoritmo.
Linguagem Natural
Como ilustrao de algoritmo em linguagem natural vamos considerar a receita
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
5 de 25 08-08-2012 13:56
abaixo. Por economia de texto e facilidade a receita no mostra as quantidades dos
ingredientes (as entradas). Alguns mais maldosos dizem que o cozinheiro no quis
divulgar o seu segredo.
Fil de peixe com molho branco.
{preparo dos peixes}
Lave os ls e tempere com o suco dos limes, sal, pimenta e salsinha
picada. Deixe por 1/2 hora neste tempero. Enxugue e passe cada l na
farinha de trigo. Depois passe pelos ovos batidos e frite na manteiga
at carem dourados dos dois lados.
{preparo do molho branco}
Coloque numa panela a manteiga, a farinha e o leite e misture bem. Em
fogo mdio, cozinhe at engrossar. Adicione o sal, a pimenta e o queijo.
Continue com a panela no fogo, cozinhando at que o queijo derreta,
mexendo constantemente.
{juntando os dois}
Adicione queijo parmeso ralado e queijo gruyre. Misture e ponha
sobre os ls.
Fim da receita do l de peixe com molho branco.
Observe que a receita foi subdividida em partes: preparo dos peixes, preparo do
molho branco e nalmente juntar as duas partes. Esta uma tcnica comum na
resoluo de problemas: dividir para conquistar. Vamos considerar agora uma outra
receita que tenha molho branco como parte, para ilustrar uma outra tcnica comum
da criao e descrio de algoritmos. A prxima receita esta:
Alface com molho branco.
{preparo do molho branco}
Coloque numa panela a manteiga, a farinha e o leite e misture bem. Em
fogo mdio, cozinhe at engrossar. Adicione o sal, a pimenta e o queijo.
Continue com a panela no fogo, cozinhando at que o queijo derreta,
mexendo constantemente.
{preparo da alface}
Derreta a manteiga. Junte a alface cortada. Salpique o sal e deixe
cozinhar por uns 5 a 10 minutos ou at a alface car tenra, ou o lquido
da panela secar.
{juntando os dois}
Junte ao molho branco e ao suco de limo. Coloque numa travessa e
enfeite em volta com po torrado cortado em tringulos.
Fim da receita do alface com molho branco
Imagine que os pratos abaixo fazem parte de um livro de receitas. Observe
atentamente as receitas. Perceba que os dois pratos usam molho branco e que, as
duas receitas, ensinam ao leitor como preparar molho branco. Imagine que este livro
de receitas tem 20 outros pratos ao molho branco. fcil perceber que este livro ter
numerosas pginas uma vez que, provavelmente, outras receitas bsicas (molho de
tomate, molho de mostarda, etc.) estaro repetidas em vrios pontos do livro.
Observe agora uma nova maneira de descrever estas duas receitas:
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
6 de 25 08-08-2012 13:56
Molho branco
Coloque numa panela a manteiga, a farinha e o leite e misture bem. Em
fogo mdio, cozinhe at engrossar. Adicione o sal, a pimenta e o queijo.
Continue com a panela no fogo, cozinhando at que o queijo derreta,
mexendo constantemente.
Fim da receita do molho branco
Fil de peixe com molho branco
{preparo dos peixes}
Lave os ls e tempere com o suco dos limes, sal, pimenta e salsinha
picada. Deixe por 1/2 hora neste tempero. Enxugue e passe cada l na
farinha de trigo. Depois passe pelos ovos batidos e frite na manteiga
at carem dourados dos dois lados.
{preparo do molho branco}
Prepare a receita bsica de molho branco.
{juntando os dois}
Adicione queijo parmeso ralado e queijo gruyre. Misture e ponha
sobre os ls.
Fim da receita do Fil de peixe com molho branco.
Alface com molho branco
{preparo do molho branco}
Prepare o molho branco segundo a receita bsica.
{preparo da alface}
Derreta a manteiga. Junte a alface cortada. Salpique o sal e deixe
cozinhar por uns 5 a 10 minutos ou at a alface car tenra, ou o lquido
da panela secar.
{juntando os dois}
Junte ao molho branco e ao suco de limo. Coloque numa travessa e
enfeite em volta com po torrado cortado em tringulos.
Fim da receita do Alface com molho branco.
Observe a economia de linhas de texto que foi possvel devido a separao da receita
de molho branco das demais. Se o mesmo procedimento for seguido para as demais
receitas bsicas, de se esperar que o livro que mais "ninho" do que antes.
Voc pode argumentar que, no mtodo anterior, era mais rpido seguir uma receita.
Agora, ao preparar o peixe ao molho branco, por exemplo, voc tem de interromper a
leitura, marcar a pgina onde voc estava, abrir na pgina da receita de molho
branco, aprender a prepar-lo e, ento, retornar receita do peixe. Voc tem razo,
mas, alm da economia de papel, existem outras vantagens em separar a receita do
molho branco. Imagine, por exemplo, que amanh voc descubra que o molho branco
ca uma delcia se levar uma pitada de alho. Basta modicar a receita de molho
branco, que aparece em um nico lugar no livro, e todas as receitas "ao molho
branco" estaro automaticamente modicadas. No mtodo anterior, seria preciso
modicar todas as receitas que usam molho branco, com o risco considervel de
esquecermos de modicar alguma delas.
Observe ainda a variao abaixo da receita do peixe:
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
7 de 25 08-08-2012 13:56
Fil de peixe com molho branco
{preparo dos peixes}
Lave os ls e tempere com o suco dos limes, sal, pimenta e salsinha
picada. Deixe por 1/2 hora neste tempero. Enxugue e passe cada l na
farinha de trigo. Depois passe pelos ovos batidos e frite na manteiga
at carem dourados dos dois lados.
{preparo do molho branco}
Compre molho branco no supermercado
{juntando os dois}
Adicione queijo parmeso ralado e queijo gruyre. Misture e ponha
sobre os ls.
Fim da receita do l de peixe com molho branco.
Voc prestou ateno? Ao invs de ensinar a preparar molho branco, a receita instrui
voc a compr-lo pronto, no supermercado. Ou, em outras palavras, possvel usar no
preparo do seu prato, ingredientes j prontos, preparados por outra pessoa, que voc
talvez nem conhea. Alm disso, se voc no um cozinheiro experiente, o molho
venda no supermercado j foi sucientemente testado e , provavelmente, gostoso.
Embora, nem todos vo concordar com tal infmia! Voc j tem problemas sucientes
tentando preparar um bom peixe. Talvez seja melhor usar o molho do supermercado e
no ter de se preocupar com essa parte do problema. O uso de algoritmos criados por
outros muito comum na informtica e pode reduzir consideravelmente o tempo de
criao de um sistema.
Toda a discusso acima tem uma forte analogia com o estudo de algoritmos e tcnicas
de programao. Isto car mais claro para voc mais tarde, quando estudarmos
procedimentos e funes.
Para ilustrar mais um conceito importante de algoritmos vamos analisar mais um
exemplo, considerando o problema de calcular a rea de uma mesa retangular. Este
clculo pode ser efetuado se seguirmos os seguintes passos.
Clculo da rea de uma mesa.
Medir a largura da mesa e anotar o resultado.
Medir o comprimento da mesa e anotar o resultado.
Multiplicar o comprimento pela largura e anotar o resultado.
O valor da rea da mesa o resultado anotado no passo anterior.
Fim do clculo da rea da mesa.
Vamos supor agora que dispomos de uma mesa e de uma toalha cobrindo esta mesa e
gostaramos de saber as reas da toalha e da mesa. O algoritmo pode ser escrito da
seguinte maneira.
Clculo das reas de uma mesa e de uma toalha.
Clculo da rea de uma mesa.
Medir a largura da mesa e anotar o resultado.
Medir o comprimento da mesa e anotar o resultado.
Multiplicar o comprimento pela largura e anotar o resultado.
O valor da rea da mesa o resultado anotado no passo anterior.
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
8 de 25 08-08-2012 13:56
Fim do clculo da rea da mesa.
Clculo da rea da toalha.
Medir a largura da toalha e anotar o resultado.
Medir o comprimento da mesa e anotar o resultado.
Multiplicar o comprimento pela largura e anotar o resultado.
O valor da rea da toalha o resultado anotado passo anterior.
Fim do clculo da rea da toalha.
Fim do clculo das reas da mesa e da toalha.
Observe que os algoritmos para clculo da rea da mesa e da toalha so parecidos,
trazendo a idia que existe um algoritmo mais geral que o de clculo da rea de um
objeto retangular. Este algoritmo mais geral pode ser ento aplicado tanto mesa
como toalha.
Este algoritmo mais geral poderia ser descrito da seguinte maneira:
Clculo da rea de um objeto retangular ou quadrado.
Medir a largura do objeto e anotar o resultado.
Medir o comprimento do objeto e anotar o resultado
Multiplicar o comprimento pela largura e anotar o resultado.
O valor da rea e o resultado anotado no passo anterior.
Fim do clculo da rea de um objeto retangular ou quadrado.
O algoritmo para clculo da rea da mesa e da toalha poderia ser reescrito de forma
mais compacta com as seguintes instrues:
Calcular a rea da mesa usando o algoritmo acima.
Calcular a rea da toalha usando o mesmo algoritmo.
Observe que neste caso um mesmo algoritmo pode ser aplicado a diferentes objetos,
reduzindo o nmero de algoritmos a serem denidos.
A maioria dos algoritmos contm decises, por exemplo, para atravessar uma rua
preciso vericar se o sinal de pedestres est verde e vericar se nenhum carro est
avanando o sinal, somente aps decidir se estes fatos se conrmaram poderei
atravessar a rua.
Para considerar um algoritmo que inclua decises vamos estudar um algoritmo que
nos ajude a decidir o que fazer em um domingo. Um possvel algoritmo poderia ser o
seguinte:
Algoritmo de domingo.
Acordar.
Tomar o caf.
Se estiver sol vou praia seno leio o jornal.
Almoar.
Ir ao cinema.
Fazer uma refeio.
Ir dormir.
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
9 de 25 08-08-2012 13:56
Final do domingo.
A possibilidade de tomada de decises a caracterstica mais importante de qualquer
linguagem de programao. Ela permite que ao computador simular
aproximadamente uma caracterstica humana que a escolha de opes. Sem esta
caracterstica o computador seria pouco mais do que uma veloz mquina de calcular.
Vamos agora considerar um exemplo um pouco mais matemtico e estudar o
algoritmo para calcular as razes de uma equao do segundo grau da forma
ax
2
+bx+c=0
As razes podem ser calculadas pelas frmulas
x
1
=[-b+(b
2
-4ac)
(1/2)
]/(2a)
x
2
=[-b-(b
2
-4ac)
(1/2)
]/(2a)
Aparentemente o algoritmo se reduziria ao clculo da frmula, no entanto ao
detalharmos as aes devemos prever tudo que pode acontecer durante o clculo
desta frmula. Por exemplo o que fazer se o valor do coeciente a for igual a zero?
Um possvel algoritmo o seguinte:
Algoritmo para clculo de uma equao do segundo grau.
Obter os coecientes a, b e c
Se o coeciente a for igual a zero informar que esta no uma equao do
segundo grau e terminar o algoritmo.
Caso contrrio continue e faa
Calcular delta=b
2
-4ac
Se o valor de delta for negativo informar que a equao no tem raizes
reais e terminar o algoritmo.
Caso contrrio continue e faa
Calcular a raiz quadrada de delta e guardar o resultado como raiz
Calcular x
1
=(-b + raiz)/(2a)
Calcular x
2
=(-b - raiz)/(2a)
Fornecer como resultado x
1
e x
2
Terminar o algoritmo.
Fim do algoritmo para clculo de uma equao do segundo grau.
Neste algoritmo em diversos pontos tivemos de tomar decises e indicar o que fazer
em cada uma das possibilidades, mesmo que seja mostrar que no podemos continuar
o algoritmo. Toda vez que decises tiverem de ser tomadas devemos incluir todas as
possibilidades para o evento que estamos considerando.
Este um dos possveis algoritmos por diversas razes. Por exemplo, poderamos
incluir no algoritmo o clculo das razes imaginrias ou no caso do coeciente a ser
igual a zero calcular como se fosse uma equao do primeiro grau.
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
10 de 25 08-08-2012 13:56
Fluxogramas
Esta forma de representao de algoritmos emprega vrias formas geomtricas para
descrever cada uma das possveis aoes durante a execuo do algoritmos. Existem
algumas formas geomtricas que so empregadas normalmente e que esto
mostradas na Figura abaixo. Cada uma destas formas se aplica a uma determinada
ao como est indicado. Existem outras formas que podem ser aplicadas, no entanto
nesta apostila estas formas sero sucientes para os exemplos que sero mostrados.
Como primeiro exemplo de um algoritmo descrito por meio de uxogramas vamos
considerar o exemplo do algoritmo para decidir o que fazer em um dia de domingo. A
Figura a seguir mostra o uxograma equivalente descrio feita por meio da
linguagem natural.
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
11 de 25 08-08-2012 13:56
Outro exemplo de um algoritmo descrito por meio de uxogramas o problema de
calcular a soluo da equao de primeiro grau
ax+b=0
que vale
x=-(b/a)
se a for diferente de zero. A Figura abaixo mostra um possvel algoritmo para resolver
este problema.
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
12 de 25 08-08-2012 13:56
Pseudo Linguagem
Este modo de representar algoritmos procura empregar uma linguagem que esteja o
mais prximo possvel de uma linguagem de programao de computadores de alto
nvel mas evitando de denir regras de construo gramatical muito rgidas. A idia
usar as vantagens do emprego da linguagem natural, mas restringindo o escopo da
linguagem. Normalmente estas linguagens so verses ultra reduzidas de linguagens
de alto nvel do tipo Pascal ou C. No prximo captulo veremos um exemplo de uma
destas pseudo-linguagens.
A Pseudo Linguagem a--
Para escrever estes exemplos de algoritmos usaremos uma pseudo linguagem de
programao, que chamaremos de a--. Nesta linguagem denimos um nmero
mnimo de comandos, o suciente para descrever os algoritmos exemplos. Os dados
no tem tipo denido, como em C e PASCAL. A linguagem como o C, que utilizado
no resto do programa baseada em funes. Todos os algoritmos so descritos por
funes, sendo que a funo bsica, e que deve existir sempre, pois ela sempre a
primeira a ser executada a funo principal.
Um exemplo simples da forma geral de um algoritmo em a-- o seguinte:
principal ()
incio
imprimir "Alo mundo."
fim
O algoritmo comea com a funo principal que a funo obrigatria em todos os
algoritmos. Os parnteses aps o nome primcipal so normalmente usados para
delimitar a lista de argumentos, tambm chamados parmetros que a funo ir
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
13 de 25 08-08-2012 13:56
receber para executar a sua tarefa. Neste caso a funo no est recebendo nenhum
parmetro. Esta algoritmo executa um nico comando que imprime o texto "Alo
mundo" em um dispositivo qualquer de sada de dados.
Tipos de Dados
Os algoritmos iro manipular dados, que normalmente so fornecidos pelos usurios,
e entregar resultados para estes usurios. Uma pergunta importante neste momento
: que tipo de dados poderemos manipular? As linguagens de programao
normalmente estabelecem regras precisas para denir que tipos de dados elas iro
manipular. A pseudo-linguagem a-- tambm estabelece, ainda que informalmente,
algumas regras que limitam o conjunto de dados existentes na natureza e que
podero ser manipulados pelos algoritmos.
Existem trs tipos bsicos de dados que a linguagem ir manipular:
Dados numricos
Dados alfa-numricos
Dados Logicos
Dados Numricos
Os dados numricos que os algoritmos podem manipular so de dois tipos:
Dados inteiros
Dados reais
O conjunto dos dados inteiros pode ser denido como Z={...,-3,-2,0,1,2,...}. O
conjunto dos nmeros reais inclui o conjunto dos nmeros inteiros, dos nmeros
fracionrios e dos nmeros irracionais. O conjunto dos nmeros fracionrios pode ser
formalmente denido como Q={p/q | p,q pertencem a Z}. O conjunto dos nmeros
irracionais engloba aqueles que no podem ser representados por uma frao, por
exemplo o nmero PI=3.141515... Os nmeros irracionais so armazenados at um
certo nmero de casas decimais que o computador consegue representar a partir da
as casas decimais so descartadas.
Neste ponto importante lembrar que dois fatos importantes. Primeiro computadores
trabalham com uma base diferente de 10. Computadores trabalham em base 2 e no
processo de converso entre a base 10 e a base 2 podem ocorrer problemas de perda
de dgitos signicativos. Por exemplo, o nmero real 0.6 ao ser convertido para a base
dois gera uma dzima peridica. Outro fato importante que a memria do
computador limitada e portanto o nmero de dgitos binrios que podem ser
armazenados funo deste tamanho. Deste modo o processo de converso e
desconverso entre bases pode causar perda de informao.
Os dados inteiros tem a seguinte forma: NmeroInteiro = [+,-]algarismo{algarismo}
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
14 de 25 08-08-2012 13:56
O sinal de + e - entre colchetes signica que um nmero inteiro pode ou no ter snal,
isto o sinal opcional. Em seguida temos um algarismo que obrigatrio. Isto
dados inteiros tem de ter pelo menos um algarismo. A seguir temos a palavra
algarismo entre chaves, o que signica que um nmero inteiro deve ter pelo menos
um algarismo e pode ser seguido por uma seqncia de algarismos.
So portanto exemplos de nmeros inteiros:
+3
3
-324
Os dados reais tem a seguinte forma:
[+,-]algarismo{algarismo}"."algarismo{algarismo}. Ou seja um nmero real pode ou
no ter sinal, em seguida um conjunto de pelo menos um algarismo, um ponto
decimal e depois um conjunto de pelo menos um algarismo. importante notar que o
separador entre a parte inteira e a fracionrio o ponto e no a vrgula.
So exemplos de nmeros reais:
0.5
+0.5
-3.1415
Dados Alfa-numricos
Dados alfa-numricos servem para tratamento de textos e normalmente so
compostos por uma seqncia de caracteres contendo letras, algarismos e caracteres
de pontuao. Nos algoritmos so normalmente representados por uma seqncia de
caracteres entre aspas, por exemplo:
"Linguagem de programao"
"Qual o seu nome?"
"12345"
Dados Lgicos
Este tipo de dados intensamente aplicado durante o processo de tomada de decises
que o computador frequentemente obrigado a fazer. Em muitos textos este tipo de
dados tambm chamado de dados booleanos, devido a George Boole, matemtico
que deu ao nome lgebra (lgebra booleana) que manipula este tipo de dados. Os
dados deste tipo somente podem assumir dois valores: verdadeiro e falso.
Computadores tomam decises, durante o processamento de um algoritmo, baseados
nestes dois valores. Por exemplo, considere a deciso abaixo:
Se raiz >= 0 imprima "Existe raiz" caso contrrio imprima "No existe raiz real."
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
15 de 25 08-08-2012 13:56
Nesta instruo aparece a expresso raiz >= 0, que procura descobrir se o valor de
raiz maior que 0. Esta expresso somente pode ter como resultado os valores:
verdadeiro ou falso. Nos nossos algoritmos estes valores sero representados por
verdadeiro e falso. Mais adiante car claro como este tipo de dados ser empregado
nos algoritmos.
Variveis
So os nomes que utilizamos para referenciar as posies de memria. Como j foi
mostrado no captulo de Introduo, a memria de um computador pode ser
entendida como um conjunto ordenado e numerado de palavras. Na maioria dos PCs
que usamos diariamente a memria pode ser considerada como um conjunto
ordenado e numerado de bytes (8 bits). As linguagens de programao de alto nvel
atribuem nomes as posies de memria que armazenam os dados a serem
processados. Deste modo os programadores tem mais facilidade para construir seus
algoritmos.
Na linguagem a-- um nome de varivel contrudo da seguinte maneira: uma letra
seguida por um conjunto de letras ou algarismos. Por exemplo, os nomes seguintes
so nomes de variveis vlidos:
i
valor
nome
nota1
Como nomes invlidos podemos dar os seguintes exemplos:
2nota (nome comeado por algarismo)
nome de aluno (nome com espaos em branco no meio)
Durante a apresentao da linguagem iremos fazer referncias a listas de variveis.
Uma lista de variveis um conjunto de nomes de variveis separados por vrgulas,
por exemplo: Ex. nota1, nota2, media
Na linguagem a-- uma varivel no precisa ser denida antes de ser usada em um
algoritmo. A varivel ir assumir, dinamicamente, o tipo do dado que estiver sendo
atribudo a esta varivel. Por exemplo se armazenarmos o valor 5 em uma varivel ela
passar a ser do tipo inteiro. Caso resolvamos trocar o valor para 3.14 a varivel
passar a ser real.
Expresses
Uma vez que j temos os dados e as variveis podemos passar ao prximo estgio que
seria a criao de expresses. No entanto, para que a expresso possa estar completa
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
16 de 25 08-08-2012 13:56
precisamos de operadores que possam ser aplicados a estes dados. Os operadores da
linguagem a-- so basicamente os mesmos encontrados em outras linguagens de
programao.
Na linguagem a-- existem basicamente trs tipos de expresses:
Expresses Aritmticas;
Expresses Lgicas;
Expresses Literais.
Cada um deste tipos tem os seus operadores prprios.
Expresses Aritmticas
Expresses aritmticas so aquelas que apresentam como resultado um valor
numrico que pode ser um nmero inteiro ou real, dependendo dos operandos e
operadores. Os operadores aritmticos disponveis em a-- esto mostrados na Tabela a
seguir.
Operador Descrio Prioridade
+ Soma 3
- Subtrao 3
* Multiplicao 2
/ Diviso 2
%
Mdulo (Resto da diviso
inteira)
2
+
Operador unrio (sinal de
mais)
1
-
Operador unrio (sinal de
menos)
1
A prioridade indica a ordem em que cada operao dever ser executada. Quanto
menor o nmero maior a prioridade da operao. Observe que o operador de
multiplicao o caracter asterisco, um smbolo que empregado na maioria das
linguagens para esta operao.
Expresses aritmticas podem manipular operandos de dois tipos: reais e inteiros. Se
todos os operandos de uma expresso so do tipo inteiro ento a expresso fornece
como resultado um nmero inteiro. Caso pelo menos um dos operandos seja real o
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
17 de 25 08-08-2012 13:56
resultado ser real. Isto pode parecer estranho a princpio, mas este procedimente
reete a forma como as operaes so executadas pelos processadores. Por exemplo
o resultado da operao 1/5 0, porque os dois operadores so inteiros. Caso a
expresso tivesse sido escrita como 1.0/5 ento o resultado 0.2 seria o correto. A
seguir mostramos exemplos de algumas expresses aritmticas:
A+B-C
a/b
3.14*(A+B)
Observar que as expresses somente podem ser escritas de forma linear, isto o sinal
de diviso uma barra inclinada. Portanto fraes somente podem ser escritas
conforme o exemplo acima (a/b). Outro ponto importante a ordem de avaliao das
expresses, as prioridades mostradas na Tabela dos operadores no suciente para
resolver todas as situaes e precisamos apresentar algumas regras adicionais:
Deve-se primeiro observar a prioridade dos operadores conforme a Tabela dos
operadores, ou seja operadores com maior prioridade (nmeros menores) so
avaliados primeiro. Caso haja empate na ordem de prioridade resolver a
expresso da esquerda para a direita.
1.
Parnteses servem para mudar a ordem de prioridade de execuo das
operaes. Quando houver parnteses aninhados (parnteses dentro de
parnteses) as expresses dentro dos mais internos so avaliadas primeiro.
2.
Vamos considerar alguns exemplos para mostrar como estas regras so aplicadas.
Considere as seguintes variveis:
A=2.0
B=4.0
C=1.0
Vamos ento analisar expresses com estas variveis e seus resultados.
A*B-C 1.
A*(B-C) 2.
B+A/C+5 3.
(B+A)/(C+5) 4.
A primeira expresso tem como resultado o valor 7, como era de se esperar. Na
segunda expresso a ordem de avaliao alterada pelo parnteses e primeiro feita
a subtrao e o resultado passa ser 6. A primeira operao na terceira expresso a
diviso que tem maior prioridade. Neste caso o resultado nal 11. Na ltima
expresso as somas so realizadas primeiro e por ltimo a diviso, cando o resultado
igual a 1.
Expresses Lgicas
Expresses lgicas so aquelas cujo resultado pode somente assumir os valores
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
18 de 25 08-08-2012 13:56
verdadeiro ou falso. Os operadores lgicos e sua ordem de precedncia so mostrados
na Tabela a seguir.
Operador Descrio Prioridade
ou Ou lgico 3
e E lgico 2
no No lgico 1
Estes operadores e seus dados tambm possuem uma espcie de tabuada que mostra
os resultados de operaes bsicas. A Tabela a seguir mostra os resultados da
aplicao destes operadores duas variveis lgicas.
A B A ou B A e B no A
falso falso falso falso verdadeiro
falso verdadeiro verdadeiro falso verdadeiro
verdadeiro falso verdadeiro falso falso
verdadeiro verdadeiro verdadeiro verdadeiro falso
H ainda um outro tipo de operadores que podem aparecer em expresses lgicas
que so os operadores relacionais. Estes operadores esto mostrados na Tabela a
seguir.
Operador Descrio
> maior que
< menor que
>= maior ou igual a
<= menor ou igual a
== igual a
!= diferente de
Alguns exmplos de expresses lgicas so:
(A e B) ou C
(A < 5) ou (b < 3)
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
19 de 25 08-08-2012 13:56
Comandos
Agora iremos apresentar uma srie de denies informais dos comandos da
linguagem a--.
Lista de comandos:
<lista de comandos>
Uma seqncia de comandos vlidos da linguagem. Em cada linha somente
pode haver um comando. Veremos que em alguns casos especiais um
comando pode se extender por mais de uma linha.
Comando de atribuio:
=
A expresso do lado direito do operador calculada e o seu resultado
atribudo varivel do lado esquerdo do sinal.
Exemplos:
a = 5.0
b = a + x - 3.0
Leitura dos valores de entrada do algoritmo:
ler <lista de variveis>
Uma lista de variveis uma lista de nomes de variveis separadas por
vrgula. Valores so lidos do teclado, um de cada vez e atribudos as
variveis listadas na ordem em que aparecem na lista.
Exemplos:
ler nota1, nota2
ler a, b, c
Impresso dos resultados dos algoritmos:
imprimir <lista de expresses>
Imprime os valores das sadas do algoritmo. Os valores das expresses so
impressos, um de cada vez, na ordem em que aparecem na lista. Uma
expresso pode ser uma varivel ou uma expresso aritmtica.
Exemplo:
imprimir media, nota1, nota2
imprimir x1, x2
imprimir a+b
Textos explicativos
possvel inserir textos explicativos entre as variveis da lista, ou mesmo
imprimir somente um texto explicativo para o usurio do programa. O texto
deve estar entre ".
Exemplo:
imprimir "A media das notas foi", media, "nota 1", nota1, "nota 2", nota2
imprimir "Entre com o salrio."
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
20 de 25 08-08-2012 13:56
Comando de repetio:
enquanto <expresso lgica> faa
<lista de comandos>
menquanto
Os comandos entre enquanto e menquanto so executados repetidamente
enquanto a condio de teste for satisfeita;
Exemplo:
i=0
enquanto i<10 faa
imprimir i, i*i
i=i+1
fimenquanto
Comando de teste (desvio)
Se <expresso lgica> ento
<lista de comandos1>
seno
<lista de comandos2>
mse
Testa se a expresso lgica verdade. Caso seja verdade ento executa a lista de
comandos 1, seno executa a lista de comandos 2.
Exemplo:
se (i % 2) == 0 ento
imprimir "O nmero par."
seno
imprimr "O nmero mpar."
fimse
Funo
- Funes so a base de toda a linguagem a--. Um programa composto de
funes. A primeira funo a ser executada obrigatoriamente chamada de
principal. O que uma funo executa est denido pela sua lista de comandos. A
lista de parmetros, uma lista de variveis contendo os valores que passamos
para a funo usar durante a sua execuo. Funes recebem valores
(parmetros) e retornam resultados ao algoritmo que usou a funo. Por
exemplo, considere que existe a funo seno(x) que calcule o seno de ngulo x, o
algoritmo abaixo calcula o seno de ngulos entre 0 e 90 de 1 em 1 grau.
principal()
inicio
ang = 0
enquanto ang <= 90 faa
imprimir ang, seno(ang)
ang = ang + 1
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
21 de 25 08-08-2012 13:56
fimenquanto
fim
Os parmetros que a funo recebe so chamados de parmetros de entrada.
Caso a funo precise retornar somente um valor ela pode usar o comando
retornar expresso. Existem casos onde a funo no precisa receber nenhum
parmetro nem retornar Por exemplo, considere o algoritmo abaixo em que dois
valores so lidos na funo principal em seguida uma funo chamada para
calcular e imprimir a soma destes valores.
nome da funo (<lista de parmetros>)
incio
<lista de comandos>
m
Exemplo:
principal ()
inicio
ler a
ler b
soma(a,b)
fim
soma (x,y)
inicio
imprimir "A soma vale ", x+y
fim
Neste exemplo o programa comea na funo principal que l os valores a e b.
Em seguida o programa chama a funo soma passando como parmetros os
valores das variveis a e b. A funo recebe estes valores e imprime a sua soma.
No entanto, em muitos casos necessrio retornar mais de um valor e neste
caso uma soluo e usar o que chamaremos de parmetro de entrada e sada.
Este um caso especial em que um parmetro serve para transmitir valores para
a funo e para retornar um valor, caso necessrio. Por exemplo, uma funo que
precise trocar os valores de duas variveis de posio. Esta funo recebe os
valores em duas variveis e retorna os valores trocados nestas mesmas duas
variveis.
Retorna de valores ao m da funo
retornar <valor>
- Caso a funo tenha que retornar algum valor para o algoritmo que chamou a
funo, deve-se usar este comando. Este valor pode ser fornecido atravs de uma
varivel ou de uma expresso.
Exemplo:
retornar x
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
22 de 25 08-08-2012 13:56
retornar y + 1
Comentrios
//
- O restante da linha um comentrio explicando o trecho de programa.
/* */
Tudo que estiver entre /* e */ considerado um comentrio. Este tipo de
comentrio pode se extender por diversas linhas.
Exemplos de Algoritmos
Algoritmo de Euclides
Dados dois nmeros positivos m e n encontre seu maior divisor comum, isto o
maior inteiro positivo que divide tanto m como n. Assuma que m sempre maior
que n, e n diferente de zero.
principal () incio
ler m, n;
r = m % n; // resto da diviso de m por n
enquanto r != 0 faa
m = n;
n = r;
r = m % n;
m do enquanto
imprimir n;
m de principal
Este algoritmo escrito em C pode ser visto no arquivo: au1ex1.c
1.
Multiplicao de dois nmeros inteiros positivos
principal () incio// achar quanto vale m*n
ler m, n;
r = 0;
enquanto n != 0 faa
r = r + m;
n = n-1;
m do enquanto
imprimr r;
m de principal
Este algoritmo escrito em C pode ser visto no arquivo: au1ex2.c
2.
Resoluo de uma equao do segundo grau.
Neste algoritmo vamos assumir que o coeciente a da equao sempre
diferente de 0.
3.
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
23 de 25 08-08-2012 13:56
principal () incio
ler a, b, c
delta = b*b-4*a*c
se delta < 0
ento
imprimir No h raizes reais.
seno incio
x1 = (-b + sqrt(delta))/(2*a)
x2 = (-b + sqrt(delta))/(2*a)
imprimir x1, x2
m de se
m
Este algoritmo escrito em C pode ser visto no arquivo: au1ex3.c
Exerccios
Os algoritmos abaixo devem ser escritos em a--
Escreva um algoritmo que leia trs nmeros e imprima o maior deles. 1.
Escreva um algoritmo que leia trs nmeros e os imprima em ordem crescente. 2.
Escreva um algoritmo que leia 10 nmeros e imprima o maior deles. 3.
Escreva um algoritmo que leia uma certa quantidade de nmeros e imprima o
maior deles e quantas vezes o maior nmero foi lido. A quantidade de nmeros a
serem lidos deve ser fornecida pelo usurio. Assuma que o usurio sempre
fornecer um nmero positivo.
4.
Modique o problema anterior de modo que caso o usurio digite um nmero
negativo o programa pea novamente a quantidade de nmeros e repita este
procedimento at que o usurio fornea um nmero positivo.
5.
Modique o problema anterior para permitir que o usurio possa em caso de
erro ter trs tentivas. Na terceira tentativa o programa deve terminar avisando
ao usurio a razo da interrupo.
6.
Escreva um algoritmo que leia um nmero inteiro entre 100 e 999 e imprima na
sada cada um dos algarismos que compem o nmero.
7.
Uma empresa paga R10.00 por hora normal trabalhada e R$ 15.00 por hora
extra. Escreva um programa que leia o total de horas normais e o total de horas
extras trabalhadas por um empregado em um ano e calcule o salrio anual deste
trabalhador.
8.
Assuma que o trabalhador do exerccio anterior deve pagar 10% de imposto se o
seu salrio anual for menor ou igual a R$ 12000.00. Caso o salrio seja maior
que este valor o imposto devido igual a 10% sobre R$ 12000.00 mais 25%
sobre o que passar de R$ 12000.00. Escreva um programa que calcule o imposto
devido pelo trabalhador.
9.
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
24 de 25 08-08-2012 13:56
ndice do Captulo
Algoritmos http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm
25 de 25 08-08-2012 13:56

Você também pode gostar