• Nenhum resultado encontrado

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

No documento Algoritmos e Estruturas de Dados I (páginas 37-41)

O modelo do computador

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

significado que eles est˜ao desempenhando no programa.

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 Bhaskara. 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 39 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 bhaskara (input , output) ; var b, c , raizdiscriminante : 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.

No documento Algoritmos e Estruturas de Dados I (páginas 37-41)