do ser humano e a capacidade de compreensa˜o do computador. A base das linguagens de programac¸a˜o, em geral, e´ constitu´ıda por: • a noc¸a˜o de fluxo de execuc¸a˜o de um programa; • os comandos da linguagem que modificam os fluxo de execuc¸a˜o; • os comandos, e demais conceitos da linguagem, que manipulam os dados em memo´ria e a interac¸a˜o com o usua´rio (entrada e sa´ıda de dados); • as expresso˜es da linguagem que permitem a realizac¸a˜o de ca´lculos aritme´ticos e lo´gicos; 37 38 CAPI´TULO 5. CONCEITOS ELEMENTARES Neste cap´ıtulo usaremos as regras do compilador Free Pascal e para isto o leitor deve ter em ma˜os algum guia de refereˆncia desta linguagem, por exemplo, o mini guia de refereˆncia que esta´ dispon´ıvel no site oficial da disciplina CI0551, onde as explicac¸o˜es sa˜o detalhadas. Em sala de aula havera´ explicac¸a˜o satisfato´ria. Por outro lado, os comandos da linguagem sa˜o suficientemente claros para que o programa fac¸a sentido, basta traduzir literalmente os termos em ingleˆs para suas verso˜es em portugueˆs. Os co´digos sera˜o escritos em Pascal, pois acreditamos que editar co´digo, compilar, executar e testar programas ajuda o aluno a compreender os conceitos teo´ricos. Desta forma os alunos podera˜o testar variantes em casa e melhorar o aprendizado. 5.2 Ca´lculo de ra´ızes de uma equac¸a˜o do segundo grau Problema: Calcular as ra´ızes da equac¸a˜o do segundo grau x2 − bx+ c = 0. No cap´ıtulo 4 no´s seguimos em detalhes o processo de obtenc¸a˜o da soluc¸a˜o em um modelo de baixo n´ıvel e chegamos a um co´digo de alto n´ıvel escrito em Pascal. A figura 5.1 e´ uma co´pia da soluc¸a˜o apresentada na figura 4.11. 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 5.1: Programa que implementa o me´todo de Ba´scara. Este co´digo simples e´ rico em elementos das linguagens de programac¸a˜o. Ele conte´m quatro elementos importantes: os comandos de entrada e sa´ıda o comando de atribuic¸a˜o e as expresso˜es aritme´ticas. Antes disso, relembramos que o fluxo de execuc¸a˜o do programa e´ assim: o programa inicia apo´s o begin e executa os comandos de cima para baixo, terminando no end. Os dois primeiros comandos, read, servem para o usua´rio do programa fazer a carga dos valores dos coeficientes da equac¸a˜o para a memo´ria do computador. Duas varia´veis (abstrac¸o˜es para posic¸o˜es f´ısicas de memo´ria), a e b, recebem estes valores. 1http://www.inf.ufpr.br/cursos/ci055/pascal.pdf. 5.3. IMPRIMIR A SOMA DE DOIS NU´MEROS DADOS 39 A linguagem Pascal exige a declarac¸a˜o dos tipos, no cabec¸alho do programa (o que antecede o bloco entre o begin e o end. Isto e´ detalhado no material complementar sobre o compilador. As duas u´ltimas linhas conteˆm o comando write, que serve para imprimir alguma coisa na tela do usua´rio, neste caso, o resultado de um ca´lculo. O ca´lculo propriamente dito e´ apresentado ao computador na forma de uma ex- pressa˜o aritme´tica, isto e´, uma sequeˆncia de contas que sa˜o realizadas pelo compu- tador: subtraia de b o valor calculado e armazenado na varia´vel raizdiscriminante e em seguida divida tudo por 2. A regra para construc¸a˜o de expresso˜es aritme´ticas e´ detalhado no material complementar. A terceira linha de co´digo ilustra um exemplo de um comando de atribuic¸a˜o, deno- tado pelo s´ımbolo :=. O computador deve realizar o ca´lculo da expressa˜o aritme´tica do lado direito do s´ımbolo := e somente apo´s armazenar o valor resultante na varia´vel que aparece do lado esquerdo. Os ca´lculos sa˜o realizados conforme as regras descritas no material complementar: primeiro b ∗ b obte´m o quadrado de b. Em seguida o valor de c e´ multiplicado por 4. O ca´lculo continua pela subtrac¸a˜o do primeiro valor obtido pelo segundo. Finalmente a raiz quadrada deste u´ltimo valor e´ calculada e apenas apo´s tudo isto ocorrer o resultado e´ armazenado na varia´vel raizdiscriminante. Desta forma, expresso˜es aritme´ticas servem para fazer ca´lculos. Comandos de entrada servem para o usua´rio fornecer dados ao computador. Comandos de sa´ıda servem para o usua´rio receber informac¸o˜es do computador. Comandos de atribuic¸a˜o servem para o computador manipular dados em memo´ria. Estes sa˜o os elementos mais simples de qualquer programa. 5.3 Imprimir a soma de dois nu´meros dados Vamos aqui considerar ainda um outro problema bem simples. Problema: Ler dois nu´meros do teclado e imprimir a soma deles na tela. O programa apresentado na figura 5.2 esta´ correto e captura a exceˆncia da soluc¸a˜o! Os comandos de leitura carregam os nu´meros digitados no teclado na memo´ria, em posic¸o˜es acess´ıveis a partir dos nomes a e b. Em seguida, uma expressa˜o aritme´tica faz o ca´lculo da soma de ambos e o resultado e´ impresso na tela. Um pequeno problema e´ que, quando executado, o cursor fica piscando na tela e na˜o deixa nenhuma mensagem sobre o que o usua´rio deve digitar. O estudante pode querer modificar ligeiramente este co´digo para produzir uma interface um pouco mais amiga´vel, mas deve neste caso observar que o resultado sera´ o mesmo. A versa˜o minimamente modificada para este problema e´ apresentada na figura 5.3. O programador iniciante deve ter em mente que na˜o deve perder muito tempo com “firulas” na tela, pelo menos na˜o neste curso. Em outras disciplinas, quando a arte da programac¸a˜o estiver dominada, o estudante aprendera´ a integrar elegantemente uma 40 CAPI´TULO 5. CONCEITOS ELEMENTARES program soma2; var a,b: integer ; begin read (a) ; read (b) ; write (a+b) ; end. Figura 5.2: Primeira soluc¸a˜o. program soma2; var a,b: integer ; begin write (’entre com o valor de a: ’) ; read (a) ; write (’entre com o valor de b: ’) ; read (b) ; writeln (a ,’+’ ,b,’= ’ ,a+b) ; end. Figura 5.3: Mesma soluc¸a˜o, agora com interface amiga´vel. interface amiga´vel com o usua´rio do programa ao mesmo tempo mantendo o co´digo leg´ıvel. Neste exemplo usamos a outra versa˜o do comando de impressa˜o, o writeln, que ale´m de imprimir na tela muda o cursor de linha. 5.4 Imprimindo sequeˆncias de nu´meros na tela Nesta sec¸a˜o usaremos como apoio um problema muito simples. Apesar disto, a dis- cussa˜o sera´ bastante rica em conceitos de algoritmos. Problema: Imprimir todos os nu´meros entre 1 e 5. Provavelmente um humano escreveria algo assim: 1. imprima o nu´mero 1; 2. imprima o nu´mero 2; 3. imprima o nu´mero 3; 4. imprima o nu´mero 4; 5. imprima o nu´mero 5; Este algoritmo pode ser codificado em Pascal tal como e´ ilustrado na figura 5.4, usando-se o comando de sa´ıda apresentado anteriormente. 5.4. IMPRIMINDO SEQUEˆNCIAS DE NU´MEROS NA TELA 41 program contar ; begin write (1) ; write (2) ; write (3) ; write (4) ; write (5) ; end. Figura 5.4: Primeira soluc¸a˜o para contar de 1 a 5. Apo´s compilado e executado, os nu´meros 1, 2, 3, 4 e 5 aparecem na tela, atendendo ao enunciado. Mas, a` luz das discusso˜es do cap´ıtulo 2, e´ fa´cil ver que ela na˜o e´ muito boa, pois na˜o permite uma reimplementac¸a˜o simples de problemas similares. Por exemplo, se o enunciado fosse “Imprimir todos os nu´meros entre 1 e 20” no lugar de “todos entre 1 e 5”, ter´ıamos que escrever um co´digo como o ilustrado na figura 5.5. program contar ; begin write (1) ; write (2) ; write (3) ; write (4) ; write (5) ; write (6) ; write (7) ; write (8) ; write (9) ; write (10) ; write (11) ; write (12) ; write (13) ; write (14) ; write (15) ; write (16) ; write (17) ; write (18) ; write (19) ; write (20) ; end. Figura 5.5: Primeira soluc¸a˜o modificada para nu´meros de 1 a 30. Extrapolando o enunciado do problema, se fosse para imprimir nu´meros entre