Ap´os o estudo do problema, an´alise das diversas possibilidades de solu¸c˜ao e a escolha da melhor delas, cabe agora a tarefa de escrever um programa que implemente esta solu¸c˜ao. Antes, contudo, ´e preciso saber a diferen¸ca entre um algoritmo em um programa. Isto ser´a discutido neste cap´ıtulo.
3.1 O que ´ e um algoritmo?
Um algoritmo ´e uma sequˆencia extremamente precisa de instru¸c˜oes que, quando lida e executada por uma outra pessoa, produz o resultado esperado, isto ´e, a solu¸c˜ao de um problema. Esta sequˆencia de instru¸c˜oes ´e nada mais nada menos que um registro escrito da sequˆencia de passos necess´arios que devem ser executados para manipular informa¸c˜oes, ou dados, para se chegar na resposta do problema.
Isto serve por dois motivos: o primeiro ´e que atrav´es do registro se garante que n˜ao haver´a necessidade de se redescobrir a solu¸c˜ao quando muito tempo tiver passado e todos tiverem esquecido do problema; o outro motivo ´e que, as vezes, queremos que outra pessoa execute a solu¸c˜ao, mas atrav´es de instru¸c˜oes precisas, de maneira que n˜ao haja erros durante o processo. Queremos um algoritmo para a solu¸c˜ao do problema.
Uma receita de bolo de chocolate ´e um bom exemplo de um algoritmo (a lista de ingredientes e as quantidades foram omitidas, bem como a receita da cobertura):
Bata em uma batedeira a manteiga e o a¸c´ucar. Junte as gemas uma a uma at´e obter um creme homog^eneo. Adicione o leite aos poucos. Desligue a batedeira e adicione a farinha de trigo, o chocolate em p´o, o fermento e reserve. Bata as claras em neve e junte-as `a massa de chocolate misturando delicadamente. Unte uma forma retangular pequena
com manteiga e farinha e leve para assar em forno m´edio pr´e-aquecido por aproximadamente 30 minutos. Desenforme o bolo ainda
quente e reserve.
Este ´e um bom exemplo de algoritmo pois podemos extrair caracter´ısticas bastante interessantes do texto. Em primeiro lugar, a pessoa que escreveu a receita n˜ao ´e
21
necessariamente a mesma pessoa que vai fazer o bolo. Logo, podemos estabelecer, sem preju´ızo, que foi escrita por um mas ser´a executada por outro.
Outras caracter´ısticas interessantes que est˜ao impl´ıcitas s˜ao as seguintes:
• as frases s˜ao instru¸c˜oes no modo imperativo: bata isso,unte aquilo. S˜ao ordens, n˜ao sugest˜oes. Quem segue uma receitaobedece quem a escreveu;
• as instru¸c˜oes est˜ao na forma sequencial: apenas uma pessoa executa. N˜ao exis-tem a¸c˜oes simultˆaneas.
• existe uma ordem para se executar as instru¸c˜oes: primeiro bata a manteiga e o a¸cucar; depois junte as gemas, uma a uma, at´e acabar os ovos; em seguida adicione o leite.
• algumas instru¸c˜oes n˜ao s˜ao executadas imediatamente, ´e preciso entrar em um modo de repeti¸c˜ao de um conjunto de outras instru¸c˜oes: enquanto houver ovos n˜ao usados, junte mais uma gema. S´o pare quando tiver usado todos os ovos.
• algumas outras instru¸c˜oes n˜ao foram mencionadas, mas s˜ao obviamente ne-cess´arias que ocorram: ´e preciso separar as gemas das clarasantes de come¸car a tarefa de se fazer o bolo, assim como ´e preciso ainda antes quebrar os ovos.
• algumas instru¸c˜oes, ou conjunto de instru¸c˜oes, podem ter a ordem invertida:
pode-se fazer primeiro a massa e depois a cobertura, ou vice-e-versa. Mas nunca se pode colocar no forno a assadeira antes de se chegar ao t´ermino do preparo da massa.
Mesmo levando estas coisas em considera¸c˜ao, qualquer ser humano bem treinado em cozinha conseguiria fazer um bolo de chocolate razo´avel com as instru¸c˜oes acima, pois todas as receitas seguem o mesmo padr˜ao. As conven¸c˜oes que est˜ao impl´ıcitas no algoritmo s˜ao conhecidas de qualquer cozinheiro, pois seguem um formato padr˜ao.
O formato padr˜ao para algoritmos que vamos considerar ´e o seguinte:
• as instru¸c˜oes ser˜ao escritas uma em cada linha;
• as instru¸c˜oes ser˜ao executadas uma a uma, da primeira at´e a ´ultima linha, nesta ordem, a menos que o pr´oprio algoritmo tenha instru¸c˜oes que alterem este comportamento;
• em cada linha, uma instru¸c˜ao faz somente uma coisa;
• tudo o que est´a impl´ıcito dever´a ser explicitado.
A figura 3.1 ilustra a receita de bolo de chocolate escrita dentro deste formato padr˜ao.
3.1. O QUE ´E UM ALGORITMO? 23 Algoritmo para fazer um bolo de chocolate.
in´ıcio
Providencie todos os ingredientes da receita.
Providencie uma forma pequena.
Ligue o forno em temperatura m´edia.
Coloque a menteiga na batedeira.
Coloque o a¸cucar na batedeira.
Ligue a batedeira.
Enquanto um creme homog^eneo n~ao for obtido, junte mais uma gema.
Adicione aos poucos o leite.
Desligue a batedeira.
Adicione a farinha de trigo.
Adicione o chocolate em p´o.
Adicione o fermento.
Reserve a massa obtida em um lugar tempor´ario.
Execute o algoritmo para obter as claras em neve.
Junte as claras em neve `a massa de chocolate que estava reservada.
Misture esta massa delicadamente.
Execute o algoritmo para untar a forma com manteiga e farinha.
Coloque a forma no forno.
Espere 30 minutos.
Tire a forma do forno.
Desenforme o bolo ainda quente.
Separe o bolo em um lugar tempor´ario.
Fa¸ca a cobertura segundo o algoritmo de fazer cobertura.
Coloque a cobertura no bolo.
fim.
Figura 3.1: Algoritmo para fazer bolo de chocolate.
Infelizmente, nem todos conseguem fazer o bolo, pois existem instru¸c˜oes que so-mente os iniciados decifram:
• “adicione aos poucos”;
• “misturando delicadamente”;
• “quando o creme fica homogˆeneo?”. . .
No caso do computador a situa¸c˜ao ´e pior ainda, pois trata-se de um circuito eletrˆonico, de uma m´aquina. Por este motivo, as instru¸c˜oes devem ser precisas e organizadas.
Um algoritmo feito para um computador executar deve tornar expl´ıcito todas as informa¸c˜oes impl´ıcitas. Tamb´em deve evitar o uso de frases amb´ıguas ou imprecisas e deve ser o mais detalhado poss´ıvel. Tamb´em n˜ao pode ter frases de significado desconhecido.
Na pr´oxima se¸c˜ao vamos desenvolver melhor este tema.
3.2 O que ´ e um programa?
Um programa ´e a codifica¸c˜ao em alguma linguagem formal que garanta que os pas-sos do algoritmo sejam executados da maneira como se espera por quem executa as instru¸c˜oes.
Vamos imaginar, a t´ıtulo de ilustra¸c˜ao, que ´e a primeira vez que a pessoa entra na cozinha em toda a sua vida e resolve fazer um bolo de chocolate seguindo o algorimo 3.1 O algoritmo 3.1 foi escrito por um cozinheiro para ser executado por um outro cozinheiro, o que n˜ao ´e o caso, pois a pessoa ´e inexperiente em cozinha e n˜ao sabe o que significa “bater as claras em neve”. Significa que o novato vai ficar sem o bolo.
O novato precisaria de algo mais detalhado, isto ´e, de instru¸c˜oes meticulosas de como se obt´em claras em neve. Poderia ser algo como ilustrado na figura 3.2.
Algoritmo para fazer claras em neve in´ıcio
Repita os tr^es seguintes passos:
Pegue um ovo.
Quebre o ovo.
Separe a clara da gema.
Coloque somente a clara em um prato fundo.
At´e que todos os ovos tenham sido utilizados.
Pegue um garfo.
Mergulhe a ponta do garfo no prato.
Repita os seguinteis passos:
Bata a clara com o garfo por um tempo.
Levante o garfo.
Observe se a espuma produzida fica presa no garfo Quando a espuma ficar presa no garfo, pare.
Neste ponto suas claras em neve est~ao prontas.
fim.
Figura 3.2: Algoritmo para fazer claras em neve.
J´a temos algo mais detalhado, mas nosso inexperiente cozinheiro pode ainda ter problemas: como se separa a clara da gema? Este tipo de situa¸c˜ao parece n˜ao ter fim.
Qual ´e o limite do processo de detalhamento da solu¸c˜ao?
O problema ´e que o cozinheiro que escreveu a receita original n˜ao sabia o n´ıvel de instru¸c˜ao de quem ia efetivamente fazer o bolo. Para isto, ´e preciso que se estabele¸ca o n´ıvel m´ınimo de conhecimento para quem vai executar, assim quem escreve sabe at´e onde deve ir o n´ıvel de detalhamento de sua receita.
Um programa, neste sentido, ´e um algoritmo escrito de forma t˜ao detalhada quanto for necess´ario para quem executa as instru¸c˜oes. O algoritmo pode ser mais gen´erico, o programa n˜ao.
Como estamos pensando em deixar que o computador execute um algoritmo, pre-cisamos escrever um programa em uma linguagem que o computador possa entender
3.2. O QUE ´E UM PROGRAMA? 25 as instru¸c˜oes para posteriormente poder execut´a-las com sucesso.
Qual ´e, afinal, o conjunto de instru¸c˜oes que o computador conhece? Para responder a esta pergunta precisamos conhecer melhor como funciona um computador, para, em seguida, continuarmos no estudo de algoritmos.
3.3 Exerc´ıcios
1. Escreva algoritmos como os que foram escritos neste cap´ıtulo para cada uma das solu¸c˜oes do problema discutido na se¸c˜ao 2.1.
2. Escreva um algoritmo para o problema da troca de um ´unico pneu de um carro.
3. Escreva um algoritmo para o problema de trocar um pneu de uma bicicleta.