Anda di halaman 1dari 18

07/11/2017 Algoritmos

Algoritmos

Copyright 1997 - Adriano Joaquim de Oliveira Cruz

1. Introduo
2. Representao de Algoritmos
1. Linguagem Natural
2. Fluxogramas
3. Pseudo-Linguagem
3. A Pseudo-Linguagem a--
1. Tipos de Dados
2. Variveis
3. Expresses
1. Expresses Aritmticas
2. Expresses Lgicas
4. Comandos
4. Exemplos de Algoritmos
5. Exerccios

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 definir 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 dificuldades 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 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, filho 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 significado da palavra muito similar ao de uma receita, procedimento, tcnica, rotina. Um algoritmo um conjunto
finito de regras que fornece uma seqncia de operaes para resolver um problema especfico. 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:

http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 1/18
07/11/2017 Algoritmos

Finitude:
Um algoritmo deve sempre terminar aps um nmero finito de passos.
Definio:
Cada passo de um algoritmo deve ser precisamente definido. As aes devem ser definidas 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 especfica com as entradas.
Efetividade:
Um algoritmo deve ser efetivo. Isto significa que todas as operaes devem ser suficientemente bsicas de modo que
possam ser em princpio executadas com preciso em um tempo finito 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.

Um exemplo de algoritmo pode ser as instrues que um professor passa aos seus alunos em uma academia de ginstica.
Por exemplo:

1. Repetir 10 vezes os quatro passos abaixo:


1. Levantar e abaixar brao direito;
2. Levantar e abaixar brao esquerdo;
3. Levantar e abaixar perna esquerda;
4. Levantar e abaixar perna direita.

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 :

1. Encha a vasilha de 9 litros;


2. Usando a vasilha de 9 litros, encha a vasilha de 4 litros;
3. Despeje o que sobrou na vasilha de 9 litros (5 litros) na terceira vasilha. Observe que falta um litro para completar os
seis litros;
4. Esvazie a vasilha de 4 litros;
5. Torne a encher a vasilha de 9 litros;
6. Usando a vasilha de 9 litros encha a vasilha de 4 litros;
7. Esvazie a de 4 litros;
8. Usando o que restou na vasilha de 9 litros (5 litros), encha novamente a vasilha de quatro litros;
9. Despeje o que sobrou na vasilha de 9 litros (1 litro) na terceira vasilha, que agora tem 6 litros.

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 final:

http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 2/18
07/11/2017 Algoritmos

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.

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 final. A primeira a ir para sua posio final 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 eficientes 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:
1. Pegue a prxima temperatura.
2. 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.
Leia a temperatura que est anotada como a menor. Esta a temperatura 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
fica 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,
http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 3/18
07/11/2017 Algoritmos

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 grfica 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 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 fils e tempere com o suco dos limes, sal, pimenta e salsinha picada. Deixe por 1/2 hora neste
tempero. Enxugue e passe cada fil na farinha de trigo. Depois passe pelos ovos batidos e frite na
manteiga at ficarem 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 fils.
Fim da receita do fil de peixe com molho branco.

Observe que a receita foi subdividida em partes: preparo dos peixes, preparo do molho branco e finalmente 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 ficar tenra, ou o lquido da panela secar.
{juntando os dois}

http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 4/18
07/11/2017 Algoritmos

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:

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 fils e tempere com o suco dos limes, sal, pimenta e salsinha picada. Deixe por 1/2 hora neste
tempero. Enxugue e passe cada fil na farinha de trigo. Depois passe pelos ovos batidos e frite na
manteiga at ficarem 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 fils.
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 ficar 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 fique mais "fininho" 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 fica uma delcia se levar uma pitada de alho. Basta modificar a receita de molho branco, que aparece em um
nico lugar no livro, e todas as receitas "ao molho branco" estaro automaticamente modificadas. No mtodo anterior, seria
preciso modificar todas as receitas que usam molho branco, com o risco considervel de esquecermos de modificar alguma
delas.

Observe ainda a variao abaixo da receita do peixe:

Fil de peixe com molho branco


{preparo dos peixes}
Lave os fils e tempere com o suco dos limes, sal, pimenta e salsinha picada. Deixe por 1/2 hora neste
tempero. Enxugue e passe cada fil na farinha de trigo. Depois passe pelos ovos batidos e frite na

http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 5/18
07/11/2017 Algoritmos

manteiga at ficarem 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 fils.
Fim da receita do fil 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 suficientemente testado e , provavelmente, gostoso. Embora, nem todos vo concordar com tal
infmia! Voc j tem problemas suficientes 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 ficar 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.
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.

