Você está na página 1de 16

LINGUAGEM PASCAL

NOES BSICAS USANDO TURBO PASCAL

Silvio do Lago Pereira


SUMRIO

1. Introduo .................................................. 01 8. Registros ...................................................... 12


1.1. O Sistema Turbo Pascal ........................ 01 8.1. Registros Aninhados ............................. 12
1.2. Um Primeiro Exemplo........................... 01 8.2. Tabelas .................................................. 12
1.3. Algumas Explicaes ............................. 01 8.3. Exerccios .............................................. 13
1.4. Exerccios ............................................... 01
9. Arquivos ....................................................... 13
1.5. A Unidade CRT ...................................... 02
9.1. Principais Operaes em Arquivos....... 13
1.6. Exerccios ............................................... 02
9.2. Gravando um Arquivo .......................... 14
2. A Estrutura de Seleo ............................ 02 9.3. Lendo um Arquivo ................................ 14
2.1. Um Exemplo de Aplicao..................... 03 9.4. Exerccios .............................................. 14
2.2. Utilizando Blocos de Comandos ...... 03
2.3. Exerccios ............................................... 03

3. Repetio com Contador ......................... 04


3.1. Fazendo Tabuadas ................................. 04
3.2. Contagem Decrescente ...................... 04
3.3. Exerccios ................................................04

4. Repetio com Precondio ................... 05


4.1. Exibindo os Dgitos de um Nmero ...... 05
4.2. Exerccios ................................................05

5. Repetio com Poscondio ................... 06


5.1. Automatizando o Caixa ......................... 06
5.2. Forando uma entrada ......................... 06
5.3. Exerccios ................................................06

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.

1.2. Um Primeiro Exemplo O comando readln aguarda at que o usurio digi-


