Você está na página 1de 21

APÊNDICE J

Manual de Sintaxe de Pascal


(Borland Turbo Pascal 7.0 e Delphi)

SUMÁRIO

J.1 Elementos básicos da linguagem J.9 Procedimentos e funções padrão


J.2 Unidades J.10 Funções definidas pelo usuário
J.3 Dispositivos J.11 Arquivos
J.4 Tipos de dados J.12 Diretivas de compilação
J.5 Variáveis e constantes J.13 Controle de dispositivos
J.6 Operadores J.14 Pascal padrão (Ansi Pascal) versus
J.7 Sentenças Borland Pascal
J.8 Escopo e localização REFERÊNCIAS

J.1 ELEMENTOS BÁSICOS DA LINGUAGEM

Palavras reservadas

and file not then


array for object to
asm function of type
begin goto or unit
case if packet until
const implementation procedure uses
constructor in program var
div iherited record while
do inline repeat with
downto interface set xor
else laber shl
end mod shr
nil string


mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

Diretivas (podem ser redefinidas)

absolute far near virtual


assembler forward private
external interrupt public

J.1.1 Identificadores
WriteLn Exit CadeiaReal System Rosas
Um_mês Nome_Sobrenome Dia_do_Mês Pedro_um

J.1.2 Cadeias de caracteres


‘Turbo’ {Turbo}
‘ ’ ‘ ’ { ‘ }
‘ ’
{cadeia nula}
‘ ’ {espaço}

J.1.3 Comentários
{Qualquer texto fechado entre chaves}
{*É também um comentário válido*}

J.1.4 Linha de programa


As linhas de programas em Turbo Pascal têm um comprimento máximo de 126 caracteres.

J.1.5 Estrutura de um programa

Cabeçalho program Exemplo Nome do programa


opcional
Unidades uses Crt;

Declarações const
de constantes Secreto = ‘R2D2’;

Declarações Type
de tipos Formato = string [12]

Declaração var
de variáveis Resposta : formato;

Declaração procedure ExemploUm;


de procedimentos begin
e/ou funções {corpo do procedimento}
end
...
Corpo de begin
programa {corpo principal do programa}
end
Manual de sintaxe de Pascal (Borland Turbo Pascal 7.0 e Delphi)mm

J.1.6 Procedimentos e funções


Cabeçalho procedure identificador (lista de parâmetros);
procedimento {declarações de dados}
begin
{corpo do procedimento}
end;

Cabeçalho function identificador (lista de parâmetros);


função {declarações de dados}
begin
{corpo da função}
end;

J.2 UNIDADES

J.2.1 Unidades padrão


Crt Suporte de tela e teclados
Dos, WindDos Funções de propósito geral DOS
Graph Rotinas gráficas
Graph3 Gráficos compatíveis com a versão 3
Overlay Implementa o administrador de sobreposições
Printer Acesso à impressora
Strings Tratamento de cadeias terminadas com o caractere nulo
System Rotinas da biblioteca em tempo de execução
Turbo3 Manutenção de compatibilidade com Turbo Pascal 3.0

J.2.2 Sintaxe da unidade


unit identificador
interface lista de unidades; opcional
{declarações públicas}
{cabeçalhos de todas as sub-rotinas públicas}
implementação
uses lista de unidades opcional
{declarações privadas}
{implementação de procedimentos e funções}
begin opcional
{código de inicialização}
end.

J.3 DISPOSITIVOS

COM Terminal
PRN Impressora
AUX Dispositivo auxiliar
LPT1 Impressora
NULL Dispositivo nulo
mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

J.4 TIPOS DE DADOS

J.4.1 Tipos simples


Boolean (lógicos) true false
Números inteiros

Byte 0 .. 255
Integer -32768 .. 32767
LongInt 2147483648 .. 2147483647
ShortInt -128 .. 127
Word 0 .. 65535

Números reais:

Real 2,9 × 10­-39 ..1,7 × 1038


Single 1,5 × 10-45 ..3,4 × 1038
Double 5,0 × 10-324 ..1,7 × 10308
Extended 3,4 × 10-4932..1,1 × 104932
Comp    -263 + 1..263 – 1

Caractere:
Char Qualquer caractere ASCII

Cadeias:
String Seqüência de até 255 caracteres ASCII. Se não se especifica um tamanho, se utilizará por defeito 255.

Ponteiros:
Pointer Direção de um elemento dado, procedimento ou função.

J.4.2 Tipos subintervalo


0..99
-128..127
Segunda..Domingo

J.4.3 Tipos enumerados


Type
Naipes = {Ouros, Espadas, Paus, Copas};

J.4.4 Tipos estruturados


Array array [1.110] of real
array [Boolean] of array [1..10] of array [Longitud] of Real;
packed array [1..10, 1..15] of Boolean

