• Nenhum resultado encontrado

Abstra¸c˜ ao das instru¸c˜ oes (linguagem)

No documento Algoritmos e Estruturas de Dados I (páginas 31-38)

Ent˜ao chega o momento de n´os sabermos que o programa que est´a em mem´oria recebe como entrada dois valores b e c e escreve como sa´ıda as ra´ızes da equa¸c˜ao x2 − bx+c = 0. Os c´alculos usam o m´etodo de B´askara. A figura 4.8 mostra a conven¸c˜ao para a substitui¸c˜ao dos endere¸cos por nomes.

Endere¸co Nome

54 dois

50 quatro

46 B

47 quadradoB

48 C

49 quadruploC

51 discriminante

52 raizDiscriminante

53 dobroMenorRaiz

55 menorRaiz

56 dobroMaiorRaiz

57 maiorRaiz

Figura 4.8: Dando nomes para os endere¸cos.

Agora, usaremos esta conven¸c˜ao de troca de endere¸cos por nomes para podermos reescrever o programa ainda mais uma vez, obtendo a vers˜ao da figura 4.9.

Esta vers˜ao define o ´ultimo grau de abstra¸c˜ao simples. A partir deste ponto a nota¸c˜ao deixa de ser s´o uma abreviatura das instru¸c˜oes e a tradu¸c˜ao deixa de ser direta.

Apesar do fato de ser o ´ultimo n´ıvel de nota¸c˜ao simples, ainda ´e poss´ıvel melhorar-mos o grau de facilidade visual, mas desta vez passamelhorar-mos para a nota¸c˜ao ou linguagem de “alto n´ıvel”, que vai exigir a introdu¸c˜ao dos chamados compiladores.

4.4 Abstra¸ c˜ ao das instru¸ c˜ oes (linguagem)

Apesar de todas as nota¸c˜oes e conven¸c˜oes que foram feitas no programa, at´e se chegar na vers˜ao mostrada na figura 4.9, de certa maneira, o programa ainda est´a em um formato muito parecido com o do programa original.

Para que seja poss´ıvel aumentar o n´ıvel de nota¸c˜ao ainda mais ´e preciso contar com a ajuda de programas tradutores, ou como eles s˜ao mais conhecidos, oscompiladores.

Estes programas conseguem receber como entrada um texto escrito em um for-mato adequado e gerar como sa´ıda um programa no forfor-mato da m´aquina. Isto ´e

dois ← 2

Figura 4.9: Programa reescrito com nomes para vari´aveis.

poss´ıvel apenas se os programas forem escritos em um formato que respeite regras extremamente r´ıgidas, pois sen˜ao a tarefa n˜ao seria poss´ıvel.

As linguagens de alto n´ıvel s˜ao definidas a partir de umagram´atica extremamente mais r´ıgida que a do portuguˆes, por exemplo. Estas gram´aticas, conhecidas como gram´aticas livre de contexto, tˆem como uma de suas principais caracter´ısticas que elas n˜ao permitem escrever programas amb´ıguos. O portuguˆes permite.

Sem entrarmos muito em detalhes desta gram´atica, a t´ıtulo de exemplo mostrare-mos vers˜oes em mais alto n´ıvel do programa da figura 4.9. Estas vers˜oes s˜ao apresen-tadas na figura 4.10.

Figura 4.10: Duas outras vers˜oes do programa.

Estas vers˜oes s˜ao compreens´ıveis para o ser humano, mas ainda n˜ao est˜ao no formato ideal para servirem de entrada para o compilador, em particular por causa dos s´ımbolos de fra¸c˜ao ou do expoente. Os compiladores exigem um grau maior de rigidez, infelizmente. A disciplina Constru¸c˜ao de Compiladores, no sexto per´ıodo do curso, ´e exclusiva para o estudo profundo dos motivos desta dificuldade, tanto de se verificar se o programa est´a correto do ponto de vista gramatical, quanto do ponto de vista de se traduzir o programa para linguagem de m´aquina.

4.5. CONCLUS ˜AO 33 No momento, vamos nos limitar a apresentar na figura 4.11 uma vers˜ao do mesmo programa escrito em Pascal. Ap´os compila¸c˜ao, o resultado ´e um programa que pode ser executado pelo computador.

Em suma, o compilador Pascal ´e um programa que, entre outras coisas, consegue transformar o c´odigo de alto n´ıvel mostrado na figura 4.11 e gerar um c´odigo que o computador possa executar tal como mostrado na primeira figura.

program bascara (input , output) ; var b, c , raiz discriminante : real; begin

read (b) ; read (c) ;

raizdiscriminante:= sqrt (b∗b 4∗c) ; write ((b raizdiscriminante )/2) ; write ((b + raizdiscriminante )/2) ; end.

Figura 4.11: Vers˜ao do programa escrito em Pascal.

4.5 Conclus˜ ao

Nesta parte do texto procuramos mostrar que qualquer linguagem de programa¸c˜ao de alto n´ıvel (tal como Pascal, C ou JAVA) ´e meramente uma nota¸c˜ao convencionada visando facilitar a vida do ser humano que programa o computador. Esta nota¸c˜ao trata de como um texto se traduz em um programa execut´avel em um determinado sistema operacional (que usa um determinado conjunto reduzido de instru¸c˜oes).

Um programa que traduz um texto que emprega uma certa nota¸c˜ao convencionada em um programa execut´avel ´e chamado de “compilador”.

Assim, a arte de se programar um computador em alto n´ıvel ´e, basicamente, conhecer e dominar uma nota¸c˜ao atrav´es da qual textos (ou programas fonte) s˜ao traduzidos em programas execut´aveis.