te um valor e pressione <enter> e, em seguida,
Vamos criar um programa que dadas as duas notas armazena o valor na varivel especificada.
obtidas por um aluno, informe a sua mdia. Para
realizar esta tarefa, o programa dever executar os O final do programa indicado pela palavra end.
seguintes passos:
1o Solicitar a primeira nota; 1.4. Exerccios
2o Ler o valor e armazen-lo na memria;
3o Solicitar a segunda nota; Para cada problema, codifique um programa Pascal:
4o Ler o valor e armazen-lo na memria;
1.1. Dada a medida dos lados de um quadrado, in-
5o Calcular a mdia com os valores fornecidos;
forme a sua rea.
6o Exibir o resultado do clculo;
1.2. Dada a medida do raio de uma circunferncia,
Em Pascal, esses passos so indicados assim: informe o seu permetro.
1.3. Dada uma distncia (km) e o total de combust-
program media;
vel (l) gasto por um veculo para percorr-la, in-
var p1, p2, m : real;
real
begin forme o consumo mdio (km/l).
write('Primeira
write nota? '); 1.4. Sabe-se que com uma lata de tinta pinta-se 3m2.
readln(p1);
readln Dadas a largura e a altura de uma parede, em
write('Segunda
write nota? '); metros, informe quantas latas de tinta sero
readln(p2);
readln necessrias para pint-la completamente.
m := (p1+p2)/2;
writeln
writeln('A
eln mdia ', m:0:1); 1.5. Dadas as medidas dos catetos de um tringulo
end.
end retngulo, informe sua hipotenusa. [Dica: em
Pascal, x escreve-se sqrt(x) ].

Noes de Pascal / Prof. Silvio Lago 1


1.5. A Unidade CRT 1.6. Exerccios

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;

1 Quando usado sem variveis, o comando readln apenas


aguarda que o usurio pressione a tecla <enter>.
Noes de Pascal / Prof. Silvio Lago 2
Observe que os comandos no if-else so mutuamente ...
exclusivos, isto , a seleo de um deles impede que
if m >= 7.0 then
o outro seja executado, e vice-versa.
begin
textcolor(blue);
textcolor
vezes, no h duas alternativas, apenas
uma: ou o comando executado ou, ento, writeln('aprovado');
writeln
nada feito. Nestas ocasies, pode-se omitir end
a parte else do comando if-else. else
begin
textcolor(red);
textcolor
writeln('reprovado');
writeln
A expresso lgica, usada como condio, pode ser end;
end
formada pelos seguintes tipos de operadores: ...
 aritmticos: +, , , /, div e mod;
 relacionais: =, <>, <, >, <= e >=; 2.3. Exerccios
 lgicos: not, and e or.
Para cada problema, codifique um programa Pascal:
2.1. Um Exemplo de Aplicao
2.1. Dado um nmero, informe se ele par.
Temos a seguir um exemplo de como empregar a 2.2. Dados dois nmeros distintos, informe qual de-
estrutura de seleo ao codificar um programa em les o maior.
Pascal. Neste exemplo, so fornecidas as duas notas
de um aluno e o programa informa se ele est apro- 2.3. Dada a idade de uma pessoa, informe se ela po-
vado ou reprovado: de ou no ter carta de motorista.
2.4. O ndice de massa corporal (imc) de uma pessoa
program situacao; dado pelo seu peso dividido pelo quadrado da
uses crt; sua altura. Se o imc superior a 30, a pessoa
var p1, p2, m : real;
real considerada obesa. Dados o peso (kg) e a altura
begin (m) de uma pessoa, informe seu imc e indique
clrscr;
clrscr se ela precisa de regime.
write('Informe
write as duas notas: '); 2.5. Numa empresa paga-se R$ 14,50 por hora e re-
readln(p1,p2);
readln colhe-se 15% dos salrios acima de R$ 1.200,00
m := (p1+p2)/2; para o imposto de renda. Dado o nmero de ho-
writeln('Mdia:
writeln ', m:0:1); ras trabalhadas por um funcionrio, informe o
write('Situao:
write '); valor do seu salrio bruto, do desconto de I.R. e
if m >= 7.0 do seu salrio lquido.
then writeln('aprovado')
writeln 2.6. Numa faculdade, os alunos com mdia pelo me-
else writeln('reprovado');
writeln nos 7,0 so aprovados, aqueles com mdia infe-
readln;
readln rior a 3,0 so reprovados e os demais ficam de
end.
end recuperao. Dadas as duas notas de um aluno,
informe sua situao. Use as cores azul, verme-
lho e amarelo para as mensagens aprovado, re-
2.2. Utilizando Blocos de Comandos provado e recuperao, respectivamente.
2.7. Dados os coeficientes (a0, b e c) de uma equa-
Sempre que for necessrio executar mais que um o do 2o grau, informe suas razes reais. Utili-
comando quando a condio for verdadeira (ou falsa) ze a frmula de Bskara:
preciso agrupar os diversos comandos em um ni-
co bloco, isto , precisamos coloc-los entre as pala- b b2 4.a.c
x1,2 =
vras begin e end. Por exemplo, suponha que fosse 2.a
necessrio alterar o programa anterior de modo que
a mensagem aprovado fosse exibida em azul e re- 2.8. Dados trs nmeros, verifique se eles podem ser
provado, em vermelho. Ento, teramos que codifi- as medidas dos lados de um tringulo e, se pu-
car a estrutura de seleo do seguinte modo: derem, classifique o tringulo em equiltero, i-
ssceles ou escaleno.

Noes de Pascal / Prof. Silvio Lago 3


3. REPETIO COM CONTADOR Para repetir vrios comandos no for, agru-
pe-os em um bloco, usando begin e end.
A estrutura de repetio com contador uma estru-
tura que nos permite executar uma ou mais instru-
es, um determinado nmero de vezes. Para con- 3.2. Contagem Decrescente
trolar o nmero de repeties, empregamos uma
varivel denominada contador.
Algumas vezes, ao invs de fazer o contador aumen-
tar, prefervel faz-lo diminuir. Para indicar que a
for cnt := vi to vf do contagem deve ser decrescente, usamos a palavra
comando; ; downto em vez de to. O programa a seguir exibe
uma contagem decrescente usando downto:
Ao encontrar o for, o computador primeiro atribui o
valor inicial vi ao contador cnt. A partir da, o co- program regressivo;
mando associado estrutura executado repetida- var n, c: integer;
integer
mente, at que o contador atinja o valor final vf. A begin
cada vez que o comando executado, o contador write('Digite
write um nmero: ');
incrementado automaticamente pelo computador. O readln(n);
readln
fluxograma a seguir ilustra o funcionamento do co- for c:=n downto
downto 1 do
mando for: writeln(c);
writeln( );
readln;
readln
... end.
end

cnt := vi
3.3. Exerccios
F
cnt <= vf Para cada problema, codifique um programa Pascal:

V 3.1. Faa um programa para ler 10 nmeros e exibir


...
comando sua mdia aritmtica.
3.2. Dado um nmero n, informe a soma dos n pri-
cnt := cnt+1 meiros nmeros naturais. Por exemplo, se n for
igual a 5, o programa dever exibir a soma
1+2+3+4+5, ou seja, 15.
3.3. O quadrado de um nmero n igual soma dos
n primeiros nmeros mpares. Por exemplo, 22 =
O Pascal exige que a varivel utilizada co-
1+3 = 4 e 52 = 1+3+5+7+9 = 25. Dado um nmero
mo contador seja declarada como integer.
n, informe seu quadrado usando essa idia.
3.4. Dados um nmero real x e um nmero natural
n, calcule e informe o valor de xn. [Dica: xn =
3.1. Fazendo Tabuadas...
x.x...x (com n termos x)]
A seguir, mostramos como o comando for pode ser 3.5. Dado um nmero natural n, calcule e informe o
usado para criar um programa que exibe a tabuada valor do seu fatorial. [Dica: n! = (n1).n...3.2.1]
de um nmero fornecido pelo usurio:
3.6. Dadas as temperaturas registradas diariamente
durante uma semana, informe que dia da se-
program tabuada; mana foi mais frio e que dia foi mais quente.
var
var n, c, r : integer;
integer
begin 3.7. Dado um nmero n, desenhar um tabuleiro de
write('Digite
write um nmero: '); xadrez nn. Por exemplo, para n=4, temos:
readln(n);
readln
for c:=1 to 10 do
writeln(n,'
writeln x ',c,' = ',n*c);
readln;
readln
end.
end

Noes de Pascal / Prof. Silvio Lago 4


4. REPETIO COM PRECONDIO program digitos;
var n, r : integer;
integer
Atravs da estrutura de repetio com precondio, begin
um comando pode ser executado repetidamente, write('Digite
write um nmero: ');
sem que tenhamos que escrev-lo diversas vezes no readln(n);
readln
programa. Para controlar a repetio, a execuo do
while n>0 do
comando fica condicionada ao valor de uma expres-
begin
so lgica, denominada condio, que avaliada a
r := n mod 10;
cada nova repetio, sempre antes que o comando
n := n div 10;
seja executado. Enquanto essa expresso verda-
writeln(r);
writeln
deira, o comando repetido.
end;
end
readln;
readln
while condio do end.
end
comando;;
4.2. Exerccios
Veja a seguir o fluxograma que ilustra o funciona-
mento desta estrutura de repetio: Para cada problema, codifique um programa Pascal:
4.1. Dado um nmero n, exibir todos os mpares
menores que n. Por exemplo, para n=10 devero
... ser exibidos os mpares: 1, 3, 5, 7 e 9.
4.2. A soma de n mpares consecutivos, a partir de 1,
F equivalente a n2. Por exemplo, 12 =1, 22 =1+3,
condio
32 =1+3+5, 42 =1+3+5+7, ... Inversamente, o n-
V mero n de mpares consecutivos que podem ser
... subtrados de um nmero x (sem produzir re-
comando
sultado negativo) igual raiz quadrada intei-
ra de x. Por exemplo, se tivermos x=18, pode-
remos subtrair dele no mximo 1+3+5+7=16, e a
resposta ser n=4. Dado um nmero x, informe
sua raiz quadrada inteira n, usando essa idia.
Para repetir vrios comandos no while, a- 4.3. A Srie de Fibonacci : 1, 1, 2, 3, 5, 8, 13, ... Note
grupe-os em um bloco com begin e end. que os dois primeiros termos desta srie so i-
guais a 1 e, a partir do terceiro, o termo dado
pela soma dos dois termos anteriores. Dado um
nmero n 2, exiba todos os termos da srie
4.1. Exibindo os Dgitos de um Nmero... que sejam menores ou iguais a n.
4.4. Numa certa agncia bancria, as contas so i-
No exemplo a seguir mostramos como a estrutura de dentificadas por nmeros de at quatro dgitos.
repetio com precondio pode ser usada para criar Por motivo de consistncia, a cada nmero n
um programa que exibe um a um os dgitos que associado um dgito verificador d calculado da
compem um nmero natural. Por exemplo, sendo seguinte maneira:
fornecido como entrada o nmero 8315, o programa
dever exibir como sada os dgitos 5, 1, 3 e 8. A es-
tratgia ser dividir o nmero sucessivamente por Seja n = 7314 o nmero da conta.
10 e ir exibindo os restos obtidos. O processo pra 1 Adiciona-se todos os dgitos de n, obtendo-
somente quando o quociente obtido numa das divi- se a soma s. Para o n considerado, a soma
ses zero: seria: s = 4+1+3+7 = 15;
2 O dgito verificador d dado pelo resto da
8315 10
diviso de s por 10. Para o s considerado, o
8310 831 10
5 830 83 10 dgito verificador seria d = 5
1 80 8 10
3 0 0 pra
Dado um nmero de conta n, informe o dgito
8
verificador correspondente.

Noes de Pascal / Prof. Silvio Lago 5


5. REPETIO COM POSCONDIO Note que as palavras repeat e until servem
como delimitadores de bloco e, assim, dis-
A estrutura de repetio com poscondio permite pensam o uso de begin e end.
que um comando seja executado at que uma de-
terminada condio seja satisfeita. Esse tipo de re-
petio garante que o comando seja executado pelo 5.2. Forando uma Entrada
menos uma vez antes que a repetio termine.
O comando repeat-until muito utilizado em situa-
repeat es em que o usurio deve ser forado a digitar um
valor dentro de um certo intervalo. Por exemplo,
comando; ;
poderamos alterar o programa da tabuada, visto na
until condio;
; seo 3.1, de tal forma que o usurio fosse obrigado
a digitar um valor entre 1 e 10.
O fluxograma a seguir ilustra o funcionamento do
comando repeat-until: program tab;
uses crt;
... var n, c, r : integer;
integer
begin
clrscr;
comando repeat
gotoxy(1,1);
gotoxy
F write('Digite
write um nmero: ');
condio clreol;
clreol
V
readln(n);
readln
until (n>=1) and (n<=10);
...
for c:=1 to 10 do
writeln(n,'
writeln x ',c,' = ',n*c);
5.1. Automatizando o Caixa readln;
readln
end.
end
Considere o problema: "Dada uma srie de valores,
representando os preos dos itens comprados por um
cliente, informe o total a ser pago". Como cada clien- 5.3. Exerccios
te pode comprar um nmero diferente de itens, no
h como prever o nmero exato de valores de entra- Para cada problema, codifique um programa Pascal:
da. Ento, vamos convencionar que o final da srie 5.1. Dado o saldo inicial e uma srie de operaes de
ser determinado por um valor nulo. Isso razovel, crdito/dbito, informe o total de crditos, o to-
j que no possvel que um item custe R$ 0,00. As- tal de dbitos, a C.P.M.F. paga (0,40% do total
sim, o programa dever solicitar os preos e adicio- de dbitos) e o saldo final da conta.
n-los at que um preo nulo seja informado; nesse
momento, o valor total dever ser exibido.
Saldo inicial? 1000.00
Operao? 200
program caixa; Operao? -50
uses crt; Operao? -10
var s, p : real;
real Operao? 170
begin Operao? -500
clrscr;
clrscr Operao? 0
--------------
s := 0;
Crditos..: R$ 370.00
repeat Dbitos...: R$ 560.00
write('Preo?
write '); C.P.M.F...: R$ 2.24
readln(p);
readln Saldo.....: R$ 807.76
s := s+p;
until p=0; 5.2. Refaa o exerccio 2.7, sobre equaes do 2o
writeln('Total
writeln a pagar: R$',s:0:2); grau, de tal modo que o usurio seja forado a
readln;
readln informar um valor diferente de zero para o coe-
end.
end ficiente a da equao.

Noes de Pascal / Prof. Silvio Lago 6


6. MODULARIAO sentam perguntas, procedimentos representam or-
dens. Por exemplo, considere os comandos a seguir:
A modularizao uma tcnica de desenvolvimento ...
baseada no princpio de "diviso e conquista": para clrscr;
resolvermos um problema complexo, primeiro iden- write('Num? ');
tificamos e resolvemos subproblemas mais simples readln(n);
e, ento, combinamos as solues desses subproble- r := sqrt(n);
mas para obter a soluo do problema original. Esse writeln('Raiz de ',n:0:1,' ',r:0:1);
processo de decomposio de problemas em subpro- ...
blemas representado atravs de um diagrama hie- O comando clrscr ordena que o computador limpe a
rrquico funcional (D.H.F.), conforme segue: tela e, portanto, um procedimento. J o comando
sqrt(n) pergunta ao computador qual a raiz qua-
Top Up drada de n e, portanto, uma funo. O procedi-
P mento clrscr produz um efeito como resultado de sua
execuo, enquanto a funo sqrt devolve um valor.
Evidentemente, os comandos write e writeln so
procedimentos e o efeito que produzem alterar o
A B C estado da tela, exibindo informaes. Mas e o co-
mando readln? uma funo ou um procedimento?
Note que readln(n) corresponde ordem "leia n" e,
portanto, tambm um procedimento; seu efeito
D E F alterar o valor da varivel n.

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.1. Mdulos As variveis locais e os parmetros so cri-


ados na memria apenas no momento em
Um mdulo2 pode ser codificado como uma funo que a rotina entra em execuo e deixam de
ou como um procedimento. O mdulo ser uma fun- existir assim que a execuo concluda.
o se ele deve devolver um valor como resultado de
sua execuo e ser um procedimento se apenas de-
ve produzir um efeito quando executado. Uma
maneira interessante de diferenciar funes de pro- Por exemplo, a funo a seguir calcula a medida da
cedimentos observar que enquanto funes repre- hipotenusa c de um tringulo retngulo a partir das
medidas dos seus catetos a e b.
2 O mesmo que rotina ou comando.

Noes de Pascal / Prof. Silvio Lago 7


function hip(a, b : real)
real : real;
real 6.3 Exerccios
var c : real;
real
begin Para cada problema a seguir, crie uma funo e co-
difique um programa para test-la:
c := sqrt(sqr
sqrt sqr(a)+sqr
sqr sqr(b));
sqr
hip := c; 6.1. Dado um nmero natural, determine se ele
end;
end par ou mpar.
6.2. Dado um nmero real, determine seu valor ab-
Para usar essa funo num programa, basta lem- soluto, ou seja, seu valor sem sinal.
brar que a implementao deve ser botton-up e que, 6.3. Dados dois nmeros reais, determine o mximo
portanto, o cdigo da funo deve aparecer antes do entre eles.
cdigo do mdulo principal3 do programa.
6.4. Dados dois nmeros reais, determine a mdia
aritmtica entre eles.
program TesteHip;
uses crt; 6.5. Dados um nmero real x e um nmero natural
var x, y, h : real; n, determine xn.
6.6. Dado um nmero natural n, determine n!.
{ clculo da hipotenusa }
function hip(a, b : real)
real : real;
real 6.7. Dado um nmero n, determine seu dgito verifi-
var c : real;
real cador conforme definido no exerccio 4.4.
begin
6.4. Procedimentos
c := sqrt(sqr
sqrt sqr(a)+sqr
sqr sqr(b));
sqr
hip := c; Procedimentos tm o seguinte formato:
end;
end

{ mdulo principal } procedure nome(parmetros);


begin variveis locais;
write('Catetos?
write '); begin
readln(x,y);
readln instrues;
...
h := hip(x,y); end;
end
write('Hipotenusa: ',h:0:1);
write
end.
end
Assim como funes, procedimentos devem ter um
nome, atravs do qual ele possa ser chamado. Pro-
cedimentos podem receber parmetros de entrada,
A execuo do programa inicia-se sempre no mdulo
mas no fornecem um valor de sada e, portanto,
principal e se o comando no chamado nesse m-
no precisamos declarar o tipo de resposta.
dulo ele no executado. No exemplo acima, o co-
mando hip() chamado com os argumentos x e y,
cujos valores so copiados, respectivamente, para os procedure msg(c,l:integer
integer;
integer m:string
string);
string
parmetros a e b da funo. Esses parmetros so begin
ento utilizados no clculo da hipotenusa c. Para gotoxy(c,l);
gotoxy
indicar que o valor em c deve ser devolvido como
write(m);
write
resposta da funo, devemos atribu-lo ao nome da
end;
end
funo. Quando a funo termina, as variveis a, b e
c deixam de existir; entretanto, o valor de c no
perdido, j que foi preservado no momento em que O comando msg(c,l,m), definido acima, exibe uma
foi atribudo como resposta da funo. dada mensagem m numa determinada posio (c,l)
da tela. Ao codificar um programa completo conten-
do esse comando, preciso lembrar que um mdulo
Em Pascal, comentrios so indicados en- no pode se referir a outro que no tenha ainda sido
tre chaves e so ignorados na compilao. codificado e, portanto, qualquer outro mdulo do
programa que utilize o comando msg() deve apare-
cer codificado aps ele (similarmente ao que foi feito
3 No Pascal, o mdulo principal o bloco finalizado com no programa TesteHip).
end seguido de ponto final.

Noes de Pascal / Prof. Silvio Lago 8


6.5. Exerccios 6.6. Passagem de Parmetros

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.

Noes de Pascal / Prof. Silvio Lago 9


Para funcionar como esperado, o comando troca() 6.8. Exerccios
deve permutar diretamente os valores das variveis
x e y. Isso s possvel se a passagem for feita por 6.14. No comando readln(n), o argumento n pas-
referncia. Para indicar essa alterao, basta acres- sado por valor ou por referncia? Por qu?
centar a palavra var na declarao dos parmetros:
6.15. Explique por que o parmetro n da funo pa-
ra clculo de dgito verificador, criada no e-
...
xerccio 6.7, deve ser passado por valor.
procedure troca(var
var a,b:integer
integer);
integer
var c : integer;
integer 6.16. Crie o comando incr(v,n), que incrementa o
begin valor da varivel v em n unidades. Por exem-
c := a; c: ? varivel local plo, se v vale 5, aps a execuo de incr(v,3), a
varivel v dever estar valendo 8.
a := b;
b := c; 6.17. As funes wherex e wherey, definidas em
end;
end CRT, devolvem a coluna e a linha em que se
... encontra o cursor. Usando essas funes, crie
a rotina cursor(x,y), que devolve a posio cor-
begin
... rente do cursor atravs dos parmetros x e y.
a,X: 5 Parmetros e
x := 5; argumentos
y := 7; compartilham o
b,y: 7
mesmo espao!
7. VETORES
troca(x,y);
troca(x,y)
write(x,y); Um vetor uma coleo de variveis de um mesmo
...
end.
tipo, que compartilham o mesmo nome e que ocu-
end
pam posies consecutivas de memria. Cada vari-
vel da coleo denomina-se elemento e identificada
Agora, os parmetros compartilham a mesma rea por um ndice. Se v um vetor indexado de 1 a n,
de memria j utilizada pelos argumentos passados seus elementos so v[1], v[2], v[3], ..., v[n].
rotina. Evidentemente, qualquer alterao feita
nos parmetros tambm feita nos argumentos. Ao nome do vetor
1 2 3 n ndices
final da execuo da rotina, as variveis a, b e c so
destrudas; entretanto, somente o espao de mem- v:
ria utilizado pela varivel local c pode ser liberado,
j que os espaos utilizados por a e b foram apenas elementos
tomados "emprestados" e devem continuar sendo
usados pelos argumentos x e y. Com essa nova ver-
Antes de criar um vetor preciso declarar o seu ti-
so, obteremos a sada 75, como era esperado.
po, ou seja, especificar a quantidade e o tipo dos e-
lementos que ele ir conter. Isso feito atravs do
6.7. Valor versus Referncia comando type, conforme exemplificado a seguir.
type vetor = array[1..5]
array of integer;
integer
A passagem por valor tem como vantagem o fato de
var v : vetor;
que ela garante a segurana dos argumentos que
so passados rotina, preservando seus valores ori- A primeira linha define um novo tipo de vetor, de-
ginais para uso futuro no programa. Essa seguran- nominado vetor, cujos elementos indexados de 1 a 5
a, porm, obtida a custa de um gasto adicional de so do tipo integer. A segunda linha declara uma
espao, para criar a cpia na memria, e tempo, para varivel, denominada v, do tipo recm definido.
transferir os valores do original para a cpia. Por
Em geral, um vetor v pode ser indexado com qual-
outro lado, a passagem por referncia no garante a
quer expresso cujo valor seja um nmero inteiro.
segurana dos argumentos, j que esses podem ser
Essa expresso pode ser uma simples constante,
alterados pela rotina. Porm, mais eficiente em
uma varivel ou ento uma expresso propriamente
termos de espao e tempo, j que os argumentos no
dita, contendo operadores aritmticos, constantes e
precisam ser duplicados na memria.
variveis. Por exemplo, seja i uma varivel do tipo
A deciso entre usar passagem por valor ou refern- integer e v o vetor criado no exemplo anterior. Se
cia deve ser feita com base na seguinte regra: se i=3, ento v[i div 2] v[1], v[i1] v[2], v[i] v[3],
esperado que um argumento seja alterado pela exe- v[i+1] v[4] e v[2i1] v[5]. Entretanto, v[i/2] cau-
cuo de uma rotina, ento a sua passagem deve ser sar um erro de compilao; j que a expresso i/2
feita por referncia. tem valor igual a 1.5, que no um ndice permitido.

Noes de Pascal / Prof. Silvio Lago 10


7.1. As temperaturas Acima da Mdia rotina e que, portanto, os valores armazenados se-
ro perdidos se a passagem for por valor. Note tam-
Dadas as temperaturas que foram registradas dia- bm que, na rotina que calcula a mdia a seguir, a
riamente, durante uma semana, deseja-se determi- passagem poderia ser por valor, pois no pretende-
nar em quantos dias dessa semana a temperatura mos alterar a varivel original; entretanto, a passa-
esteve acima da mdia. A soluo para esse proble- gem por referncia torna o cdigo mais eficiente.
ma envolve os seguintes passos:
 obter os valores das temperaturas; function media(var
var T : Temp) : real
real;
 calcular a mdia entre esses valores; var i : integer;
integer
 verificar quantos deles so maiores que a mdia. S : real;
real
begin
Lembrando da tcnica de modularizao, cada um
S := 0;
desses passos representa um subproblema cuja so-
For i:=1 to Max do
luo contribui para a soluo do problema origi-
nalmente proposto. Ento, supondo que eles j esti- S := S + T[i];
vessem solucionados, o programa poderia ser codifi- media := S/max;
cado como segue: end;

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];

Noes de Pascal / Prof. Silvio Lago 11


7.3. Codifique a rotina minimax(T,x,y), que devolve Para atribuir valores aos campos do registro hoje,
atravs dos parmetros x e y, respectivamente, podemos escrever:
a mnima e a mxima entre as temperaturas
hoje.dia := 25;
armazenadas no vetor T.
hoje.mes := 2;
7.4. Codifique a rotina Histograma(T), que exibe um hoje.ano := 2000;
histograma da variao da temperatura duran-
te a semana. Por exemplo, se as temperaturas
em T forem 19, 21, 25, 22, 20, 17 e 15C, a roti- 8.1. Registros Aninhados
na dever exibir:
D: possvel criar um registro em que um ou mais de
S: seus campos tambm sejam registros, desde que tais
T: registros tenham sido previamente definidos. Por
Q: exemplo, temos a seguir a criao de um registro
Q:
contendo um campo do tipo Data j definido:
S:
S:

Suponha que as temperaturas em T sejam to- type Pessoa = record


das positivas e que nenhuma seja maior que nome : string[31];
string[31]
80C. [Dica: crie uma rotina que exibe uma li- fone : string[20]
string[20];
nha com tamanho proporcional temperatura.] nasc : Data;
7.5. Usando as rotinas desenvolvidas nos dois exer- end;
end
ccios anteriores, altere o programa TAM para Var amigo : Pessoa;
exibir a temperatura mdia, a mnima, a m-
xima e tambm o histograma de temperaturas.
Para atribuir valores aos campos do registro amigo,
podemos escrever:
8. REGISTROS
amigo.nome := 'Itivaldo Buzo';
Um registro uma coleo de variveis logicamente amigo.fone := '850-9973';
relacionadas que no precisam ser do mesmo tipo. amigo.nasc.dia := 27;
Como no vetor, essas variveis tambm comparti-
amigo.nasc.mes := 7;
lham o mesmo nome e ocupam posies consecutivas
de memria. Cada varivel da coleo um campo amigo.nasc.ano := 1970;
do registro e identificada por um nome de campo.
Se x, y e z so nomes de campo vlidos e r um re- 8.2. Tabelas
gistro, ento r.x, r.y e r.z. so os campos de r.
Tambm possvel combinar vetores e registros de
muitas maneiras interessantes. A combinao mais
nome do registro nomes dos comum um vetor cujos elementos so registros.
x y z campos Como exemplo, vamos criar uma varivel para ar-
r:
mazenar uma agenda contendo informaes sobre
vrios amigos:
campos

const max = 10;


Por exemplo, as declaraes a seguir permitem a
type Agenda = array[1..max]
array of Pessoa;
criao de uma varivel capaz de armazenar datas:
Var a : Agenda;

type Data = record


dia : integer;
integer Por exemplo, para atribuir valores ao segundo ele-
mes : integer
integer; mento do vetor a, escrevemos:
ano : integer;
integer
end;
end a[2].nome := Roberta Soares;
a[2].fone := 266-0879;
var hoje : Data;
a[2].nasc.dia := 15;
a[2].nasc.mes := 11;
a[2].nasc.ano := 1971;

Noes de Pascal / Prof. Silvio Lago 12


Um vetor cujos elementos so registros denomina- Para usar um arquivo, preciso primeiro definir o
do tabela e representado com os elementos dispos- seu tipo. Por exemplo, a seguir definimos um arqui-
tos em linhas e os campos em colunas. vo para armazenar dados de funcionrios
nome fone nasc
1 Itivaldo Buzo 850-9973 27/07/1970 type data = record
2 Roberto Soares 266-0879 15/11/1971 dia, mes, ano: inte
integer;
ger
3 Maria da Silva 576-8292 09/05/1966
end;
end
type func = record
nome : string[30];
string
10 Pedro Pereira 834-0192 04/08/1973
salario : real;
real
admissao: Data;
8.3. Exerccios end;
end
type cadastro = file of func;
8.1. Defina um tipo de registro para armazenar da- var A : cadastro;
dos de um vo, como por exemplo os nomes das R : func;
cidades de origem e de destino, datas e horrios
de partida e chegada. Crie uma varivel desse
tipo e atribua valores aos seus campos.
9.1. Principais Operaes em Arquivos
8.2. Usando o tipo j definido no exerccio anterior,
defina um tipo de tabela para armazenar os
dados de todos os vos de um aeroporto (supo- Seja A uma varivel arquivo e R uma varivel regis-
nha que o total de vos seja 5) e codifique uma tro, do tipo daqueles armazenados em A. Para ma-
rotina para preencher uma tabela dessas. nipular arquivos, temos os seguintes comandos b-
8.3. Crie uma rotina que receba uma tabela conten- sicos:
do as informaes de vos e a exiba na tela.
assign(A,'nome do arquivo'): associa varivel A o
8.4. Crie uma rotina que receba uma tabela conten- nome do arquivo que ela ir representar;
do as informaes de vos e uma data e exiba
reset(A): abre arquivo representado por A, no modo
na tela todos os vos para a data indicada.
de leitura, e posiciona o primeiro registro como
8.5. Usando as rotinas j definidas, codifique um corrente; caso o arquivo no exista em disco, ocorre
programa completo para (1) preencher a tabela um erro de execuo;
de vos, (2) exibir a tabela de vos na tela e (3) rewrite(A): abre o arquivo representado por A, no
permitir ao usurio realizar consultas sobre os modo de gravao, e torna corrente sua primeira
vos de uma determinada data at que ele de- posio; caso o arquivo j exista, ele apagado.
seje parar.
eof(A): devolve true se j foi atingido o final do ar-
quivo representado por A.
9. ARQUIVOS close(A): fecha o arquivo representado por A.
read(A,R): l em R o registro corrente no arquivo
Um arquivo semelhante a um vetor, exceto por representado por A e pula para o prximo;
dois motivos: primeiro, o vetor fica armazenado na
write(A,R): grava o registro R na posio corrente
memria RAM, enquanto o arquivo fica armazenado
do arquivo representado por A e pula para a pr-
em disco; segundo, o vetor deve ter um tamanho
xima posio;
fixo, definido em sua declarao, enquanto o tama-
nho do arquivo pode variar durante a execuo do seek(A,P): torna P (os registros so numerados a
programa. A vantagem no uso de arquivos que, partir de zero) a posio corrente no arquivo re-
diferentemente do que ocorre com vetores, os dados presentado por A;
no so perdidos entre uma execuo e outra do filepos(A): devolve a posio corrente no arquivo
programa. A desvantagem que o acesso a disco representado por A;
muito mais lento do que o acesso memria e, con- filesize(A): devolve o tamanho (nmero de regis-
seqentemente, o uso de arquivos torna a execuo tros armazenados) do arquivo representado por A;
do programa mais lenta. Para melhorar a eficincia,
truncate(A): trunca (elimina todos os registros) a
em geral, partes do arquivo so carregadas em tabe-
partir da posio corrente, at o final, do arquivo
las armazenadas na memria antes de serem mani-
representado por A.
puladas. Isso diminui o nmero de acessos em disco
e aumenta a velocidade do programa.
9.2. Gravando um Arquivo
Noes de Pascal / Prof. Silvio Lago 13
program lista;
Vamos codificar um simples programa que solicita
os dados dos funcionrios ao usurio e os armazena type data = record
em um arquivo em disco. Como a quantidade exata dia, mes, ano: inte
integer;
ger
de funcionrios desconhecida, vamos convencionar end;
end
que a entrada de dados termina se o usurio digita func = record
ponto final quando lhe solicitado o nome do fun- nome : string[30];
string
cionrio: salario : real;
real
admissao: Data;
end;
end
program cadastra; cadastro = file of func;
type data = record var A : cadastro;
dia, mes, ano: inte
integer;
ger R : func;
end;
end begin
assign(A,'FUNC.DAT');
assign
func = record reset(A);
reset
nome : string[30];
string
salario : real;
real
admissao: Data; while not eof(A)
eof do
end;
end begin
read(A,R);
read
cadastro = file of func; write(R.nome,',
write ');
var A : cadastro; write(R.salario:0:2,',
write ');
R : func; write(R.admissao.dia,'/');
write
begin write(R.admissao.mes,'/');
write
assign(A,'FUNC.DAT');
assign writeln(R.admissao.ano);
writeln
rewrite(A);
rewrite end;
end
repeat close(A);
close
write('Nome?
write '); end.
end
readln(R.nome);
readln
if R.nome<>'.' then
begin 9.3. Exerccios
write('Salario?
write ');
readln(R.salario);
readln 9.1. Altere o programa sobre horrios de vos, codi-
writeln('Admissao:
writeln '); ficado no exerccio 8.5, de tal forma que o usu-
write('Dia?
write '); rio tenha a opo de gravar a tabela em disco
readln(R.admissao.dia);
adln ou carregar a tabela com dados lidos do disco.
write('Ms?
write '); 9.2. Com o comando truncate no possvel remover
readln(R.admissao.mes);
adln um registro do meio do arquivo, j que ele apa-
write('Ano?
write '); ga tudo desde a posio corrente at o final do
readln(R.admissao.ano);
adln arquivo. A soluo a seguinte: para remover o
write(A,R);
write registro de uma posio p, no meio do arquivo,
end;
end copie o ltimo registro do arquivo para a posi-
until R.nome='.'; o p e ento elimine apenas o ltimo registro.
Com base nessa idia, codifique um programa,
close(A);
close denominado exclui, que permite ao usurio ex-
end.
end cluir qualquer um dos registros do arquivo
FUNC.DAT, criado pelo programa cadastra. Pa-
ra cada operao de excluso, o programa deve
9.3. Lendo um Arquivo
listar os registros, e suas respectivas posies, e
solicitar ao usurio o nmero do registro a ser
A execuo do programa cadastra, codificado acima,
excludo. [Dica: abra o arquivo no modo de lei-
far com que seja criado em disco um arquivo cha- tura para no perder os dados]
mado FUNC.DAT. Agora, vamos criar um programa
que seja capaz de ler esse arquivo e listar seus da- 9.3. Para acrescentar um registro num arquivo exis-
dos em tela. Para que o arquivo seja lido correta- tente, abra o arquivo no modo de leitura, posi-
mente, preciso usar a mesma definio de tipo. cione-se na primeira posio disponvel no final
do arquivo e grave o novo registro. Usando essa
idia, crie um programa para incluso.
Noes de Pascal / Prof. Silvio Lago 14

Você também pode gostar