Registro type Reg = record


Nome : String [40];
Idade : Integer;
Salário : Real;
end;
Manual de sintaxe de Pascal (Borland Turbo Pascal 7.0 e Delphi)mm

Objeto type Ponto = object


x,y : Integer;
end;

Conjunto Letras : = [‘A’, ‘B’, ‘C’, ‘D’, ‘E’]


NãoLetras : = [ ]

Ponteiro type PonteiroReal = Real


Pchar type Pchar = Char;

J.4.5 Tipos procedimento


type
Proc = procedure;
InterX = procedure (var X,Y : Integer);
ProcCX = procedure (S : string);
FuncUma = function (X : Real) : Real;

J.5 VARIÁVEIS E CONSTANTES

J.5.1 Constantes predefinidas


true verdadeiro
false falso
maxint inteiro maior disponível na máquina

J.5.2 Declaração de variáveis


var
x,y,z : Real;
i,j,k : Integer;
Dígito : 0..9;

J.5.3 Variáveis absolutas


var
Cad : string[40]
LongCad : Byte absolute Cad;

J.5.4 Variáveis predefinidas


Variável Tipo

Imput Arquivo Texto


Output Arquivo Texto
ExitCode Integer
FileMode Byte
InOutRes Integer
RandSeed LongInt
StrackLimit Word
mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

J.5.5 Constantes com tipos


Tipo simples:

const
Máximo : Integer = 425;
Fator : Real = -12,5;
const
Mín : Integer = 0;
Máx : Integer = 100;
type declaração não válida
Lista = array [Mín..Máx] of Integer;
a declaração Lista não é válida. Mín e Máx são constantes de tipos

Tipo cadeia:

const
Cabeçalho : string[10] = ‘Cidades’;
Nova Linha: string[2] = #13#10;
Resposta : string[5] = ‘Sim’;

Tipo estruturado:

const
Dígitos : array [0..0] of Chars
(‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’);
const
Dígitos = array[0..0] of Char = ‘0123456789’;
type
Matriz = array [0..1, 0..1, 0..1] of Integer;
const
Lista : Matriz = (((0,1), (2,3)), ((4,6), (7,9)));

Tipo registro

type
Ponto = record
x, y : Real;
end
Vetor = array [0..1] of Ponto;
const
Origem : Ponto = (X:0,0; Y:0,0);
Linha : Vetor = ((X:-4,5; Y:1,5), (X:6,4; Y:5,0));

Tipo objeto:

type
Ponto = object
x,y : Integer;
end;
const
Origem : Ponto = (x:0; y:0);

Tipo conjunto:

type
Dígitos = set of 0..9;
Letras = set of ‘A’..‘Z’;
Manual de sintaxe de Pascal (Borland Turbo Pascal 7.0 e Delphi)mm

const
Pares : Dígitos = [0,2,4,6,8];
Vocais : Letras = [‘A’, ‘E’, ‘I’, ‘O’, ‘U’];

Tipo ponteiro:

type
Direção = (esquerda, direita, acima, abaixo);
PNódulo = ^NóduloT;
NóduloT = Record
...
end;
const
S1 : string[5] = ‘ABAIXO’;
N1 : NóduloT = (Seguinte : nil; Símbolo : @S1; Valor : Abaixo);

Tipo procedimento:

type
{$F*} = procedure (CódigoErro: Integer);
procedure ErroPorOmissão {CódigoErro : Integer};
begin
WriteLn (‘Erro’, CódigoErro, ‘,’);
end;
const
ManipuladorErros : ProcErro = ErroPorOmissão;

J.6 OPERADORES

J.6.1 Aritméticos
Operador Sintaxe Significado

+ +expressão Positivo (unitário)


+ expressão1 + expressão2 Soma (binária)
- -expressão Negativo (unitário)
- expressão1 – expressão2 Subtração (binária)
* expressão1 * expressão2 Multiplicação
/ expressão1 / expressão2 Divisão real
DIV expressão1 DIV expressão2 Divisão inteira
MOD expressão1 MOD expressão2 Resto (módulo)

J.6.2 Lógicos
Operador Sintaxe Significado

NOT NOT expressão Complemento


AND expressão1 AND expressão2 AND
OR expressão1 OR expressão2 OR inclusive
XOR expressão1 XOR expressão2 Or exclusiva
mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

J.6.3 Relacionais
Operador Sintaxe Devolve verdadeiro se:

= expressão1 = expressão2 Expressões são iguais


< > expressão1 < > expressão2 Expressões não são iguais
< expressão1 < expressão2 expressão1 é menor que expressão2
<= expressão1 <= expressão2 expressão1 é menor que ou igual a
expressão2
> expressão1 > expressão2 expressão1 é maior que expressão2
> = expressão1 >= expressão2 expressão1 é maior que ou igual a
expressão2

