Escolar Documentos
Profissional Documentos
Cultura Documentos
Linguagem Pascal - Silvio Lago PDF
Linguagem Pascal - Silvio Lago PDF
6. Modularizao............................................ 07
6.1. Mdulos .................................................. 07
6.2. Funes .................................................. 07
6.3. Exerccios .............................................. 08
6.4. Procedimentos.........................................08
6.5. Exerccios .............................................. 09
6.6. Passagem de Parmetros .......................09
6.7. Valor versus Referncia ....................... 10
6.8. Exerccios ................................................10
7. Vetores ......................................................... 10
7.1. As Temperaturas Acima da Mdia ....... 11
7.2. Exerccios .............................................. 11
1. INTRODUO 1.3. Algumas Explicaes
A linguagem Pascal, cujo nome uma homenagem A palavra program serve para definir o nome do
ao matemtico francs Blaise Pascal, foi desenvolvi- programa, que deve ser digitado logo em seguida;
da na dcada de 60 pelo professor Niklaus Wirth. Os locais de memria onde os dados so armaze-
Inicialmente, sua finalidade era ser uma linguagem nados, denominados variveis, so identificados
para uso didtico, que permitisse ensinar com clare- por nomes que devem iniciar com letras;
za os principais conceitos envolvidos na programa-
o estruturada de computadores. Hoje, numa ver- A palavra var serve para declarar o tipo das vari-
so mais moderna denominada Delphi, essa lingua- veis que sero usadas no programa. Variveis
gem tambm utilizada por profissionais de diver- que armazenam nmeros inteiros devem ser do
sas reas tais como processamento de dados, compu- tipo integer e aquelas que permitem nmeros com
tao e engenharia. parte fracionria devem ser do tipo real;
A palavra begin marca o incio do programa;
1.1. O Sistema Turbo Pascal Todas as mensagens a serem exibidas na tela do
computador devem ser colocadas entre apstrofos.
Para criar um programa na linguagem Pascal, usa- Uma varivel, entretanto, no; caso contrrio, o
remos o Turbo Pascal. Esse software engloba: computador exibir o seu nome e no o seu valor.
um editor de textos que nos permite digitar e sal- O comando write exibe uma informao na tela e
var em disco o programa codificado em Pascal; deixa o cursor na mesma linha em que a informa-
um compilador, que traduz o programa escrito o foi exibida. J o comando writeln, faz com que
em Pascal para a linguagem de mquina. o cursor salte para o incio da linha seguinte.
Aps ter digitado o programa, usamos: Para que no sejam exibidas em notao
F2: para salvar em disco o programa digitado; cientfica, variveis do tipo real devem ser
formatadas da seguinte maneira:
Ctrl+F9: para compilar e executar o programa;
varivel : tamanho_campo : casas_decimais
Alt+F5: para ver o resultado da execuo.
A unidade CRT consiste de um conjunto de coman- Para cada problema a seguir, codifique um progra-
dos adicionais que so oferecidos no Turbo Pascal. ma Pascal. Use os comandos adicionais disponveis
Como esses comandos no fazem parte da lingua- em CRT e, para no ter que ficar digitando Alt+F5
gem Pascal padro, para utiliz-los, precisamos in- para ver os resultados, inclua readln1 como a ltima
cluir a seguinte instruo no programa: instruo do programa (antes do end).
uses crt;
1.6. Dada uma distncia (km ) e o tempo (h ) gasto
Essa instruo indica ao compilador que iremos u- por um veculo para percorr-la, informe a velo-
sar os comandos adicionais contidos na unidade cidade mdia do veculo (km/h ).
CRT. Sem ela, os comandos adicionais no podem
1.7. Dada uma medida em centmetros (c), informe o
ser reconhecidos pelo compilador.
valor correspondente em polegadas (p). Utilize
a frmula: p = c / 2,54.
Essa instruo deve ser a segunda linha do
1.9. Dada uma temperatura em graus Celsius (C ),
programa, conforme indicado a seguir:
informe a correspondente em graus Fahrenheit
program exemplo; (F ). Utilize a frmula: F = (9/5) C+32.
uses crt;
... 1.10. Sabe-se que 1m2 de carpete custa R$ 35,00.
Dados o comprimento e a largura de uma sa-
la, em metros, informe o valor que ser gasto
para forrar todo o seu piso.
Temos a seguir a descrio dos comandos definidos
1.11. Dadas as coordenadas de dois pontos P e Q do
em CRT que so mais utilizados em Turbo Pascal:
plano cartesiano, informe a distncia entre e-
clrscr: limpa a tela e posiciona o cursor no incio les. [Dica: use o teorema de Pitgoras]
da primeira linha;
textcolor(cor): seleciona a cor na qual os textos y
sero exibidos no vdeo. As cores so representa- Q
das por nmeros de 0 a 15 ou, ento, por palavras yQ
em ingls (red, blue, ...). Para exibir texto piscan-
te, adicione a palavra blink cor selecionada; por
exemplo, red+blink;
yP P
textbackground(cor): seleciona a cor do fundo so-
bre o qual os textos sero exibidos. As cores so
representadas da mesma maneira que no coman- 0 xP xQ x
do anterior. Para que a tela toda aparea na cor
de fundo selecionada, execute o comando clrscr
logo aps o textbackground;
gotoxy(col, lin): posiciona o cursor na posio de 2. A ESTRUTURA DE SELEO
tela indicada. Caso o valor de col (1 a 80) ou lin (1
a 25) esteja fora do intervalo permitido, o cursor A estrutura de seleo, ou condicional, uma estru-
no movimentado. tura que nos permite selecionar e executar apenas
um entre dois comandos possveis. Para decidir qual
comando dever ser executado, emprega-se uma
1 2 3 ... col ... 80 expresso lgica, denominada condio: se esta for
1 verdadeira, seleciona-se a primeira alternativa; caso
2 contrrio, se for falsa, seleciona-se a segunda.
3
...
lin if condio
... then comando1
25 else comando2;
cnt := vi
3.3. Exerccios
F
cnt <= vf Para cada problema, codifique um programa Pascal:
6.2. Funes
Down Botton
Ao definir uma funo, usamos o seguinte formato:
No exemplo acima, o problema original P foi decom-
posto em trs subproblemas: A, B e C. Eventual-
mente, aps uma decomposio, podem surgir sub-
problemas que ainda so muito complexos. Nesse function nome(parmetros) : tipo;
caso, fazemos mais uma decomposio. No nosso variveis locais;
exemplo, o subproblema A foi decomposto em D e E begin
e o subproblema C foi decomposto em F. No h instrues;
limite para esse processo de decomposio e ele s ...
termina quando atingimos subproblemas suficien-
nome := resposta;
temente simples para que sejam resolvidos direta-
end;
end
mente. Cada mdulo do D.H.F. corresponde a uma
rotina que dever ser codificada no programa Pas- Toda funo deve ter um nome, atravs do qual ela
cal. Note que o projeto feito de cima para baixo possa ser chamada no programa. Para executar,
(top-down), enquanto a implementao deve ser fei- uma funo pode precisar receber alguns parme-
ta de baixo para cima (botton-up). Isso quer dizer tros de entrada e, ao final de sua execuo, devolve
que, no programa Pascal, um mdulo s deve apare- uma resposta do tipo especificado. Se a funo pre-
cer quando todos aqueles dos quais ele depende j cisa de outras variveis, alm dos parmetros, essas
foram codificados anteriormente. Sendo assim, o devem ser declaradas como variveis locais. Para
mdulo principal ser sempre o ltimo a ser codifi- indicar a resposta final devolvida pela funo, de-
cado no programa. vemos atribuir seu valor ao nome da funo.
6.8. O comando sound(f), cujo parmetro f um Um parmetro pode ser passado a uma rotina de
nmero inteiro, liga o alto-falante para emitir duas maneiras distintas: por valor ou por referncia.
som com freqncia de f hertz. Para desligar o Quando passado por valor, o parmetro criado
alto-falante, temos o comando nosound e, para numa nova rea de memria, ainda no utilizada, e
dar uma pausa, temos delay(t), cujo parmetro o valor do argumento copiado para essa rea.
t indica o nmero de milissegundos a aguardar. Quando passado por referncia, o parmetro com-
Usando esses comandos disponveis em CRT, partilha o mesmo espao de memria j utilizado
crie o comando beep, que emite um "bip". pelo argumento. Na passagem por valor, a rotina
tem acesso apenas a uma cpia do argumento; j na
6.9. Usando os comandos de som, crie um comando
passagem por referncia, a rotina acessa diretamen-
para simular o som de uma sirene. [Dica: sons
te o argumento original. Para indicar que a passa-
graves tm freqncias baixas e sons agudos
gem deve ser feita por referncia, devemos prefixar
tm freqncias altas]
a declarao do parmetro com a palavra var.
6.10. Crie o comando centraliza(l,m), que exibe a
Para entender a utilidade da passagem por refern-
mensagem m centralizada na linha l, e faa
cia, vamos considerar um exemplo: criar um coman-
um programa para test-lo. [Dica: a funo
do que permuta os valores de duas variveis que lhe
length(s) devolve comprimento da string s.]
so passadas como argumentos. Supondo que esse
6.11. Crie o comando horiz(c,l,n), que exibe uma li- comando se chame troca, o cdigo
nha horizontal com n caracteres de compri- ...
mento, a partir da posio (c,l) da tela. [Dica: x := 5;
para obter uma linha contnua, use o caracter
y := 7;
cujo cdigo ASCII 196] troca(x,y);
troca(x,y)
6.12. A rotina a seguir tem como objetivo desenhar write(x,y);
uma moldura cujo canto esquerdo superior es- ...
t na posio (Ci,Li) e cujo canto direito inferi- dever produzir 75 como sada.
or est na posio (Cf,Lf); entretanto, ela con-
tm alguns erros. Codifique um programa pa- Primeiro vamos entender por que a passagem por
ra testar seu funcionamento e corrija os erros valor no funciona nesse caso.
que voc observar:
...
procedure M(Ci,Li,Cf,Lf,cor:integer); procedure troca(a,b:integer
integer);
integer
var i: integer;
var c : integer;
integer
begin
begin
textcolor(cor); a: 5 Os parmetros
gotoxy(Ci,Li); write(#191); c := a; so cpias dos
gotoxy(Cf,Li); write(#192); a := b; b: 7 argumentos!
gotoxy(Ci,Lf); write(#217); b := c;
gotoxy(Cf,Lf); write(#218); c: ?
end;
end
for i:= Ci+1 to Cf-1 do
...
begin begin
gotoxy(i,Li); write(#179); ...
X: 5 Argumentos
gotoxy(i,Lf); write(#179); x := 5;
originais.
end; y := 7; y: 7
troca(x,y);
troca(x,y)
for i:= Li+1 to Lf-1 do
write(x,y);
begin ...
gotoxy(Ci,i); write(#196); end.
end
gotoxy(Cf,i); write(#196);
end;
end;
Como podemos ver acima, parmetros passados por
6.13. Baseando-se na rotina acima, crie o comando valor so criados como cpias dos argumentos origi-
vert(c,l,n), que exibe uma linha vertical com n nais. Quando a rotina executada, de fato, ela troca
caracteres de comprimento, a partir da posi- os valores das variveis a e b, que so destrudas
o (c,l) da tela. Usando essa rotina e horiz(), assim que a execuo da rotina termina. Retornan-
codifique uma nova verso do comando M, que do ao programa principal, os valores de x e y estaro
desenha molduras. inalterados e, portanto, teremos 57 como sada.
program TAM;
const max = 7; Finalmente, a rotina que faz a contagem das tempe-
raturas acima da mdia fica assim:
Type Temp = array[1..max]
array of real;
real
var T : Temp;
function conta(var
var T:Temp;
m : real;
real
... m:real) : inte
integer;
ger
var i, c : integer;
integer
begin
begin
obtem(T);
c := 0;
m := media(T);
for i:=1 to Max do
writeln('Total
writeln = ',conta(T,m));
end.
end if T[i] > m then
c := c+1;
Conta := c;
end;
A declarao const usada para criar cons-
tantes, disponveis a todo o programa.
7.2. Exerccios
O programa ficou extremamente simples; mas, para 7.1. Crie tipos de vetores para armazenar:
ser executado, preciso que as rotinas obtem, media
e conta sejam definidas. A rotina para a obteno as letras vogais do alfabeto;
dos dados pode ser codificada da seguinte maneira: as alturas de um grupo de 10 pessoas; e
os nomes dos meses do ano.
7.2. Considere um vetor w cujos 9 elementos so do
procedure obtem(var
var T : Temp); tipo integer:
var i : integer;
integer 1 2 3 4 5 6 7 8 9
begin w:
writeln('Informe temperaturas: ');
Supondo que i seja uma varivel do tipo integer
for i:=1 to max do
e que seu valor seja 5, que valores estaro ar-
begin
mazenados em w aps a execuo das atribui-
write(i,'
write o valor? ');
es a seguir?
readln(T[i]);
readln
end;
end w[1] := 17;
end; w[i div 2] := 9;
w[2i-1] := 95;
w[i-1] := w[9] div 2;
Note que o parmetro T passado por referncia, j w[i] := w[2];
que desejamos preencher o vetor originalmente pas- w[i+1] := w[i]+ w[i-1];
sado rotina e no uma cpia dele. Lembre-se de w[w[2]-2] := 78;
que as cpias so destrudas ao final da execuo da w[w[i]-1] := w[1]* w[i];