Programar, independentemente da linguagem utilizada, significa concatenar as instru¸c˜oes dispon´ıveis dentro de um repert´orio a fim de transformar dados de entrada em dados de sa´ıda para resolver um problema.

Nas linguagens de alto n´ıvel, as instru¸c˜oes complexas s˜ao traduzidas em uma sequˆencia de opera¸c˜oes elementares do repert´orio b´asico da m´aquina. Por isto os pro-gramas fonte, quando compilados, geram execut´aveis que s˜ao dependentes do sistema operacional e do hardware da m´aquina onde o programa executa.

A partir destas ideias, partindo do princ´ıpio que se tem um algoritmo que resolve um problema, o que ´e preciso saber para se programar um computador?

• Ter `a disposi¸c˜ao um editor de textos, para codificar o algoritmo na forma de programa fonte;

• Ter `a disposi¸c˜ao um compilador para a linguagem escolhida (no nosso caso, o Free Pascal), para transformar automaticamente um programa fonte em um programa execut´avel.

No restante deste curso, vamos nos preocupar com a arte de se construir algoritmos, tendo em mente que o estudante dever´a ser capaz de saber transformar este algoritmo em forma de programa fonte de maneira que este possa ser compilado e finalmente executado em um computador.

4.6. EXERC´ICIOS 35

4.6 Exerc´ıcios

1. Para perceber como o ambiente do computador ´e limitado em fun¸c˜ao do reduzido n´umero de instru¸c˜oes dispon´ıveis em baixo n´ıvel, vocˆe pode tentar jogar este jogo (http://armorgames.com/play/6061/light-bot-20). Nele, existe um boneco que tem que cumprir um percurso com o objetivo de apagar todas as c´elulas azuis do terreno quadriculado usando apenas poucos comandos e com pouca

“mem´oria” dispon´ıvel. Vocˆe pode fazer o uso de duas fun¸c˜oes que auxiliam nas tarefas repetitivas. Divirta-se!

2. Modifique a “fotografia da mem´oria” apresentada para que o computador resolva a equa¸c˜ao ax2 +bx+c = 0 pelo m´etodo de B´ascara. A diferen¸ca do que foi apresentado ´e o coeficiente a do termo x2 e o sinal de b.

3. Leia os seguintes textos da wikipedia:

(a) http://pt.wikipedia.org/wiki/Arquitetura_de_von_Neumann, sobre a arquitetura de von Neumann;

(b) http://pt.wikipedia.org/wiki/Von_Neumann, sobre a vida de von Neu-mann, em especial a parte sobre computa¸c˜ao.

Cap´ıtulo 5

Conceitos elementares

Agora que sabemos os princ´ıpios de algoritmos e as limita¸c˜oes da m´aquina, ´e preciso introduzir conceitos elementares de algoritmos, sem os quais n˜ao ´e poss´ıvel seguir adiante.

Apresentaremos problemas simples o bastante para nos concentrarmos nas novi-dades, isto ´e, nos aspectos relevantes das estruturas de controle de fluxo e demais conceitos presentes nas linguagens de programa¸c˜ao. Nos pr´oximos cap´ıtulos estas es-truturas elementares ser˜ao utilizadas na constru¸c˜ao de solu¸c˜oes para problemas cada vez mais sofisticados.

5.1 Algoritmos e linguagens de programa¸ c˜ ao

Conforme vimos, os algoritmos devem ser escritos em um n´ıvel de detalhamento su-ficiente para que o compilador consiga fazer a tradu¸c˜ao do c´odigo para linguagem de m´aquina.

O compilador precisa receber um texto formatado em uma linguagem simples, n˜ao amb´ıgua, precisa. Para isto as linguagens de programa¸c˜ao seguem uma gram´atica r´ıgida, se comparada com a da l´ıngua portuguesa. Tamb´em segue um vocabul´ario limitado, constitu´ıdo de alguns poucos elementos.

O que vamos apresentar aqui ´e uma linguagem de mais alto n´ıvel do que aquela apresentada no cap´ıtulo 4. Trata-se de uma maneira de escrever que ´e um ponto inter-medi´ario entre a capacidade de reda¸c˜ao do ser humano e a capacidade de compreens˜ao do computador.

A base das linguagens de programa¸c˜ao, em geral, ´e constitu´ıda por:

• a no¸c˜ao de fluxo de execu¸c˜ao de um programa;

• os comandos da linguagem que modificam os fluxo de execu¸c˜ao;

• os comandos, e demais conceitos da linguagem, que manipulam os dados em mem´oria e a intera¸c˜ao com o usu´ario (entrada e sa´ıda de dados);

• as express˜oes da linguagem que permitem a realiza¸c˜ao de c´alculos aritm´eticos e l´ogicos;

37

Neste cap´ıtulo usaremos as regras do compilador Free Pascal e para isto o leitor deve ter em m˜aos algum guia de referˆencia desta linguagem, por exemplo, o mini guia de referˆencia que est´a dispon´ıvel no site oficial da disciplina CI0551, onde as explica¸c˜oes s˜ao detalhadas. Em sala de aula haver´a explica¸c˜ao satisfat´oria. Por outro lado, os comandos da linguagem s˜ao suficientemente claros para que o programa fa¸ca sentido, basta traduzir literalmente os termos em inglˆes para suas vers˜oes em portuguˆes.

Os c´odigos ser˜ao escritos emPascal, pois acreditamos que editar c´odigo, compilar, executar e testar programas ajuda o aluno a compreender os conceitos te´oricos. Desta forma os alunos poder˜ao testar variantes em casa e melhorar o aprendizado.

5.2 C´ alculo de ra´ızes de uma equa¸ c˜ ao do segundo

No documento Algoritmos e Estruturas de Dados I (páginas 31-38)