http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 6/18
07/11/2017 Algoritmos

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 definidos.

A maioria dos algoritmos contm decises, por exemplo, para atravessar uma rua preciso verificar se o sinal de pedestres
est verde e verificar se nenhum carro est avanando o sinal, somente aps decidir se estes fatos se confirmaram 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.
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

ax2+bx+c=0

As razes podem ser calculadas pelas frmulas

x1=[-b+(b2 -4ac)(1/2)]/(2a)

x2=[-b-(b2 -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 coeficiente a for igual a zero? Um
possvel algoritmo o seguinte:

Algoritmo para clculo de uma equao do segundo grau.


Obter os coeficientes a, b e c
Se o coeficiente 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=b2-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 x1=(-b + raiz)/(2a)
Calcular x2=(-b - raiz)/(2a)
Fornecer como resultado x1 e x2
Terminar o algoritmo.
http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 7/18
07/11/2017 Algoritmos

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 coeficiente a ser igual a zero calcular como se fosse uma equao do primeiro grau.

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 suficientes para os exemplos que sero
mostrados.

Como primeiro exemplo de um algoritmo descrito por meio de fluxogramas vamos considerar o exemplo do algoritmo para
decidir o que fazer em um dia de domingo. A Figura a seguir mostra o fluxograma equivalente descrio feita por meio da
linguagem natural.

http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 8/18
07/11/2017 Algoritmos

Outro exemplo de um algoritmo descrito por meio de fluxogramas 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.

http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 9/18
07/11/2017 Algoritmos

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 definir 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 definimos um nmero mnimo de comandos, o suficiente para descrever os algoritmos exemplos. Os dados
no tem tipo definido, 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
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 definir 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

http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 10/18
07/11/2017 Algoritmos

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 definido 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 definido 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 significativos. 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}

O sinal de + e - entre colchetes significa 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 significa 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

http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 11/18
07/11/2017 Algoritmos

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."

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 ficar 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 definida 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 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

http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 12/18
07/11/2017 Algoritmos

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 resultado ser real. Isto pode parecer estranho a princpio, mas este procedimente reflete 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 suficiente para resolver todas as
situaes e precisamos apresentar algumas regras adicionais:

1. 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.
2. 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.

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.

1. A*B-C
2. A*(B-C)
3. B+A/C+5
4. (B+A)/(C+5)

http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 13/18
07/11/2017 Algoritmos

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 final 11. Na ltima expresso as somas so realizadas primeiro
e por ltimo a diviso, ficando o resultado igual a 1.

Expresses Lgicas

Expresses lgicas so aquelas cujo resultado pode somente assumir os valores 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)

Comandos

Agora iremos apresentar uma srie de definies informais dos comandos da linguagem a--.

Lista de comandos:
http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 14/18
07/11/2017 Algoritmos

<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."

Comando de repetio:

enquanto <expresso lgica> faa


<lista de comandos>
fimenquanto
Os comandos entre enquanto e fimenquanto 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>

http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 15/18
07/11/2017 Algoritmos

seno
<lista de comandos2>
fimse
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 definido 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
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>
fim

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

http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 16/18
07/11/2017 Algoritmos

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 fim 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
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
1. 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;
fim do enquanto
imprimir n;
fim de principal
Este algoritmo escrito em C pode ser visto no arquivo: au1ex1.c

2. 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;
fim do enquanto
imprimr r;
fim de principal

Este algoritmo escrito em C pode ser visto no arquivo: au1ex2.c

3. Resoluo de uma equao do segundo grau.


Neste algoritmo vamos assumir que o coeficiente a da equao sempre diferente de 0.

principal () incio

http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 17/18
07/11/2017 Algoritmos

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
fim de se
fim

Este algoritmo escrito em C pode ser visto no arquivo: au1ex3.c

Exerccios
Os algoritmos abaixo devem ser escritos em a--

1. Escreva um algoritmo que leia trs nmeros e imprima o maior deles.


2. Escreva um algoritmo que leia trs nmeros e os imprima em ordem crescente.
3. Escreva um algoritmo que leia 10 nmeros e imprima o maior deles.
4. 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.
5. Modifique 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.
6. Modifique 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.
7. Escreva um algoritmo que leia um nmero inteiro entre 100 e 999 e imprima na sada cada um dos algarismos que
compem o nmero.
8. 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.
9. 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.

ndice do Captulo

http://equipe.nce.ufrj.br/adriano/c/apostila/algoritmos.htm 18/18