J.6.4 De conjuntos
Operador Sintaxe Devolve verdadeiro se:

= Conjunto1 = Conjunto2 Conjunto1 e Conjunto2 são idênticos. Cada


elemento do Conjunto1 está contido no
Conjunto2, e cada elemento do Conjunto2 está
contido no Conjunto1.
< > Conjunto1 < > Conjunto2 Um dos conjuntos contém ao menos um elemento que
não está no outro conjunto.
<= Conjunto1 <= Conjunto2 Cada elemento do Conjunto1 está também no
Conjunto2.
< Conjunto1 < Conjunto2 Cada elemento do Conjunto1 está também no
Conjunto2. Além de que o Conjunto2 contém ao
menos outro elemento que não se encontra no
Conjunto1.
>= Conjunto1 >= Conjunto2 Cada elemento do Conjunto2 está também no
Conjunto1.
> Conjunto1 > Conjunto2 Cada elemento do Conjunto2 está também no
Conjunto1. Além de que Conjunto1 contém ao
menos outro elemento que não é encontrado no
Conjunto2.
IN elemento In Conjunto2 O elemento elemento é encontrado no Conjunto1.

J.6.5 Direção
@ Direção de variável, procedimento ou função.

J.6.6 Concatenação
+ Concatena duas cadeias.

J.6.7 Prioridade de operadores


Prioridade Operadores

1 (alta) @NOTunitário + –
2 *./, DIV, MOD, AND, SHL, SHR
3 binário +, -, OR, XOR
4 (baixa) =, < >, < >, <=, >=, IN
Manual de sintaxe de Pascal (Borland Turbo Pascal 7.0 e Delphi)mm

J.7 SENTENÇAS

J.7.1 Atribuição
<identificação> := <expressão>

gama := alto-baixo;
conta := conta + 1;

J.7.2 Compostas
begin <sentenças> end

begin
z := 5
GetReal (‘Valor’, ValorReal);
WriteLn (ValorReal);
end

J.7.3 Seletiva (if)


if <condição> then if Cad1 < > Cad2 then
<sentença> begin
[else Cad1 := Cad1 + Cad2;
<sentença>]; WriteLn(‘nova cadeia’, Cad1);
end;

J.7.4 Seletiva (if-aninhada)


if (condição) then if x > y then
sentença if x > z then
else if (condição) then Write (x)
sentenças else
else if (condição) then Write (z);
sentenças else
else if y > z then
sentenças Write (y);
else
Write (z);
WriteLn (‘é o Maior’);

J.7.5 Seletiva múltipla (case)


case <selector> of case N of
<lista de constantes> 1, 2 : WriteLn (‘Primeiro’);
<sentenças 1> 3, 4, 5 : WriteLn (“Bronze’),
<lista de constantes> 7 : WriteLn (‘Fim’)
<sentenças 2> else
... WriteLn (‘Final’)
[else end;
<sentença por defeito>]
end;
10mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

J.7.6 Sentença repetitiva for


1. for <índice> := <valor inicial> to < valor inicial> do <sentença>

for k : = 1 to 10 do for j : = 1 to 10 do
WriteLn (‘corpo do laço’); begin
j : = j + z;
WriteLn (`passos ; ´ passos : 2);
passo : = passo + 1
end;
WriteLn (‘fora do laço’);

2. for <índice> := <valor final> downto <valor inicial> do <sentença>

for i := 10 downto 10 do
begin
Resultado := i * Resultado;
WriteLn(‘Laço’, i, Resultado);
end;

J.7.7 Sentença repetitiva while


while <condição> do passo : = 1;
<sentença>; while passo <= 10 do
<sentença> = sentença simples begin
sentença composta WriteLn (`Passos:´, passo:2);
passo := passo + 1
end;
WriteLn(‘fora do laço’);
While ch < > ‘ ’ do Read(ch);

J.7.8 Sentença repetitiva repeat


repeat passo := 1;
<sentença> repeat
until <condição> WriteLn (‘Passos : ‘, passo: 2);
passo := passo +1
until passo > 10;
WriteLn(‘Fora do laço’);

J.8 ESCOPO E LOCALIZAÇÃO

O escopo de um identificador é o conjunto de módulos (programas ou subprograma) no qual ele está


declarado legalmente ao identificador.

program Principal

var variáveis globais


w, x, y, z: ... parâmetros locais w, a, x
procedure Uno (var, w: ...; a:...);
var
x :...;
Manual de sintaxe de Pascal (Borland Turbo Pascal 7.0 e Delphi)mm11

begin
...
end;
procedure Dos (c:...; var x...); parâmetros locais c, y, x, z, w
var
z,w:...;
begin
...
end;

