apostila
259 pág.

apostila

Disciplina:Algoritmos e Estrutura de Dados I542 materiais7.956 seguidores
Pré-visualização50 páginas
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