Você está na página 1de 11

Objetivos do Captulo

Os objetivos deste captulo so apresentar o que so algoritmos, quais so as formas de represent-los e algumas das tcnicas usadas durante sua criao e desenvolvimento.

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. Esta seqncia de passos chamada de algoritmo. Um exemplo simples e prosaico de como um problema pode ser resolvido se fornecermos uma seqncia de passos que mostrem a soluo uma receita de 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. 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 sequncia de operaes para resolver um problema especfico. 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 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 informaes 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 pode haver mais de um algoritmo para resolver um problema. Por exemplo, para ir de casa at o trabalho, posso escolher diversos meios de transportes 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 de ginstica 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. Quatro rs esto posicionadas em cinco casas da seguinte maneira: r 1 r 2 r 3 r 4

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: r 4 r 3 r 2 r 1

Este um problema de colocar em ordem decrescente (ordenao), tarefa muito comum em computao. Uma possvel soluo para este problema a seguinte:

r 1

r 2

r 3

r 4

r 2 r 2 r 2 r 2 r 2 r 2 r 2 r 3 r 3 r 3

r 1 r 3 r 3 r 3 r 3 r 3 r 3 r 4 r 4 r 4 r 1 r 1 r 4 r 4 r 2 r 2 r 2 r 3

r 3 r 3 r 1 r 1 r 4 r 4 r 4 r 2 r 2

r 4 r 4 r 4 r 4 r 1 r 1 r 1 r 1 r 1 r 1 r 1

A partir de alguns exemplos anteriores 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.

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 que devem ser executadas e decises que devem ser tomadas 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. Nesta apostila empregaremos preferencialmente a pseudo-linguagem.

Linguagem Natural
Quase todos os algoritmos que apresentamos at este ponto foram escritos em linguagem natural, ou seja, no nosso caso, habitantes do Brasil, o portugs. O professor de ginstica instruiu seus alunos usando comandos em portugus. O quebra cabeas das vasilhas de gua foi resolvido e explicado por meio de instrues dadas, novamente, em portugus. Somente no caso das rs saltadoras preferimos mostrar os seus pulos por meio de uma espcie de tabela.

Fluxogramas

Esta forma de representao de algoritmos emprega vrias formas geomtricas para descrever cada uma das possveis aes 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.

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.

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.

Tcnicas de Construo de Algoritmos


Neste item iremos apresentar algumas tcnicas empregadas na construo de algoritmos. Estas tcnicas permitem construir e criar com economia de recursos algoritmos mais eficientes. Como exemplo iremos usar uma receita que um algoritmo descrito em lingugem natural. Para economizar texto e facilitar a apresentao a receita no mostra as quantidades dos ingredientes (as entradas). De qualquer maneira estas quantidades no so importantes para nosso estudo de algoritmos. Afinal no estamos em um curso de mestre cucas. Alguns maldosos dizem que o real motivo que o cozinheiro no quis divulgar o seu segredo. A receita a seguinte:

Fil de peixe com molho branco. o {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. o {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. o {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. A idia dividir uma grande tarefa no maior nmero possvel de tarefas simples. Quanto mais simples forem estas tarefas mais facilmente iremos resolv-los e mais segurana teremos que encontramos uma soluo correta. 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. o {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. o {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. o {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:

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
o

Fil de peixe com molho branco o {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. o {preparo do molho branco} Prepare a receita bsica de molho branco. o {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 o {preparo do molho branco} Prepare o molho branco segundo a receita bsica. o {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. o {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 o {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. o {preparo do molho branco} Compre molho branco no supermercado o {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. o Medir a largura da mesa e anotar o resultado. o Medir o comprimento da mesa e anotar o resultado. o Multiplicar o comprimento pela largura e anotar o resultado. o 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. o 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. o Fim do clculo da rea da mesa. o 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. o Fim do clculo da rea da toalha. Fim do clculo das reas da mesa e da toalha.

Note 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. o Medir a largura do objeto e anotar o resultado. o Medir o comprimento do objeto e anotar o resultado o Multiplicar o comprimento pela largura e anotar o resultado. o 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.

Deste modo 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. o Acordar. o Tomar o caf. o Se estiver sol vou praia seno leio o jornal. o Almoar. o Ir ao cinema. o Fazer uma refeio. o 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. o Obter os coeficientes a, b e c o Se o coeficiente a for igual a zero informar que esta no uma equao do segundo grau e terminar o algoritmo. o 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. 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.