begin {Principal}
...
Um (y,z);
...
Dois (w,y,x);
...
end.

Para eliminar possíveis efeitos colaterais, devemos evitar utilizar variáveis globais em subprograma ou
identificadores idênticos para quantidades diferentes.

J.9 PROCEDIMENTOS E FUNÇÕES PADRÃO

Turbo Pascal contém procedimentos e funções padrão (incorporadas ou predefinidas) e variáveis pré-declaradas
na unidade System.Todos eles estão declarados na unidade System, conseqüentemente, não necessitamos nenhuma
sentença uses quando desejamos utilizar algum deles.

J.9.1 Funções aritméticas

Nome Sintaxe Descrição

Abs Abs (x); Devolve o valor (positivo) absoluto de seu argumento.


ArcTan ArcTan(x:Real):Real; Arco tangente expressado em radianos.
Cos Cos(x:Real):Real; Cosseno do argumento em radianos.
Exp Exp(x:Real):Real; Potência exponencial do argumento (ex).
Frac Frac(x:Real):Real; Parte decimal de um número real.
Int Int(x:Real):Real; Parte inteira do argumento.
Ln Ln(x:Real):Real; Logaritmo neperiano (base e) do argumento.
Pi Pi: Real; Valor de Pi (3,1415926535897932385).
Sin Sin(x:Real):Real Seno do argumento.
Sqr Sqr(x); Quadrado do argumento.
Sqrt Sqrt(x:Real):Real; Raiz quadrada do argumento.

Exemplo
y := abs(x)* 2 z := Int(345,678);
z := ArcTan(1.75); t := Ln(1,25);
Tan := Sin(x)/cos(x); z := ArcTan(Pi);
Pot := Exp(3); z := Sin(Pi);
R := Frac)-245.123); f := Sqr(3,45);
f := Sqrt(1,2345);
12mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

J.9.2 Funções de transferência

Nome Sintaxe Descrição

Chr Chr (x:Byte):Char; Devolve o caractere correspondente ao código ASCII.


Ord Ord(x):LongInt; Número ordinal de um tipo ordinal.
Round Round (x:Real):LongInt; Arredonda um valor real para um inteiro longo.
Trunc Trunc (x:Real):LongInt; Trunca um valor do tipo real inteiro.

Exemplos
Write (Chr(i)); Round(5,449) devolve 5
Ord (‘A’) Trunc(-3,14) devolve –3
Trunc(6,5) devolve 6

J.9.3 Procedimentos de fluxo de controle

Nome Sintaxe Descrição

Break Break; Termina uma sentença for, while ou repeat.


Continue Continue; Continua com a interação seguinte de uma sentença
for, while ou repeat.
Exit Exit; Termina imediatamente o bloco atual (procedimento,
função ou programa).
Halt Halt[CódigoSaída: Word]; Detém a execução do programa e retorna ao sistema
operativo.
RunErro RunError[(CódigoError: Byte)]; Detém a execução do programa e gera um erro no
tempo de execução.

Exemplos

if t = ‘s’ then Exit; if p = nil then


RunError(294);

J.9.4. Procedimentos ou funções ordinárias

Nome Sintaxe Descrição

Dec Dec(var x[;n:LongInt]); Decompõe uma variável.


Inc Inc(var x [;n:LongInt]); Incrementa uma variável.
High High(x); Devolve o valor mais alto na gama do argumento que deve
ser um tipo array ou um tipo cadeia.
Low Low(x) Devolve o valor mais baixo na gama do argumento (tipo array
ou cadeia).
Odd Odd(x:LongInt):Boolean; Devolve true se o argumento for ímpar.
Pred Pred(x); Precursor do argumento (x de tipo ordinal).
Succ Succ(x); Sucessor do argumento (x de tipo ordinal).
Manual de sintaxe de Pascal (Borland Turbo Pascal 7.0 e Delphi)mm13

Exemplos
Dec(z); for Dia := Low(ADia) to High (ADia) do
Inc(z); begin
...
for i := 0 to Hight (x) do end;
s := s + x[i];
Pred(‘z’) devolve ‘4’
Succ(1946) devolve 1947

J.9.5 Tratamento de cadeias

Procedimentos

Nome Sintaxe Descrição

Delete Delete(var s:string ; Apaga uma subcadeia a partir de uma posição em uma
Pos,Len:Integer); cadeia.
Insert Insert(var s:string; var D: Insere uma subcadeia em uma posição de uma cadeia.
string; Pos:Integer);
Str Str(I:Integer; var s: Converte um valor numérico à cadeia.
string);
Str(R:Real; var s:string );
Val Val(s:string; var R:Real,P: Converte uma cadeia a seu valor numérico.
Integer);
Val(s:string; var
I,P:Integer);

Funções

Nome Sintaxe Descrição

