• Nenhum resultado encontrado

ia ter que parar nos boxes de qualquer maneira para trocar os pneus. . . O cara ´e um gˆenio.

2.3 Conclus˜ ao

Mesmo para um problema simples existem diversas solu¸c˜oes. A escolha da melhor depende de v´arios fatores. Por exemplo, se a resposta deve ser exata ou n˜ao ou se os conhecimentos pr´evios necess´arios est˜ao dispon´ıveis, e assim por diante.

E importante notar que somente ap´´ os uma s´erie de considera¸c˜oes ´e poss´ıvel escolher a melhor t´ecnica e somente em seguida executar a tarefa.

Algumas solu¸c˜oes existem a no¸c˜ao de paralelismo. Hoje em dia os computadores vˆem com v´arios n´ucleos de processamento e sempre existe a chance de se tentar quebrar um problema em v´arios outros menores e deixar que v´arios processadores resolvam seus peda¸cos de solu¸c˜ao e depois tentar juntar os resultados com mais alguma opera¸c˜ao simples.

No caso da f´ormula 1 isto funcionou, mas em geral n˜ao ´e verdade. Infelizmente existe o problema da dependˆencia de dados. Por exemplo, o mecˆanico que vai colocar a roda nova s´o pode trabalhar depois que o outro tirou a roda velha. Em problemas com alto grau de dependˆencia, paralelizar ´e complicado.1.

1ao se estudar˜ao algoritmos paralelos nesta disciplina.

Cap´ıtulo 3

Sobre algoritmos e programas

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

15

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? 17 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.

No documento Algoritmos e Estruturas de Dados I (páginas 13-18)