apostila
259 pág.

apostila


DisciplinaAlgoritmos e Estrutura de Dados I680 materiais7.931 seguidores
Pré-visualização50 páginas
do ser humano e a capacidade de compreensa\u2dco
do computador.
A base das linguagens de programac¸a\u2dco, em geral, e´ constitu´\u131da por:
\u2022 a noc¸a\u2dco de fluxo de execuc¸a\u2dco de um programa;
\u2022 os comandos da linguagem que modificam os fluxo de execuc¸a\u2dco;
\u2022 os comandos, e demais conceitos da linguagem, que manipulam os dados em
memo´ria e a interac¸a\u2dco com o usua´rio (entrada e sa´\u131da de dados);
\u2022 as expresso\u2dces da linguagem que permitem a realizac¸a\u2dco de ca´lculos aritme´ticos e
lo´gicos;
37
38 CAPI´TULO 5. CONCEITOS ELEMENTARES
Neste cap´\u131tulo usaremos as regras do compilador Free Pascal e para isto o leitor
deve ter em ma\u2dcos algum guia de refere\u2c6ncia desta linguagem, por exemplo, o mini guia
de refere\u2c6ncia que esta´ dispon´\u131vel no site oficial da disciplina CI0551, onde as explicac¸o\u2dces
sa\u2dco detalhadas. Em sala de aula havera´ explicac¸a\u2dco satisfato´ria. Por outro lado, os
comandos da linguagem sa\u2dco suficientemente claros para que o programa fac¸a sentido,
basta traduzir literalmente os termos em ingle\u2c6s para suas verso\u2dces em portugue\u2c6s.
Os co´digos sera\u2dco 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\u2dco testar variantes em casa e melhorar o aprendizado.
5.2 Ca´lculo de ra´\u131zes de uma equac¸a\u2dco do segundo
grau
Problema: Calcular as ra´\u131zes da equac¸a\u2dco do segundo grau x2 \u2212 bx+ c = 0.
No cap´\u131tulo 4 no´s seguimos em detalhes o processo de obtenc¸a\u2dco da soluc¸a\u2dco em um
modelo de baixo n´\u131vel e chegamos a um co´digo de alto n´\u131vel escrito em Pascal. A
figura 5.1 e´ uma co´pia da soluc¸a\u2dco apresentada na figura 4.11.
program bascara (input ,output) ;
var b, c , raiz discriminante : real ;
begin
read (b) ;
read (c) ;
raizdiscriminante:= sqrt(b\u2217b \u2212 4\u2217c) ;
write ((b \u2212 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\u2dco. Ele
conte´m quatro elementos importantes: os comandos de entrada e sa´\u131da o comando
de atribuic¸a\u2dco e as expresso\u2dces aritme´ticas. Antes disso, relembramos que o fluxo de
execuc¸a\u2dco 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\u2dco para a memo´ria do computador. Duas
varia´veis (abstrac¸o\u2dces para posic¸o\u2dces f´\u131sicas 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\u2dco 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\u2c6m 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\u2dco aritme´tica, isto e´, uma seque\u2c6ncia de contas que sa\u2dco 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\u2dco de expresso\u2dces aritme´ticas e´
detalhado no material complementar.
A terceira linha de co´digo ilustra um exemplo de um comando de atribuic¸a\u2dco, deno-
tado pelo s´\u131mbolo :=. O computador deve realizar o ca´lculo da expressa\u2dco aritme´tica
do lado direito do s´\u131mbolo := e somente apo´s armazenar o valor resultante na varia´vel
que aparece do lado esquerdo.
Os ca´lculos sa\u2dco realizados conforme as regras descritas no material complementar:
primeiro b \u2217 b obte´m o quadrado de b. Em seguida o valor de c e´ multiplicado por 4.
O ca´lculo continua pela subtrac¸a\u2dco 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\u2dces aritme´ticas servem para fazer ca´lculos. Comandos de
entrada servem para o usua´rio fornecer dados ao computador. Comandos de sa´\u131da
servem para o usua´rio receber informac¸o\u2dces do computador. Comandos de atribuic¸a\u2dco
servem para o computador manipular dados em memo´ria. Estes sa\u2dco 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\u2c6ncia da soluc¸a\u2dco!
Os comandos de leitura carregam os nu´meros digitados no teclado na memo´ria, em
posic¸o\u2dces acess´\u131veis a partir dos nomes a e b. Em seguida, uma expressa\u2dco 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\u2dco 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\u2dco minimamente modificada para este problema e´ apresentada na
figura 5.3.
O programador iniciante deve ter em mente que na\u2dco deve perder muito tempo com
\u201cfirulas\u201d na tela, pelo menos na\u2dco neste curso. Em outras disciplinas, quando a arte da
programac¸a\u2dco 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\u2dco.
program soma2;
var a,b: integer ;
begin
write (\u2019entre com o valor de a: \u2019) ;
read (a) ;
write (\u2019entre com o valor de b: \u2019) ;
read (b) ;
writeln (a ,\u2019+\u2019 ,b,\u2019= \u2019 ,a+b) ;
end.
Figura 5.3: Mesma soluc¸a\u2dco, agora com interface amiga´vel.
interface amiga´vel com o usua´rio do programa ao mesmo tempo mantendo o co´digo
leg´\u131vel. Neste exemplo usamos a outra versa\u2dco do comando de impressa\u2dco, o writeln,
que ale´m de imprimir na tela muda o cursor de linha.
5.4 Imprimindo seque\u2c6ncias de nu´meros na tela
Nesta sec¸a\u2dco usaremos como apoio um problema muito simples. Apesar disto, a dis-
cussa\u2dco 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´\u131da apresentado anteriormente.
5.4. IMPRIMINDO SEQUE\u2c6NCIAS 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\u2dco 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\u2dces do cap´\u131tulo 2, e´ fa´cil ver que ela na\u2dco e´ muito
boa, pois na\u2dco permite uma reimplementac¸a\u2dco simples de problemas similares. Por
exemplo, se o enunciado fosse \u201cImprimir todos os nu´meros entre 1 e 20\u201d no lugar de
\u201ctodos entre 1 e 5\u201d, ter´\u131amos 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\u2dco modificada para nu´meros de 1 a 30.
Extrapolando o enunciado do problema, se fosse para imprimir nu´meros entre