Concat Concat(s1,s2,...,sn: Concatena uma cadeia ou cadeias.


string):string;
Copy Copy(s:string;Pos,Long: Cópia de uma cadeia dada.
Integer):string;
Length Length(s:string):Integer; Comprimento de uma cadeia.
Pos Pos(Padrão,Fonte:string: Posição da primeira ocorrência de uma cadeia.
Integer;

Exemplos
Cadl := ‘computador’; Str(Maxint,Cad);
Delete(Cad1,4,3); WriteLn(Cad);
Insert(‘put’Cad1,4); Val(‘32425’,r,e);
s := Concat (‘xyz’, ‘LUIS’); s := copy (s, 2, 3);
t := Length(Cad);
14mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

J.9.6 Ponteiros e direções

Nome Sintaxe Descrição

Addr Addr(x):Pointer; Devolve a direção de um objeto especificado.


Assigned Assigned(var P):Boolean; Comprova se uma variável ou procedimento é nil.
CSeg Cseg:Word; Valor atual de registro CS.
DSeg DSeg:Word; Valor atual de registro DS.
Ofs Ofs(x):Word; Deslocamento de um objeto especificado.
Ptr Ptr(Seg,Ofs:Word):Pointer; Converte uma base de segmento e uma direção de
deslocamento a um valor tipo ponteiro.
Seg Seg(x):Word; Direção do segmento de uma variável ou rotina.
Sptr Sptr:Word; Valor atual de registro SP.
Sseg Sseg:Word; Valor atual de registro SS.

Exemplos
p := Addr(p);
if Assigned(p) then WriteLn(‘ok);
p := Ptr(Cseg,I);
p := Ptr(Dseg,I);
WriteLn(`offset=´ Ofs(p2));
Baixo := Ptr(0000,$046c);
WriteLn(‘seg(I)=’,seg(I));

J.9.7 Tarefa dinâmica

Procedimentos

Nome Sintaxe Descrição

Dispose Dispose(var p:pointer[,Destructor]);


FreeMem FreeMem(var p:pointer; Tamanho:Word);
GetMem GetMem(var p:pointer; Tamanho:Word);
New New(var p:pointer[,Init:Constructor]);

Funções

Nome Sintaxe Descrição

MaxAvail MaxAvail:LongInt; Tamanho do bloco disponível maior do montículo


(heap).
MemAvail MemAvail:LongInt; Quantidade de memória livre no montículo (heap).
BlockRead BlockRead(var f:file; Ler um ou mais registros em um arquivo sem tipos.
var Buf:tipo
Conta: Word[;var
Resultado:Word]);
Manual de sintaxe de Pascal (Borland Turbo Pascal 7.0 e Delphi)mm15

Nome Sintaxe Descrição

BlockWrite BlockWrite(var f:file; Escreve um ou mais registros em um arquivo sem tipos.


var Buf:tipo
Conta: Word[;var
Resultado:Word]);
Close Close (var F); Fecha um arquivo aberto.
Erase Erase (var F); Apaga um arquivo externo.
FileSize FileSize(var F); LongInt; Devolve o tamanho atual de um arquivo (não de texto).

Flush Flush(var F:Text); Limpa o buffer de um arquivo de texto de saída.


Read Read(F,VI[,V2,...Vn]); Lê um ou mais valores de um arquivo.
ReadLn ReadLn(var Igual a Read e depois salta para o princípio da
F:Text;]V1[V2,... linha seguinte.
Vn]);
Rename Rename(var F:NovoNome); Renomeia um arquivo externo.
Reset Reser (var F[:file;TamaReg: Abre um arquivo existente.
Word]);
ReWrite ReWrite(var F[:file;TamaReg: Cria e abre um arquivo novo.
Word]);
Seek Seek(var F;N:LongInt); Move a posição atual de um arquivo a um componente
especificado.
SetTextBuf SetTexBuf(var F:TExt; Atribui uma memória intermediária de E/S a um
varBuf:tipo arquivo de texto.
[;Tamanho:Word]);
Truncate Truncate (var F); Trunca um arquivo com tipos ou sem tipo.
Write Write ([var F:Text;]p1[,p2, Escreve um arquivo de texto.
..., pn1]);
.Write (f,v1,[v2,...,vn]); Arquivos com tipos.
WriteLn WriteLn ([var F:Text;]p1[p2, Igual a Write e logo escreve um fim de linha.
...,pn]);
Eof Eof (var F):Boolean; Devolve o estado fim de arquivo.
Eoln Eoln[(var F:Text)]Boolean; Devolve o estado fim de linha de um arquivo de texto.

FilePos FilePos(var F):LongInt; Posição atual de um arquivo com ou sem tipos.


IOResult IOResultInteger; Estado da última operação de E/S realizada.
SeekEof SeekEof[(var F:Text)]: Estado fim de arquivo de um arquivo.
Boolean;
SeekEoln SeekEoln[(var F:Text)]; Estado fim de linha de um arquivo.

Exemplos
var Tf:TExt; Reset(F);

F:File; Seek(Tf,12);

Assign(Tf,‘TEXT.TXT’); Read(Tf,ch);

Rewrite(Tf); SetTextBuf(F,Buffer,512);
Close(Tf);
Append(Tf); Existe := (IOResult = 0);
BlockRead(F,A,10,Resultado); while not SeekEof(Tf) do
BlockWrite(F,A,I,Resultado); begin
Erase(F) ReadLn(Tf,S);

Seek(F,FileSize(F)); Inc(C2);
Flush(F) end
16mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

while not Eof Tf) do While not SeekEoln(Tf) do


begin begin
if Eoln (Tf) ReadLn (Tf, Ch);
then writeLn; write(ch);
if Length (s) > 0 end;
then Rename (F, S) ;

J.10 FUNÇÕES DEFINIDAS PELO USUÁRIO

J.10.1 Declaração
function <identificador> (<parâmetros formais>): <tipos>;
<declarações locais>
begin
<corpo da função>
end;

J.11 ARQUIVOS

J.11.1 Preparação de um arquivo


• Enlace entre um arquivo interno e um arquivo externo.
Assign (<identificador de arquivo> , <nome arquivo externo>);

J.11.2 Criação de um arquivo de registros


• Preparar o sistema para enviar dados da estrutura interna do arquivo externo criando e abrindo um novo
arquivo para receber a saída do computador.
Rewrite(<identificador de arquivos>);

J.11.3 Armazenar dados em um arquivo


Write(<identificador de arquivo>, <identificador de saída>);

J.11.4 Fechar um arquivo


Close(<identificador de arquivo>);

J.11.5 Leitura de um arquivo de registros

Procedimento Reset (inicializar um arquivo)


Reset(<identificador de arquivo>);

Leitura de um arquivo de registros


Read(<identificador de arquivo>, <identificador de entrada>);
Manual de sintaxe de Pascal (Borland Turbo Pascal 7.0 e Delphi)mm17

Final de arquivo
Eof(<identificador de arquivo>);

Apagar arquivos
Erase(<identificador de arquivos>);

J.11.6 Mudar registros em um arquivo de registros

Função de posição FilePos


FilePos(<identificador de arquivo>);

Posicionamento em registro
Seek(<identificador de arquivo>, <número de registro>);

J.12 DIRETIVAS DE COMPILAÇÃO


J.12.1 Diretivas de comutação
Valor por
Diretiva Significado Tipo
defeito

A Alinhar dados {$A+} Global


B Avaliação lógica (booleana) {$B-} Local
D Informação de depuração {$D+} Global
E Emulação {$E+} Global
F Chamadas remotas forçadas {$F-} Local
G Geração de código 80286 {$G-} Global
I Verificação de E/S {$I+} Local
L Geração de informação de símbolos locais {$L+} Global
N Processo numérico {$N-} Global
P Parâmetros de cadeias abertas {$P-} Local
O Geração de código de solapamento {$O-} Local
Q Geração de código de verificação de transbordamento {$Q-} Local
R Verificação da gama {$R-} Local
S Verificação de transbordamento de pilha {$S+} Local
T Tipos de valores ponteiro, gerados pelo operador @ {$T-} Global
V Verificação de tipos em cadeias passadas como parâmetros variáveis {$V+} Local
X Ativa ou desativa sintaxe estendida de Turbo Pascal {$X+} Global
Y Informação de referências a símbolos {$Y+} Global

J.12.2 Diretivas de parâmetro


Diretiva Significado Sintaxe

I Arquivo de inclusão {$I nomearquivo}


L Conecta o arquivo reforçado com o programa {$L nomearquivo}
ou unidade que se está compilando
M Requisitos de tarefas de memória; long; tamanho da pilha; {$M long, mín, máx}
mín e máx, tamanho mínimo e máximo do montículo
O Nome da unidade recoberta {$O nomeunidade}
18mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

J.12.3 Diretivas de compilação condicional


Diretiva Significado

{DEFINE nome} Define um símbolo condicional com o nome dado.


{$ELSE} Comuta entre a compilação.
{$ENDIF} Termina a compilação condicional iniciada pela última diretiva{$IFxxx}.
{$IFDEF nome} Compila o texto fonte que segue se nome está definido.
{$IFNDEF} Compila o texto fonte que segue se nome não está definido.
{$IFOPT comutador} Verdadeiro ou falso de acordo com a diretiva comutador estar ativada ou desativada.
{$UNDEF nome} Não define um símbolo condicional definido anteriormente.

{$IFxxx} {$IFxxx} {$IFDEFnome}


... ... <sentenças–1>
{$ENDIF} {$ELSE} {$ELSE}
... <sentenças–2>
{$ENDIF} {$ENDIF}

J.12.4 Símbolos condicionais

Símbolo Significado

VER70 Sempre definido, indicando versão 7.0.


MSDOS Sempre definido, indicando que o sistema operativo é MS-DOS ou PC-DOS.
CPU86 Sempre definido, indicando que a CPU pertence à família de processadores 80 × 86.
CPU87 Definido se um co-processador matemático está presente em tempo de compilação.

J.13 CONTROLE DE DISPOSITIVOS

As unidades Crt e Printer são utilizadas com pouca freqüência pelos programadores. Printer envia saída
a sua impressora. A unidade Crt implementa uma ampla e potente gama de rotinas que lhe proporciona um
controle completo de características de seu PC, tal como controle de modo da tecla, códigos de teclado esten-
dido, cores, janelas e sons. Por sua importância prática para o programador, selecionamos as características
mais notáveis utilizadas em programação profissional.
Lembre-se de que, para utilizar a unidade Crt ou Printer em seu programa, deve incluir a clausula uses
como qualquer outra unidade.

uses Crt, Printer;

J.13.1 Caracteres de controle


Caractere Nome Descrição

#7 BELL Emite um som (apito) de alto falante interno.


#8 BS Retrocede o cursor uma coluna.
#10 LF Avança o cursor uma linha abaixo.
#13 CR Retorna o cursor ao extremo esquerdo da linha seguinte
Manual de sintaxe de Pascal (Borland Turbo Pascal 7.0 e Delphi)mm19

J.13.2 Teclas de edição de entrada de linhas

Tecla de edição Descrição

RETROCESSO (←) Apaga o último caractere digitado.


ESC Apaga a linha de entrada completa.
ENTER (Intro) Encerra linha de entrada e armazena em armazenamento temporário.
Gera marca de final de linha.
CTRL+S Igual ao retrocesso (Backspace).
CTRL+D Chama um caractere da última linha digitada.
CTRL+A Igual a ESC.
CRTL+F Chama a última linha digitada.
CRTL+Z Termina a última linha digitada e gera uma marca de final de arquivo.

Funções

Nome Sintaxe Descrição

KeyPressed KeyPressed Devolve true se teclada uma tecla do teclado; será false, caso contrário.
ReadKey ReadKey Lê um caractere do teclado.
WhereX WhereX Devolve coordenada x da posição atual do cursor.
WhereY WhereY Devolve coordenada y da posição atual do cursor.

Exemplos
repeat Car := Readkey;
Write(‘Zz’);
until KeyPressed; gotoxy(1; whereY-1);

Nome Sintaxe Descrição

InsLine InsLine Insere uma linha vazia na posição do cursor.


LowVideo LowVideo Seleciona caracteres de baixa intensidade.
NormVideo NormVideo Seleciona caracteres normais.
NoSound NoSound Desativa viva voz interno.
Sound Sound(HZ:Word) Inicia viva voz.
Textbackground Textbackground Color:Byte) Seleciona a cor de fundo.
TextColor TextColor(Color:Byte) Seleciona cor de caractere (primeiro plano).
TextMode TextMode(Modo:Word) Seleciona um modo de texto especificado.
Window Window(x1,y1,x2,y2:Byte) Define uma janela de texto na tela.

Procedimentos
Gotoxy(1,10); Window(1,10,60,20);
Write(‘Mackoy); DelLine;
ClrEol; Write(‘Mortimer’);
ReadLn(Car); InsLine;
Sound(440); repeat
Delay(500); x := Succ Random(80));
NoSound; y := Succ(Random(80));
Window(x,y,x + Random(10);
y + Random(10));
TexBackground Random(15))
ClrScr;
until KeyPressed;
20mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

J.14 PASCAL PADRÃO (ANSI PASCAL) versus BORLAND PASCAL


Borland Pascal segue as normas de Pascal padrão, com uma série de exceções e melhorias que o configuram
como um ambiente de programação especial. A versão Object Pascal tem somadas as características próprias
da programação orientada a objetos.

J.14.1 Melhorias do Borland Pascal (não existem no Pascal padrão)


As seguintes características são próprias de Borland e não existem no Pascal ANSI (padrão):
• Novas palavras reservadas em Turbo Pascal:
absolute interface string
external interrupt unit
implementation shl uses
inline shr xor

• Um identificador pode conter caracteres sublinhados (–):


Paga_mês Nome_Apelidos Interes_Anual

• Constantes:
Inteiras (podem ser escritas em notação hexadecimal, com prefixo $).
De cadeias: são compatíveis com tipos string e podem conter caracteres de controle e outros caracteres
não impressos.
• Novos tipos inteiros:
shortint longint byte Word

• Novos tipos reais:


single double extended comp
• Borland incorpora tipos string.
• As declarações de constantes, tipos, variáveis, procedimentos e funções podem ocorrer qualquer número
de vezes em qualquer ordem em um bloco.
• Borland incorpora tipos procedimento.
• As variáveis podem ser declaradas em direções de memória absoluta utilizando uma cláusula absolute.
• As variáveis tipo string podem ser indexadas como arrays para acessar individualmente caracteres de
uma cadeia.
• Borland incorpora três novos operadores lógicos: xor, shl e shr.
• Os operadores not, and, or e xor podem ser utilizados com operandos tipo inteiro para executar
operações lógicas bitwise.
• O operador + pode ser utilizado para comparar cadeias.
• Borland incorpora o operador @, que serve para obter a direção de uma variável, um procedimento ou
uma função.
• Os valores tipo string podem ser entrada e saída com os procedimentos padrão Real, ReadLn, Write e
WriteLn.
• A sentença case permite gamas de constantes na lista de etiquetas case e possui uma parte opcional
else.
• Borland Pascal incorpora unidades para programação modular e compilação separada.
• Borland Pascal incorpora os seguintes novos procedimentos e funções específicas de tratamento de
arquivos:
Append Clase Fush RmDir
BlockRead Erase GetDir Seek
BlockWhite FilePos MkDir SeekEos
ChDir FileSize Rename SeekEoln
Manual de sintaxe de Pascal (Borland Turbo Pascal 7.0 e Delphi)mm21

• Turbo Pascal incorpora as novas funções e os procedimentos seguintes:


Addr GetMen Move Sptr
Concat Halt Ofs Seg
Copy Hi ParamCount SizeOf
CSeg Inc ParamStr SSeg
DSeg Insert Pi Str
Dec Int Pos Swap
Delete Length Ptr UpCase
Exit Lo Random Val
FillChar Mark Randomize
Frac MaxAvail Release
FreeMem MemAvail RunError
• Arrays abertos em Borland Pascal e novas funções High e Low.
• Cadeias terminadas em nulo, semelhantes às cadeias em C. Somente na versão Borland Pascal.
• Novas sentenças de controle incondicional: break e continue. Somente na versão Borland Pascal.

J.14.2 Características de Pascal padrão não existentes em Turbo Pascal


• Identificadores:
Pascal padrão: um identificador pode ser de qualquer comprimento e todos os caracteres são
significativos.
Borland Pascal: um identificador pode ser de qualquer comprimento, mas somente são significativos
os 63 primeiros caracteres.
• Em Pascal padrão, um comentário pode começar com {e finalizar com *) ou vice-versa. Em Borland
Pascal, os comentários devem começar e terminar com o mesmo conjunto de símbolos.
• Em Pascal padrão, uma variável file (arquivo) tem uma variável buffer (memória intermediária) associada,
que se identifica pelo símbolo ^ depois da variável file. Em Borland Pascal, uma variável arquivo não tem
um variável buffer associada, e se for escrito um ^ depois da variável, será considerado um erro.
• Pascal padrão define os procedimentos Get e Put, que são utilizados para ler e escrever em arquivos.
Não estão definidos em Borland Pascal.
• Em Pascal padrão, se o valor do seletor em uma sentença case não for igual a qualquer das constantes
case, produz-se um erro. Em Borland Pascal não pode ser produzido erro; em seu lugar se ignora a
sentença case, exceto que tenha a cláusula else.
• Em Pascal, uma leitura (Read) de um arquivo texto com uma variável tipo char atribui um branco à
variável se Eoln era true antes de Read. Em Borland Pascal se atribui à variável um caractere retorno
de carro (ASCII 13).
• Em Pascal, uma leitura (Read) de um arquivo de texto com variáveis tipos inteiro ou real cessa prontamente
quando o caractere seguinte do arquivo não é parte de um número ou inteiro com sinal. Em Borland Pascal
a leitura cessa quando o caractere seguinte do arquivo é um branco ou um caractere de controle.
• Em Pascal está definido o procedimento padrão Page, que produz um salto de página (passa a uma nova
página). Este procedimento não está definido em Borland Pascal; entretanto, pode ser realizado com a
sentença Write (F, Chr(12)).
Page(F) equivale a Write(E, Chr(12)).

REFERÊNCIA
JOYANES, Luis. Programación en Turbo Pascal. 3ª. ed. Madri: McGraw-Hill, 1997.
JOYANES, Luis. Turbo/Borland Pascal: Iniciación y referencia. Madri: McGraw-Hill, 1997.
JOYANES, Luis; Hermoso, Angel; Zahonero, Ignacio. Pascal: Um enfoque prático. McGraw-Hill, 1998.