Professional Documents
Culture Documents
Introdução a
Linguagem Pascal
Autor:
Silvestre Santos
. 1
Linguagem Pascal
Introdução a
linguagem Pascal
. 2
Linguagem Pascal
. 3
Linguagem Pascal
DOSSEG
.MODEL SMALL
EXTRN _IntDivide:PROC
.CODE
PUBLIC _Average
...
Segundo os padrões dos dias de hoje, a linguagem assembly é uma linguagem de nível muito baixo,
porque seus comandos correspondem, um a um, ao conjunto de instruções de uma CPU. Na verdade não existe
apenas uma linguagem assembly. Cada tipo de CPU que tem um conjunto de instruções exclusivo tem sua
própria linguagem assembly.
Para usar-se linguagem de montagem em um computador, é necessário que haja um meio de converter
os símbolos alfabéticos utilizados no programa em código de máquina, de modo a poder ser compreendido pela
CPU. O processo de conversão (também denominado tradução) é chamado de montagem e é realizado por um
programa chamado Montador (Assembler). O montador lê cada instrução em linguagem de montagem e cria
uma instrução equivalente em linguagem de máquina.
A linguagem assembly continua, apesar de ser de uso tedioso e complexo, a ser importante, porque dá
aos programadores total controle sobre a CPU do computador. Além disso produz-se um código compacto,
rápido e eficiente.
Vantagens:
Desvantagens:
. 4
Linguagem Pascal
Detail_procedure()
{
int file_status, current_line, id_num;
char *name;
float current_sales, ytd_sales, total_sales;
...
Vantagens:
• programador não se preocupa com aspectos muito técnicos, permitindo que ele se preocupe com o
problema a ser resolvido;
• Permitem rápido desenvolvimento de novos sistemas;
• Permitem que os programadores aprendam mais rapidamente, programem com mais eficiência e
façam alterações mais facilmente em programas anteriormente escritos;
• Maior portabilidade, ou seja, facilidade de transferência de programas para máquinas diferentes.
Desvantagens:
. 5
Linguagem Pascal
1.3.1 Montagem
É o tipo de tradução mais rápido e simples que existe e é realizada por um programa denominado
montador (assembler). Como o nome já explica, a montagem é realizada para traduzir um programa em
linguagem de montagem para seu equivalente em linguagem binária, executável. Cada ordem do programador é
convertida diretamente em uma única ordem de máquina.
Neste processo o programa escrito em linguagem de montagem, chamado de código fonte, é
examinado, instrução por instrução, e, em seguida, é convertido (traduzido) para um outro programa em
linguagem binária de máquina, denominado código objeto.
Programa
Código Fonte escrito pelo
programad
Montage
m
Programa
Código Objeto resultante,
em
linguagem
. 6
Linguagem Pascal
1.3.2 Compilação
Quando se deseja converter para linguagem de máquina um programa escrito em linguagem de mais
alto nível que o da linguagem de montagem, então o método utilizado se chama compilação. Nas linguagens de
alto nível, todo programa escrito em uma determinada linguagem de programação (chamado de código fonte ou
programa fonte) é convertido em sua versão em linguagem de máquina (código objeto ou programa objeto),
sendo esta tradução feita antes de qualquer tentativa de execução.
No processo de montagem, há uma relação de 1:1, ou seja, cada instrução do código fonte resulta em
uma instrução de máquina, enquanto na compilação a relação é múltipla, cada instrução do código fonte
gerando várias instruções de máquina.
Código Fonte
Open file_entrada Programa
Read A,B,C escrito pelo
While not eof programad
(file_entrada) do or em
linguagem
Programa
compilad Compilaç
or ão
Código Objeto
1011 0011 0000
Programa
0011
resultante,
1010 0000 0000
em
0100
linguagem
1.3.2.1 Bibliotecas
O desenvolvimento de um programa certamente utilizará diversas operações que são comuns a muitos
outros programas. Por exemplo, a execução de uma instrução de entrada e saída, a classificação dos dados de
um arquivo, o cálculo de funções matemáticas, etc. Uma linguagem de alto nível geralmente incorpora diversas
rotinas prontas (que fazem parte da linguagem) e que compõem bibliotecas (librarys) de funções pré-
programadas que poderão ser utilizadas pelo programador, poupando tempo, aumentando a eficiência e
evitando erros. Dessa forma, um programa em alto nível possivelmente conterá diversas chamadas de biblioteca
(library calls).
Essas funções não devem ser confundidas com as instruções da linguagem - na realidade, são
pequenos programas externos que são chamados através de instruções especiais de chamada de biblioteca.
Para serem executadas, essas rotinas precisam ser incorporadas ao código do programador, isto é, a
chamada de biblioteca precisa ser substituída pelo código propriamente dito, incluindo os parâmetros
necessários.
1.3.2.2 Ligação
Assim, o código objeto preparado pelo compilador em geral não é imediatamente executável, pois ainda
existe código (as rotinas de biblioteca) a ser incorporado ao programa. A cada chamada de biblioteca encontrada
no código fonte, o compilador precisará incluir uma chamada para a rotina e o endereço dos dados que devam
ser passados para a rotina.
A tarefa de examinar o código objeto, procurar as referências a rotinas de biblioteca (que constituem
referências externas não resolvidas), buscar a rotina da biblioteca, substituir a chamada pelo código ("resolver as
. 7
Linguagem Pascal
referências externas") e obter os parâmetros para incluí-los no código objeto é executada por um programa
chamado Ligador (LinkEditor). O resultado da execução do Ligador é o código final pronto para ser executado
pelo computador, chamado módulo de carga ou código executável.
Uma biblioteca é uma coleção de códigos objeto, um para cada rotina específica, e é indexada pelo
nome da rotina. Quando um programa de aplicação deseja usar uma dessas rotinas, ele insere uma chamada de
biblioteca no seu código (“library call”).
Programa
Código Fonte
escrito pelo
programad
or em
Programa linguagem
compilad Compilaç
or ão
Programa
Programa
Código Objeto resultante,
resultante,
emem
linguagem
linguagem
Biblioteca A
Ligador
Ligação Biblioteca B
Biblioteca C
Código Executável
O módulo de carga, após testado e depurado (isto é, depois de resolvidos todos os erros, também
chamados "bugs") é armazenado em memória de massa para ser executado quando necessário. O processo de
compilação e ligação é executado apenas pelo programador na fase de desenvolvimento e não mais precisará
ser executado pelo usuário, quando da execução do programa.
1.3.3 Interpretação
Com o processo de execução de um programa em fases distintas (compilação / ligação / execução)
apresentado, um programa para ser executado precisa primeiro ter sido convertido para código objeto pelo
compilador e depois ter passado pelo ligador. Esse processo é o mais largamente utilizado, porém não é o único.
O método alternativo chama-se de interpretação e, a partir do programa fonte, realiza as três fases
(compilação, ligação e execução), comando por comando, em tempo de execução. Não existem fases distintas
nem se produzem códigos intermediários. Todo o processo de conversão é efetuado em tempo de execução e
imediatamente executado. Ou seja, cada comando é lido, verificado, convertido em código executável e
imediatamente executado, antes que o comando seguinte seja sequer lido.
Linguagens como C, Pascal, COBOL, etc, são linguagens tipicamente compiladas, enquanto o BASIC
foi desenvolvido como linguagem interpretada (hoje também existem linguagens BASIC compiladas e o
programador pode optar).
As linguagens de programação tipicamente de usuário, tais como das planilhas Excel, o Word Basic
(linguagem de construção de Macros do Word), o Access, etc, são todas linguagens interpretadas.
. 8
Linguagem Pascal
. 9
Linguagem Pascal
. 10
Linguagem Pascal
O Pascal é uma linguagem de programação de alto nível e de fins genéricos, que foi desenvolvida a
partir do Algol-60. As suas instruções são formadas por expressões do tipo algébrico e certas palavras inglesas,
tais como BEGIN, END, read, write, IF, THEN, REPEAT, WHILE, DO. Neste aspecto, o Pascal assemelha-se a
muitas outras linguagens de alto nível. Contudo, o Pascal contém ainda alguns aspectos únicos, que foram
especificamente projetados para estimular o uso da programação estruturada – o método ordenado e
disciplinado de programação que tem como resultado programas claros, eficientes e livres de erros.
Por esta razão, muitos educadores e programadores profissionais preferem utilizar o Pascal em vez de
outras linguagens de fins genéricos.
2.1.1
2.1.1 A história
A linguagem de programação Pascal foi criada para ser uma ferramenta educacional isto no início da
década de 70 pelo Professor Niklaus Wirth do Techinical University em Zurique, Suíça. Foi batizada pelo seu
idealizador de PASCAL, em homenagem à Blaise Pascal, brilhante cientista e matemático francês que entre
outros feitos inventou a primeira calculadora mecânica do mundo.
O pascal ganhou popularidade quando foi adotado pela Universidade da Califórnia, San Diego, em
1973. No msmo período, em seus cursos, também foram feitas implementações para minis e
microcomputadores.
Nas suas primeira implementações, não era muito amigável ao programador, pois eram necessários
vários passos para se obter um programa executável. Primeiro devia se escrever o programa em um editor de
texto, depois compila-lo, “lincá-lo” e montá-lo. Quando era feita uma manutenção no mesmo, todos estes passos
deviam ser refeitos. Isto de certa forma desistimulava os programadores a usar a linguagem Pascal.
Apesar de todas as dificuldades iniciais, de seu propósito educacional e a facilidade de programação, o
Pascal começou a ser utilizado por programadores de outras linguagens, tornando-se para surpresa do próprio
Nicklaus, um produto comercial.
Em 1983, a soft-house americana Borland International, lançou o Turbo Pascal para
microcomputadores, aliado ao lançamento no mercado de microcomputadores.
O Turbo Pacal consegue em um único ambiente, colocar um editor de textos, bastante parecido com o
Wordstar e SideKick, um código fonte ligado a um sistema de detecção de erros, um compilador de 1 passo, o
que o torna bastante veloz, com a desvantagem de que apenas um erro é localizado por vez, e também um
“linkador” que permite a ligação do programa Pascal com objetos, mesmos os gerados por outras linguagens.
Hoje o Pascal é amplamente usado numa grande variedade de aplicações, quer como linguagem de
ensino quer como uma poderosa linguagem de fins genéricos.
. 11
Linguagem Pascal
1. Devemos utilizar um editor de textos para escrever e armazenar em disco o nosso programa fonte.
2. Utilizar um compilador para traduzir o programa fonte para um programa em linguagem de
máquina.
3. Finalmente, devemos juntar ao programa compilado as diversas rotinas necessárias que,
normalmente, ficam armazenadas numa biblioteca.
Após estes passos, suponha que você chegue a conclusão de queo programa tenha que sofrer
modificações, pois bem, você terá que repetir os três passos descritos, e assim sucessivamente até que o
programa fique ao seu gosto.
O compilador Turbo Pascal facilita todo esse processo, pois ele possui numa forma integrada, um editor
de textos compatível com o Wordstar, um compilador e um linkeditor. O processo de compilação pode ser feito
tanto em disco como em memória, o que faz com que ele seja muito rápido. Além disso, o Turbo Pascal atende
aos padrões da linguagem Pascal definidos por Niklaus Wirth, “o pai da linguagem”.
Na realidade, o Turbo Pascal vai muito além, pois ele possui inúmeras procedures e funções a mais do
que as existentes no padrão da linguagem Pascal.
begin
statement; { Instruções }
... 3-Corpo do Programa
end.
Sintaxe:
Program <identificador>;
. 12
Linguagem Pascal
Exemplo:
Observações:
Exemplo:
PROGRAM circulo;
Uses WinCrt;
Var area, raio : Real;
Begin
Read(raio);
Area := 3.14159*Sqr(raio);
Write(raio,area);
End.
Observações:
• Deve ser salientado que os componentes da secão Área de declarações não tem a obrigatoriedade
de existir, todos, em cada programa em Pascal. Só são obrigatórias caso nós estejamos
precisando.
• As declarações de label, constantes, variáveis, procedures e de funções podem ser listadas em
qualquer ordem e repetidos um número de vezes qualquer.
Sintaxe:
...
begin
<intrução1>;
<intrução2>;
. 13
Linguagem Pascal
...
<intruçãoN>;
end.
Um programa exemplo:
Eis um programa em Pascal elementar chamado círculo, que uma vez fornecido o raio de um círculo
calcula a sua área, e escreve em seguida o raio e área calculada.
PROGRAM circulo;
Uses WinCrt;
Var area, raio : Real;
Begin
Read(raio);
Area := 3.14159*Sqr(raio);
Write(raio,area);
End.
Observações:
• As três linhas que estão em evidência entre Begin e End são as instruções do programa. Elas
fazem com que o valor do raio seja introduzido no computador, o valor da área seja calculado e os
valores do raio e da área seja escritos para o exterior.
• Finalmente, note-se a pontuação no fim de cada linha. A maioria das linhas acaba por ponto e
vírgula; algumas não têm pontuação e a última linha acaba com um ponto final. Isto faz parte da
sintaxe do Pascal.
Letras:
Números:
os dígitos de 0 a 9.
Caracteres especiais:
+ - * / = < >
[ ] , ( ) : ;
^ . @ { } $ #
Alguns caracteres especiais são construídos por dois caracteres distintos e consecutivos:
<= >= := ..
(* *) (. .)
. 14
Linguagem Pascal
Observações:
2.5 Identificadores
Um identificador é um nome que é dado a um elemento do programa, tal como uma constante, campos
de registro, tipo, variável, units, procedimento, programa, etc.. Os identificadores são compostos de letras ou
dígitos, em qualquer ordem, desde que o primeiro caracter seja uma letra. É permitido usar maiúsculas ou
minúsculas, que são consideradas da mesma forma.
1. Um identificador pode ter qualquer tamanho, entretanto, apenas os primeiros 63 caracteres são
significativos.
2. O primeiro caracter do identificador deve ser obrigatoriamente uma letra ou um traço de sublinhar (
_ ), também chamado de undescore.
3. Os demais caracteres podem ser letras, dígitos ou undescores e não espaços.
4. Um identificador não pode ser palavra reservada.
5. Como regra, um identificador deve conter caracteres suficientes para indicar claramente o seu
significado. Também como regra, deverá ser evitado o número excessivo de caracteres.
6. Não se pode utilizar os caracteres especiais do Turbo Pascal na formação de identificadores.
O Turbo Pascal possui inúmeros identificadores pré-definidos, que não fazem parte da definição padrão
da linguagem Pascal. Esses identificadores consistem em Procedures e Funções, que podem ser utilizados
normalmente na construção de programas. Exemplos: ClrScr (limpa a tela de vídeo) e DelLine (deleta a linha em
que está o cursor).
. 15
Linguagem Pascal
Exemplo:
Uses WinCrt;
Var area, raio : Real;
begin
Read(raio);
Area := 3.14159*Sqr(raio);
Write(raio,area);
end.
2.6 Comentários
Comentários são textos que introduzimos no meio do programa fonte com a intenção de torná-lo mais
claro. É uma boa prática em programação inserir comentários no meio dos nossos programs. No Turbo Pascal,
tudo que estiver entre os símbolos (* e *) ou { e } será considerado como comentário. Os comentários são
ignorados pelo compilador.
Exemplo:
Uses WinCrt;
Var area, raio : Real;
begin
Read(raio);
Area := 3.14159*Sqr(raio);
Write(raio,area);
end.
Exemplos:
a) taxa := 0.14*bruto;
b) clrscr;
. 16
Linguagem Pascal
a) instruções compostas, que consistem numa seqüência de duas ou mais instruções consecutivas.
Neste caso as instruções simples que formam o bloco de instruções compostas devem estar entre
as palavras reservadas begin e end.
b) Instruções repetitivas, que envolvem a execução de forma repetida de várias instruções simples.
c) Instruções condicionais, em que uma ou mais instruções simples são executadas apenas se uma
expressão lógica especificada for atendida.
Observações:
Exemplo 1:
Abaixo você pode ver um exemplo de instrução composta típica.
begin
X:= 1.5;
Y:= 2.5;
end;
Exemplo 2:
Abaixo você pode ver um exemplo de instrução composta repetitiva.
Esta instrução será executa 100 vezes. Cada vez que a instrução for executada o valor atual da variável
i será visualizado na tela. Assim a instrução fará com que os valores 1, 2, 3, e respectivamente até o valor 100
sejam apresentados no monitor.
Exemplo 3:
Esta instrução faz com que a mensagem ‘Salário Baixo!’ seja mostrada caso a variável salário seja
menor do que 2000.0. Se a variável salário tiver um valor armazenado maior ou igual a 2000.0 então a
mensagem mostrada será ‘Salário Bom!’.
. 17
Linguagem Pascal
Exemplo 4:
Program exemplo;
...
begin
writeln('Digite o valor de A: '); instrução simples
read (A);
writeln('Digite o valor de B: ');
read (B);
if A = B
then begin
X:= 1.5;
Y:= 2.5
end
else begin
X:= -1.5; Bloco de instruções compostas
Y:= -2.5
end;
writeln ('O valor de X é :', X:4:1);
writeln ('O valor de Y é :', Y:4:1);
end.
Capítulo 3 – Tipos de dados e instruções primitivas
• Char (caracteres)
• Boolean (booleanos)
• Integer (inteiros)
• Real (reais)
Os dados de tipo simples são elementos individuais (números, caracteres, etc.) que estão associados
com identificadores simples um a um.
Os dados de tipo estruturado compõe-se de múltiplos elementos relacionados entre si de forma
especificada. Cada grupo de elementos de informação está associado a um único identificador. Os elementos de
informação individuais, dentro de cada grupo, podem também estar associados com os correspondentes
identificadores individuais.
Inicialmente iremos estudar os dados de tipo simples e o tipo String pela sua utilização prática incial. Os
demais tipos estruturados serão vistos mais para a frente.
. 18
Linguagem Pascal
O Turbo Pascal fornece cinco tipos pré-definidos de números inteiros. Veja a tabela abaixo.
. 19
Linguagem Pascal
O Turbo Pascal fornece cinco tipos pré-definidos de números reais. Veja a tabela abaixo.
Observação:
• Uma variável do tipo real pode armazenar um valor inteiro, mas não o contrário.
Observações:
• Se uma cadeia de caracteres incluir uma aspas, esta (a aspas) deve ser escrita duas vezes. Neste
caso só aparecerá uma das aspas quando a cadeia for impressa ou visualizada.
• Uma string de caracteres de tamanho 0 (zero) é chamado de string nula e só é compatível com o
tipo string.
• Uma string de caracteres de tamanho 1 (um) é compatível com o tipo char e também o tipo string.
Dados booleanos:
true (1)
false (0)
. 20
Linguagem Pascal
Você pode observar que toda expressão aritmética, ao ser avaliada produz um valor que se constitui no
resultado da expressão. Esse valor possui um tipo, que pode ser inteiro ou real, conforme a natureza dos
operados e operandos envolvidos.
Observações:
• No pascal não existe sinal para potenciação e radiciação, devendo-se indicá-las com combinações
de produtos ou funções predefinidas.
• div e mod são operadores que só podem ser aplicados com operandos inteiros dando,
respectivamente, o quociente inteiro e o resto inteiro da divisão entre operandos.
• Uma expressão que só tenha operandos inteiros e operadores *, mod, div, + e – terá como
resultado um valor inteiro. Se, pelo menos, um dos operandos for real e se os operadores forem
*,/,+ ou -, o resultado da expressão será real.
• O operador / sempre conduz a um resultado do tipo real, mesmo que os dois operandos sejam
inteiros.
Programa exemplo:
Program Operadores_aritmeticos;
Uses CRT;
Var x,y,z : integer;
r1,r2 : real;
Begin
ClrScr; (* limpa a tela *)
x:=10;
y:=20;
z:=x+y;
writeln(z); (* escreve o valor de z na tela de
video *)
x:= 20 DIV 3;
y:= 20 MOD 3;
writeln(x); (* escreve 6 na tela *)
writeln(y); (* escreve 2 na tela *)
r1:=3.24;
r2:=r1/2.3;
writeln(r2);
end.
. 21
Linguagem Pascal
---------------------------------------------------------
30
6
2
1.4086956522E+00
---------------------------------------------------------
Prioridade Operadores
1a. - (unário)
2a. * / div mod
3a. +-
A ordem de precedência acima indica que primeiro são aplicados os - unários, depois as potenciações,
em seguida são efetuadas todas as operações de multiplicação, divisão, resto de divisão inteiro, e só após estas
são efetuadas as adições e subtrações.
Exemplo:
...
begin
writeln(51 div 16 + 48 – 8 mod 5); {resultado: 3+48-3=48}
writeln( (51 div 16) + (48 – 8) mod 5); {resultado: 3+0=3}
writeln( -3*(43/(52 div 3) )); {resultado: -3*(43/17) = -7.588}
writeln( 6/3*2 ); {resultado: 4 (real)}
...
Observações:
. 22
Linguagem Pascal
Observação:
• Toda expressão relacional retornará um resultado do tipo booleano: verdadeiro (true) ou falso
(false).
Exemplos:
program exemplo;
uses WinCrt;
var x, y:integer;
begin
x:= 3;
y:= 5;
Writeln(2 = 3);
Writeln(0.6 <= 1.5);
Writeln(-4 <> 4);
Writeln(x <= 10);
Writeln(x+y > 10);
Writeln(2*1 >= x div 2);
Writeln( (x div 2) > (y+6) );
end.
---------------------------------------------------------
FALSE
TRUE
TRUE
TRUE
FALSE
TRUE
FALSE
---------------------------------------------------------
3.9 Operadores
Operadores lógicos
No Pascal, assim com em qualquer outra linguagem, existiram ocasiões em que se fará necessário
trabalhar com o relacionamento de duas ou mais condições ao mesmo tempo em uma instrução, efetuando
desta forma testes múltiplos. Para esses casos é necessário então trabalhar com a utilização dos operadores
lógicos, também conhecidos por operadores boleanos. São três os operadores lógicos: and, or e not. Veja a
tabela abaixo.
. 23
Linguagem Pascal
Sejam as variáveis lógicas P, Q, R, S contendo, respectivamente, os valores true, false, false e true.
Exemplo:
a) P and S c) Q and S
b) P and R d) Q and R
será:
a) true c) false
b) false d) false
Exemplo:
será:
a) true c) true
b) true d) false
. 24
Linguagem Pascal
Expressão 1 Resultado
Verdadeiro Falso
Falso Verdadeiro
Exemplo:
a) not P b) not R
será:
a) false b) true
Observações:
• Estes operadores só aceitam como operandos, valores lógicos, ou seja : TRUE e FALSE.
• Com o operador AND a expressão resulta verdadeiro (TRUE) unicamente se ambos os operandos
forem verdadeiros (TRUE).
• Com o operador OR a expressão resulta verdadeiro (TRUE) se qualquer um dos operandos for
verdadeiro, ou se ambos forem verdadeiros.
• O operador NOT é utilizado para negar (isto é, para inverter) o valor de um operando booleano.
Program testa_logica_and;
Uses WinCrt;
var
numero := integer;
begin
write(‘Digite um número inteiro: ‘);
readln (numero);
if (numero >=20) and (numero <=90) then
writeln (‘O número está na faixa de 20 a 90!’)
else
writeln(‘O número está fora da faixa de 20 a 90!’);
end.
. 25
Linguagem Pascal
Prioridade Operadores
1a. not
2a. *, /, div, mod, and
3a. +, -, or
4a. =, <>, <, <=, >=, >, in
Exemplo1:
program Exemplo;
uses WinCrt;
var A, B, C, K: integer;
begin
A:= 2;
B:= 3;
C:= 10;
K:= 1;
writeln ((A=1) and ((B+C<>0) or (K<=2)));
end.
Exemplo2:
...
not ((Total >=2) and (A<>B)) or Teste
...
3.10 Concatenação
O Turbo Pascal permite que você use o operador + para concatenar dois operandos do tipo string. O
resultado da concatenação é compatível com o tipo string.
Observação:
Se o resultado da concatenação for maior do que 255 caracteres, a strig resultante será truncada após
o caracter 255.
Exemplo:
program exemplo;
Uses WinCrt;
begin
. 26
Linguagem Pascal
caracter1:=
'A';
caracter2:=
'é';
string1 :='linguagem Pascal';
string2 :='legal';
string3 :=caracter1+' '+string1+' '+caracter2+'
'+string2+'!';
write (string3);
end.
onde:
• Var – é uma palavra-chave (palavra reservada) que inicia uma parte do programa para a definição
de variáveis;
• lista-de-identificadores – são os identificadores que representam os nomes individuais das
variáveis. Existindo mais de um identificador na declaração, estes terão de ser separados por
vírgula.
• tipo – é o tipo das variáveis, ou seja, define o conjunto ordenado de valores que podem ser
atribuídos a estas variáveis.
Exemplo:
Program Exemplo;
Uses WinCrt;
. 27
Linguagem Pascal
sim_ou_não : boolean;
quantidade : integer;
Begin
idade:= 34;
numero_de_filhos:=2;
sexo := ‘M’;
nome := ‘José’;
sim_ou_nao :=TRUE;
quantidade := 3245;
End.
Variável := expressão;
onde:
Observação:
• O resultado da expressão deve ter o mesmo tipo da variável. Existe uma exceção a esta regra: um
valor inteiro pode ser atribuído a uma variável do tipo real.
Exemplo1:
X := Y + Z;
conta := conta+1;
area := 3.14159*sqr(raio);
Exemplo2:
Suponha que X é uma variável booleana, e I seja uma variável inteira. Então a instrução faz com que à
X seja atribuído o valor verdadeiro (TRUE) ou falso (FALSE), conforme determinado pela expressão
booleana.
Sintaxe:
Inc(identificador, incremento);
Onde:
identificador – é o nome da variável. Um identificador válido do pascal.
incremento – é um número inteiro que define em quanto a variável será incrementada. Caso
este valor seja omitido assume-se que o incremento será de 1 em 1.
. 28
Linguagem Pascal
Exemplo:
• O valor de incremento poderá ser precedido pelo sinal de menos (-). Desta forma a procedure irá
decrementar o valor da variável.
• O incremento é um valor do tipo longint e conseqüêntemente não poderá ultrapassar a faixa deste
tipo.
const
<identificador> = <expressão>;
...
<identificador> = <expressão>;
Onde:
• const – é uma palavra reservada que inicia uma parte do programa para a definição de constantes;
• identificador – é qualquer identificador permitido pela linguagem Pascal;
• expressão – é um número (com ou sem sinal), valor lógico, literal ou identificador de constante já
definido.
Exemplo:
...
const Pi = 3.1416;
cor_preferida = ‘verde’;
numero_maximo = 24345;
...
Observações:
• Toda vez que nos referirmos às constantes dentro do programa, o Turbo Pascal substituirá-las
pelos seus respectivos valores declarados.
• Após declaradas as constantes, estas não podem receber atribuições posteriormente.
. 29
Linguagem Pascal
Sintaxe:
...
const
<identificador> : <tipo> = <valor>;
...
<identificador> : <tipo> = <valor>;
Onde:
• Const – é uma palavra reservada que inicia uma parte do programa para a definição de
constantes;
• identificador – é qualquer identificador permitido pela linguagem Pascal;
• tipo – é o tipo das variáveis, ou seja, define o conjunto ordenado de valores que podem ser
atribuídos a estas variáveis.
• valor – pode ser um número (com ou sem sinal), valor lógico, literal, uma expressão ou
identificador de constante já definido.
Observações:
• Constantes tipadas podem ser usadas exatamente como variáveis do mesmo tipo, podendo
inclusive receber atribuições posteriormente.
Exemplo:
...
const
Minimo: Integer = 0;
Maximo: Integer = 9999;
Contador: Integer = 100;
C : char = ‘A’;
...
. 30
Linguagem Pascal
Onde:
• Type – é uma palavra reservada que inicia uma parte do programa contendo definições de tipo;
• identificador – é qualquer identificador permitido pela linguagem, que passará a identificar o novo
tipo. O identificador segue as regras dadas anteriormente; é o nome do novo tipo.
• elementoN– é um identificador que passará a representar um elemento do conjunto.
Exemplo:
...
Type cor = (azul,vermelho,branco,verde,amarelo);
dia_util = (segunda,terça,quarta,quinta,sexta);
sexo = (masculino,feminino);
...
Observações:
• Note que os elementos do novo tipo devem ser separados por vírgulas.
• Deve ser entendido que estes elementos são os únicos valores que podem estar associados com o
tipo definido.
• Uma vez que os dados do tipo enumerado estão definidos numa sequüência ordenada, os
operadores relacionais podem ser aplicados de modo a formar uma expressão booleana. As
funções preexistentes Succ(X), Pred(X) e Ord(X) também podem ser utilizadas.
• Considerando os conceitos introduzidos até aqui, a definição do tipo boolean seria, então: Type
boolean = (false, true);
Exemplo:
. 31
Linguagem Pascal
Program exemplo;
uses WinCrt;
type
Cores = (VERMELHO,AZUL,VERDE);
begin
Writeln(‘O AZUL tem um número ordinal = ’,Ord(BLUE));
Writeln('C em código ASCII é ',Ord('c'), ' decimal');
end.
Sintaxe:
Onde:
• Type – é uma palavra reservada que inicia uma parte do programa contendo definições de tipo;
• identificador – é qualquer identificador permitido pela linguagem, que passará a identificar o novo
tipo. O identificador segue as regras dadas anteriormente; é o nome do novo tipo.
• primeiro elemento – é o primeiro dos elementos ordenados dentro da gama de valores;
• último elemento – é o último dos elementos ordenados, dentro da gama de valores;
Exemplo:
...
Type dias = (domingo,segunda,terça,quarta,quinta,sexta,sabado);
Dias_da_semana = segunda..sexta;
mês = 1..31;
maiuscula = ‘A’..’Z’;
...
Observações:
• Os dados do tipo inteiro, caracter e booleanos podem ser usados para definir uma gama de
valores.
• Os dados do tipo real não podem ser usados para definir uma gama de valores.
• Note que dois pontos consecutivos devem separar o primeiro e o último elementos da gama de
valores.
. 32
Linguagem Pascal
onde:
Observação:
• A instrução Write e Writeln aceita múltiplos parâmetros. Estes parâmetros devem ser separados
por vírgula.
Exemplo:
Program Exemplo;
Uses CRT;
Var i : integer;
r : real;
c : char;
s : string[20];
Begin
ClrScr;
Writeln('Exemplos de aplicacao de writeln e write');
writeln;
i:=100;
r:=3.14;
c:='Muito';
s:='interessante!';
writeln('Valor de i e igual a ',i);
write('valor de r = ');
writeln(r);
writeln(c,'',s);
end.
---------------------------------------------------------
Exemplos de aplicacao de writeln e write
. 33
Linguagem Pascal
onde:
• p1 é um parâmetro com uma das formas:
e
e:e1
e:e1:e2 ,
sendo e, e1, e2 expressões.
• e – representa o valor a ser escrito e pode ser do tipo integer, real, char, string e boolean, podendo
inclusive ser uma constante ou uma expressão.
• e1 – representa um valor inteiro positivo e indica o número mínimo de caracteres a ser escrito. Se
e1 for insuficiente para representar o valor a ser escrito, então será alocado mais espaço. Se e1 for
excessivo, o espaço excedente será preenchido com brancos.
• e2 – só se aplica se e for do tipo real; neste caso, e2 é um valor inteiro positivo e especifica o
número de dígitos que devem ser escritos após o ponto decimal. Caso e2 não seja fornecido o
valor real será escrito no formato exponencial.
Exemplo:
program Exemplo;
uses WinCrt;
var A, B: real;
K, L: char;
begin
A:= 3.2;
B:= 5.81;
K:= 'x';
L:= 'y';
writeln (A:4:2);
writeln (K:2);
writeln (B:5:2);
writeln (A+B:6:3);
writeln (A:4:2, K:2, ' +', B:5:2, L:2,' =', A+B:6:3);
end.
---------------------------------------------------------
3.20
x
5.81
9.010
3.20 x + 5.81 y = 9.010
---------------------------------------------------------
. 34
Linguagem Pascal
read(variáveis de entrada);
onde:
Observação:
• As variáveis de entrada devem estar separadas por vírgulas. Note que as variáveis do tipo
booleano não podem ser incluídas na lista de variáveis de entrada.
• A diferença entre as instruções read e readln é que a instrução readln obriga a próxima instrução
read ou readln a começar a ler em uma nova linha de dados. Já a instrução read permite que a
próxima instrução read ou readln comece na mesma linha.
• Os dados numéricos devem ser separados uns dos outros por espaços ou por indicações de fim de
linha (ENTER).
• Qualquer número pode ser precedido por um sinal de mais ou menos, desde que não haja um
espaço entre o sinal e o número.
• O dado do tipo caracter não deve ser colocado entre aspas.
Exemplo:
Program teste;
Uses WinCrt;
Var i : integer;
r : real;
c : char;
s : string[10];
Begin
ClrScr;
Write('Digite um numero inteiro ------> ');
Readln(i);
Write('Digite um numero real ---------> ');
Readln(r);
Write('Digite um caractere -----------> ');
Readln(c);
Write('Digite uma string -------------> ');
Readln(s);
Writeln;Writeln; (* pula duas linhas *)
Writeln(i);
Writeln(r);
Writeln(c);
Writeln(s);
End.
. 35
Linguagem Pascal
---------------------------------------------------------
Digite um numero inteiro ------> 10
Digite um numero real ---------> 10.5
Digite um caractere -----------> a
Digite uma string -------------> abc
10
1.0500000000E+01
a
abc
---------------------------------------------------------
Exemplo:
...
begin
Writeln(2*Sin(3.14));
End.
...
A chamada da função precede as demais operações; se uma função é um operando de uma
expressão, ela deve ser calculada antes que as demais operações possam ser efetuadas. Observe a seqüência
de execução da instrução acima:
. 36
Linguagem Pascal
Observações:
• Como parâmetros de funções você pode usar expressões e até outras funções.
Observação:
• As funções Ord(X), Succ(X), Pred(X) aplicam-se não apenas às variáveis ou constantes do tipo
char, mas de qualquer tipo predefinido, exceto o tipo real.
Exemplo:
. 37
Linguagem Pascal
Capítulo 7 - As sub-
sub-rotinas do Pascal
• Strings
• System
• WinCrt
• WinDOS
• WinProcs
• WinTypes
Antes de utilizarmos algumas das rotinas predefinidas do Pascal devemos antes declarar as Units na
Área de Declarações do programa Pascal. A declaração uses indica ao compilador onde buscar as definições
(código objeto) de certas instruções.
Onde:
. 38
Linguagem Pascal
Sintaxe:
UpCase(expressão caracter);
Onde:
Um programa exemplo:
...
Writeln(‘Digite um caracter qualquer............> ‘);
Readln(c);
Writeln(‘O caracter ‘,’’’’,c,’’’’,’ em caixa alta fica assim:
‘,UpCase(c));
...
Considerando que o caracter digitado pelo usuário é o caracter ‘a’ o programa resulta na seguinte tela:
---------------------------------------------------------------
O caracter ‘a’ em caixa alta fica assim: A
---------------------------------------------------------------
Sintaxe:
Lenght(expressão caracter);
Onde:
expressão caracter – é uma string de caracteres, uma variável ou uma expressão do tipo string de
caracteres (String).
Um programa exemplo:
. 39
Linguagem Pascal
Program exemplo;
Uses WinCrt;
Var x:string;
y:integer;
begin
Write('Digite uma string qualquer...: '); readln(x);
y := Length(x);
Write('Esta string tem ',y,' carateres.');
end.
Considerando que a string digitada pelo usuário foi ‘Pascal’ o programa resulta na seguinte tela:
---------------------------------------------------------------
Digite uma string qualquer...:Pascal
Esta string tem 6 carateres.
---------------------------------------------------------------
Exemplo:
Program exemplo;
Uses WinCrt;
begin
ClrScr;
Writeln(‘O primeiro programa a gente nunca esquece!’);
Readkey;
ClrScr;
Writeln(‘O segundo a gente também nunca esquece!’);
Readkey;
end.
Observação:
• O comando ClrScr limpará a tela e posicionará o cursor no canto superior esquerdo da tela.
. 40
Linguagem Pascal
Exemplo:
Program exemplo;
uses WinCrt;
var
C: Char;
begin
repeat
Writeln(‘Por favor pressione uma tecla qualquer!');
until KeyPressed;
Writeln(‘Uma tecla qualquer foi pressionada!');
end.
Obs.: O programa escreverá na tela a frase “Por favor pressione uma tecla qualquer!” um número
indefinido de vezes, até que uma tecla qualquer seja pressionada. Neste momento o programa encerra a
estrutura de repetição Repeat-Until e executa a instrução “ Writeln(‘Uma tecla qualquer foi pressionada!');” e
finaliza.
---------------------------------------------------------
Por favor pressione uma tecla qualquer!
Por favor pressione uma tecla qualquer!
Por favor pressione uma tecla qualquer!
...
Por favor pressione uma tecla qualquer!
Você pressionou uma tecla qualquer!
---------------------------------------------------------
Exemplo:
Program exemplo;
uses WinCrt;
var
C: Char;
begin
Writeln(‘Por favor pressione uma tecla qualquer !');
C := Readkey;
. 41
Linguagem Pascal
Obs.: Vamos supor que você tenha pressionado a tecla A (caixa alta).
---------------------------------------------------------
Por favor pressione uma tecla qualquer !
Você pressionou a tecla A. Seu valor em ASCII é 65.
---------------------------------------------------------
Sintaxe:
GotoXY(parâmetroX,parâmetroY);
Para utilizá-lo é necessário informar dois parâmetros: o primeiro representa o valor da coluna que
deverá ser um valor numérico do tipo inteiro positivo entre 1 e 80 e o segundo parâmetro representa o número
da linha que deverá ser um valor numérico também do tipo inteiro positivo entre 1 e 25.
Exemplo:
Program exemplo;
uses WinCrt;
var
C: char;
begin
GotoXY(10,10);
Writeln('Olá!');
end.
O comando GotoXY posicionará o cursor na linha 10, coluna 10 da tela do computador. A mensagem
´Olá!´ será mostrada então a partir desta coordenada.
---------------------------------------------------------
Olá!
---------------------------------------------------------
. 42
Linguagem Pascal
8.1.1 A estrutura de
de decisão simples (IF-
(IF-THEN)
Sintaxe:
Onde:
Exemplo:
Program exemplo;
Uses WinCrt;
var A, B, C: real;
begin
read (A, B, C);
if A+B < C then write (‘A soma de A com B é menor que C!’)
end.
ou
...
begin
read (A, B, C);
if A+B < C then
write (‘A soma de A com B é menor que C!’)
end.
...
Neste exemplo, após as variáveis A, B e C serem declaradas reais, os valores de A, B e C serão lidos;
em seguida, o comando If-Then irá avaliar a expressão booleana (A+B<C) e se a resposta for verdadeira (true),
será escrito a mensagem ‘A soma de A com B é menor do que C, e a execução então terminará; caso contrário,
se a expressão retornar falso (false), cessa a execução do programa sem nenhuma mensagem exibida.
Observações:
• Caso a instrução, a ser executada após a avaliação da expressão booleana, seja uma instrução
composta, ou seja, com mais de um comando, deve-se delimitar o bloco de comandos por begin e
end.
. 43
Linguagem Pascal
Onde:
Exemplo1:
Program exemplo1;
Uses WinCrt;
var A, B, C: real;
begin
read (A, B, C);
if A+B < C
then write (‘A soma de A com B é menor que C!’)
else write (‘A soma de A com B é maior que C!’);
end.
Exemplo2:
Program exemplo2;
Uses WinCrt;
var A, B, X, Y: real;
begin
writeln('Digite o valor de A: ');
read (A);
writeln('Digite o valor de B: ');
read (B);
if A = B
then begin
X:= 1.5;
. 44
Linguagem Pascal
Y:= 2.5
end
else begin
X:= -1.5;
Y:= -2.5
end;
writeln ('O valor de X é :', X:4:1);
writeln ('O valor de Y é :', Y:4:1);
end.
Observações:
• Caso a instrução, a ser executada após a avaliação da expressão booleana, seja uma instrução
composta, ou seja, com mais de um comando, deve-se delimitar o bloco de comandos por begin e
end.
• O sinal de ponto e vírgula não deve aparecer numa estrutura If-Then-Else, exceto como separador
dentro de um bloco de instrução composta (entre o begin e o end). Colocar um ponto e vírgula
antes da palavra reservada Else resultará num erro de compilação.
program exemplo;
...
begin
opcao := ´0´;
while (opção <> ‘5’) do
begin
clrscr;
gotoxy(33,1); write (´Menu Principal´);
gotoxy(28,6); write (´[ 1 ] - Soma´);
gotoxy(28,8); write (´[ 2 ] - Subtração´);
gotoxy(28,10); write (´[ 3 ] - Multiplicação´);
gotoxy(28,12); write (´[ 4 ] - Divisão´);
gotoxy(28,14); write (´[ 5 ] – Fim de Programa´);
gotoxy(28,18); write (´Escolha uma opção.....:´);
readln(opção);
if (opção = ´1´) then
rot_adicao;
if (opção = ´2´) then
rot_subtracao;
if (opção = ´3´) then
rot_multiplicacao;
if (opção = ´4´) then
rot_divisao;
end;
end.
Perceba que neste exemplo o selecionamento das sub-rotinas é feito com instruções if-then. Você pode
observar também que se você tivesse um menu com quinze opções, deverão ser definidas quinze instruções do
. 45
Linguagem Pascal
tipo if-then para verificar a escolha do operador. Esta forma pode ser simplificada com a utilização da estrutura
case-of.
Syntaxe:
Case <variável> Of
<opção1>: <instrução1>;
<opção2>: <instrução1>;
...
<opçãoN>: <instruçãoN>;
Else
<instrução>;
End;
ou
Case <variável> Of
<opção1>: begin
<instrução1.1>;
<instrução1.2>;
<instrução1.N>;
end;
<opção2>: begin
<instrução2.1>;
<instrução2.2>;
<instrução2.N>;
end;
<opçãoN>: begin
<instruçãoN.1>;
<instruçãoN.2>;
<instruçãoN.N>;
end;
Else
<instrução-else>;
End;
Onde:
Observações:
• A opção consite de uma ou mais constantes ou gama de valores, separadas por vírgulas.
• As constantes ou gama de valores da opção tem que ser do mesmo tipo da variável de controle da
estrutura Case-of-end.
• Instruções (bloco de comando) vazias são permitidas, para indicar que nenhuma ação deve ser
tomada para certos valores.
• As instruções não necessitam ser únicas, isto é, a mesma instrução pode ser usada com duas ou
mais listas de opção do case.
• A instrução pode ser uma instrução simples do pascal ou uma chamada a uma rotina, por exemplo.
. 46
Linguagem Pascal
• A instrução else só será executada se nenhuma das opções anteriormente testadas, na estrutura
case, for atendida.
program principal;
...
begin
while (opcao <> '5') do
begin
clrscr;
gotoxy(33,1); write ('Menu Principal');
gotoxy(28,6); write ('[ 1 ] - Soma');
gotoxy(28,8); write ('[ 2 ] - Subtração');
gotoxy(28,10); write ('[ 3 ] - Multiplicação');
gotoxy(28,12); write ('[ 4 ] - Divisão');
gotoxy(28,14); write ('[ 5 ] - Fim de Programa');
gotoxy(28,18); write ('Escolha uma opção.....:');
readln(opcao);
case opcao of
'1': rot_adicao;
'2': rot_subtracao;
'3': rot_multiplicacao;
'4': rot_divisao;
else
writeln('É o fim do programa!');
end;
end;
end.
. 47
Linguagem Pascal
Sintaxe:
Onde:
Observações:
• O bloco de comando pode ser do tipo simples ou composto, apesar de normalmente ser composto.
• Quando o bloco de comando for constituído por um único comando, o begin e o end podem ser
omitidos.
• Quando o bloco de comando for constituído por mais de um comando é obrigatório o begin e o end.
• A expressão booleana do comando While-do é avaliada antes do bloco de comando ser executado.
Se esta expressão retornar um valor falso (false) na primeira vez em que a expressão for avaliada,
os comandos do bloco de comando não serão executados nenhuma vez.
Exemplo:
Vamos supor, por exemplo, que queremos escrever os números inteiros 1,2,...,20, com um inteiro em
cada linha. Isso pode ser conseguido com a seguinte estrutura While-Do:
Program exemplo;
Uses WinCrt;
var digito: integer;
begin
digito:= 1;
while digito <= 20 do
begin
writeln('O ',digito,'º digito é :',digito);
digito := digito+1;
end;
end.
. 48
Linguagem Pascal
Sintaxe:
Repeat
<instrução1>;
<instrução2>;
...
<instruçãoN>
Until <expressão>;
Onde:
Observações:
• Note que nesta estrutura o bloco de comando será sempre executado pelo menos uma vez, dado
que a expressão booleana não é testada no ínício e sim no fim da estrutura de repetição.
• A seqüência de instruções dentro da estrutura Repeat-Until não necessita ser incluída dentro de
um bloco Begin e End.
• A expressão booleana do comando Repeat-Until é avaliada após a instrução ou instruções serem
executadas.
Exemplo:
Vamos supor, por exemplo, que queremos escrever os números inteiros 1,2,...,20, com um inteiro em
cada linha. Isso pode ser conseguido com a seguinte estrutura Repeat-Until:
Program exemplo;
Uses WinCrt;
var digito: integer;
begin
digito:= 1;
Repeat
writeln('O ',digito,'º digito é :',digito);
digito := digito+1;
Until digito > 20;
end.
. 49
Linguagem Pascal
Onde:
Observações:
• Esta estrutura é muito utilizada quando conhecemos de antemão o número de ciclos a executar.
• Se a variável de controle é uma variável do tipo inteira, então aumentará automaticamente uma
unidade, cada vez que o bloco de comando da estrutura For-to-do for executado; portanto, a
instrução (bloco de comando) será executada (valor final – valor inicial +1) vezes.
• A variável de controle, o valor inicial e o valor final devem pertencer ao mesmo tipo predefinido
(excluindo o real).
• A variável de controle não pode ser alterada, por qualquer instrução, que esteja dentro do bloco de
comando.
• A variável de controle deve ter sido previamente declarada.
• O valor inicial e o valor final, caso sejam dados como expressão, são calculados uma única vez
antes da primeira execução da estrutura For-to-do.
• Os valores de valor inicial e valor final podem ser expressos como constantes, variáveis ou
expressões. Contudo, estes valores devem ser do mesmo tipo que a variável de controle.
• O valor de valor incial deve ser menor do que valor final se pretendemos que a instrução dentro da
estrutura For-to-do seja executada mais de uma vez. Se valor incial for igual a valor final , a
instrução será executada somente uma vez; se valor incial for maior que valor final, a instrução não
chegará a ser executada.
Exemplo:
Program exemplo;
Uses WinCrt;
var i: integer;
begin
for i:= 1 to 20 do
writeln('O ',i,'º digito é :',i);
end.
. 50
Linguagem Pascal
A segunda forma da estrutura for é semelhante à primeira, exceto no uso da palavra reservada
Downto em vez de To. A ação produzida por esta forma da estrutura For é semelhante à primeira
forma, exceto pelo fato de que a variável de controle é decrementada. Esta variável é decrementada
automaticamente de uma em uma unidade, desde o valor incial até o valor final, durante as sucessivas
passagens pelo ciclo.
Observações:
• O valor inicial deve ser maior que o valor final se pretendemos que a instrução dentro da estrutura
For-downto-do seja executada mais de uma vez. Se os dois valores forem iguais, então a instrução
será executada uma única vez; e se o valor inicial for menor que o valor final, então a instrução não
será sequer executada.
Exemplo:
Program exemplo;
Uses WinCrt;
var i: integer;
begin
for i:= 20 downto 1 do
writeln('O ',i,'º digito é :',i);
end.
Program CALCULO;
{
Este programa demonstra como quebrar a estrutura
for-to-do utilizando a instrução goto.
}
Uses WinCrt;
label sai_do_loop;
var A, B, R, i: integer;
. 51
Linguagem Pascal
resp: char;
begin
For i:= 1 to 5 do
begin
ClrScr;
Write('Entre com o valor para A: '); readln(A);
Write('Entre com o valor para B: '); readln(B);
Writeln;
R := A+B;
Writeln('O resultado da soma de A com B é: ',R);
Writeln;
Write('Deseja continuar? ');
Readln(resp);
if (resp <> 's') and (resp <> 'S') then
Goto sai_do_loop;
end;
sai_do_loop: Writeln('Saí do loop for-to-do!');
end.
. 52
Linguagem Pascal
Exemplo 1:
Supondo-se que as notas de 10 alunos estejam armazenadas em uma variável composta, identificada
por Nota, e queiramos fazer referência ao terceiro elemento desta variável devemos proceder assim:
Nota[3]
Nota
55 60 65 55 100 70 85 90 55 100
1 2 3 4 5 6 7 8 9 10
Se utilizarmos uma variável I como índice de Nota, tem-se a possibilidade de acesso a qualquer uma
das notas armazenadas, através da notação Nota[I].
Exemplo 2:
Vamos considerar um trecho de programa que faça a leitura de 10 notas dos alunos de uma disciplina,
digitadas uma em cada linha, armazene-as na variável composta Nota (vetor Nota) e calcule a sua média.
Program exemplo3;
.
.
begin
for I := 1 to 10 do
begin
readln(Nota[I]);
soma := soma+Nota[I];
end;
media := soma/10;
.
.
end.
. 53
Linguagem Pascal
Exemplo 3:
Considerando o trecho de programa abaixo, podemos também comparar o conteúdo da sétima posição
da variável Nota com o valor 60.
Program exemplo3;
.
.
begin
if Nota[7] > 60 then
.
.
else
.
.
end.
Program exemplo3;
.
.
begin
indice := 7;
if Nota[indice] > 60 then
.
.
else
.
.
end.
Exemplo 4:
Program exemplo4;
.
.
begin
quant := 0;
for I := 1 to 10 do
if Nota[I] > Media then
Inc(quant);
Writeln(‘Número de alunos c/ nota superior a média :,quant);
.
.
end.
. 54
Linguagem Pascal
Onde:
Observações:
• As regras para a formação dos identificadores das variáveis compostas são as mesmas que a dos
identificadores das variáveis simples.
• O tipo de dado dos elementos da variável pode ser qualquer tipo de dado válido no pascal.
• O índice da variável, li e ls, deve ser do tipo ordinal: inteiro, caracter, booleano, enumerado ou uma
gama de valores.
• Quando acessamos os elementos individuais das variáveis compostas o valor do índice pode ser
expresso como uma constante, uma variável ou uma expressão. Contudo o valor do índice deve
ser do tipo correto e deve estar dentro do intervalo correto.
• Os elementos individuais da variável do tipo vetor podem ser usados em expressões, instruções de
atribuição, instruções read e write, etc., como se fossem variáveis de tipo simples.
Exemplo 1:
Vamos observar o programa a seguir. Este programa efetua a leitura de dez elementos de
uma matriz A tipo vetor e em seguida constroi uma matriz B de mesmo tipo, acompanhando a seguinte
lei de formação: se o valor do índice for par, o valor deverá ser multiplicado por 5; sendo ímpar, deverá
ser somado com 5. Ao final, mostrar os conteúdos das duas matrizes. Este exemplo demonstra como
fazer o tratamento da condição do índice.
program check_indice;
Uses WinCrt;
var
A, B : array[1..10] of integer;
I : integer;
begin
writeln('Cálculo com checagem do indice da matriz');
writeln;
. 55
Linguagem Pascal
B[I] := A[I]*5
else
B[I] := A[I]+5;
end;
writeln;
---------------------------------------------------------
Cálculo com checagem do indice da matriz
Informe o 1 o. valor: 10
Informe o 2 o. valor: 10
Informe o 3 o. valor: 10
...
Informe o 10 o. valor: 10
A[ 1] = 10 B[ 1] = 15
A[ 2] = 10 B[ 2] = 50
A[ 3] = 10 B[ 3] = 15
...
A[ 1] = 10 B[10] = 50
No programa acima, são utilizados três loopings do tipo for: o primeiro looping controla a entrada dos
dados na matriz A, o segundo looping verifica se cada elemento da matriz A é par ou ímpar e faz as operações
de soma ou multiplicação atribuindo o resultado na matriz B, e o terceiro looping é utilizado para apresentar as
duas matrizes.
. 56
Linguagem Pascal
Matiz A
Índice Elemento
1 9
2 7
3 5
4 3
5 1
a) o elemento que estiver em A[1] deverá ser comparado com os elementos que estiverem em A[2],
A[3], A[4] e A[5].
b) depois o elemento que estiver em A[2] não necessita ser comparado com o elemento que estiver
em A[1], pois já foram anteriormente comparados, passando a ser comparado somente com os
elementos que estiverem em A[3], A[4] e A[5].
c) na seqüência, o elemento que estiver em A[3] é comparado com os elementos que estiverem em
A[4] e A[5] e por fim,
d) o elemento que estiver em A[4] é comparado apenas com o elemento que estiver em A[5].
a) basta comparar o valor do elemento armazenado em A[1] com o valor do elemento armazenado
em A[2]. Se o primeiro for maior que o segundo, então trocam-se os seus valores. Podemos
observar na tabela acima que a condição é verdadeira e assim o elemento 9 de A[1] é maior que o
elemento 8 de A[2], passa-se para A[1] o elemento 8 e para A[2] passa-se o elemento 9.
b) desta forma passa-se a fazer as trocas sucessivas até que se alcance o último elemento da matriz,
ou seja, a comparação entre o valor armazenado em A[4] com o valor de A[5] .
Observação:
Este procedimento de troca será o mesmo para dados do tipo caracter (char ou string), uma vez que
cada letra possui um valor diferente da outra. A letra “A”, por exemplo, tem valor menor que a letra “B”, e assim
por diante. Se a letra “A” maiúscula for comparada com a letra “a” minúscula, estas terão valores diferentes.
O processo de ordenação para caracteres no Pascal é baseado no uso da tabela ASCII (American
Standard Code for Information Interchange – Código Americano para Troca de Informações).
. 57
Linguagem Pascal
Program Ordena_Matriz;
Uses WinCrt;
var
nomes : array[1..10] of string;
i, j : integer;
nome, temp : string;
resp : char;
begin
resp := 'S';
while (Upcase(resp) = 'S') do
begin
ClrScr;
writeln('Classifica Nomes em Ordem Crescente');
writeln('===================================');
for i:= 1 to 4 do
for j := i+1 to 5 do
{*** a troca dos elementos começa aqui ***}
if (nomes[i] > nomes[j]) then
begin
temp := nomes[i];
nomes[i] := nomes[j];
nomes[j] := temp;
end;
{*** Mostra os Valores Classificados ***}
writeln;
writeln('Os Nomes Ordenados Alfabéticamente');writeln;
writeln(' i Nome ');
writeln('=============================');
for i:= 1 to 5 do
writeln(i:2,' ',nomes[i]);
writeln;
write('Deseja Digitar Outros Valores?(S/N)'); readln(resp);
end;
donewincrt;
end.
. 58
Linguagem Pascal
Observações:
É importante observar que no caso do encadeamento das estrutura for-to-do, será executado primeiro a
rotina mais interna, no caso a rotina de contagem da variável J, passando o processamento para a rotina mais
externa, quando a rotina mais interna fechar o seu ciclo.
O segundo ponto a se observar é a utilização de uma segunda variável no processo de ordenação, no
caso , a variável J. Observe que somente quando a variável J atinge o valor 5 é que este looping se encerra,
retornando ao looping da variável I, acrescentando mais um em I até que I atinja o seu limite e ambos os
loopings sejam encerrados. Veja abaixo o quadro que mostra o comportamento dos valores das variáveis I e J
durante o processo de ordenação:
Comportamento de I e J
Quando I for J será
1 2, 3, 4, 5
2 3, 4, 5
3 4, 5
4 5
Considere o vetor NOMES[I] com o valor “CARLOS” e o vetor NOMES[J] com o valor “ALBERTO”. Ao
final, NOMES[I] deverá estar com a informação “ALBERTO” e NOMES[J] deverá estar com “CARLOS”. Para se
conseguir esta troca é necessário a utilização de uma variável de apoio, a qual será chamada TEMP.
Para que o vetor NOMES[I] fique livre para receber o valor do vetor NOMES[J], TEMP deverá receber o
valor do vetor NOMES[I], assim sendo TEMP passa a ter o valor “CARLOS”. Neste momento, pode-se atribuir ao
vetor NOMES[I] o valor do vetor NOMES[J]. Assim o vetor NOMES[I] passa a possuir o valor “ALBERTO”. Em
seguida atribui-se ao vetor NOMES[J] o valor da variável TEMP. Ao final deste processo, teremos os valores
trocados, sendo o vetor NOMES[I] com o valor “ALBERTO” e NOMES[J] com o valor “CARLOS”.
. 59
Linguagem Pascal
Veja abaixo um programa que efetua uma pesquisa seqüencial numa matriz de dez elementos do tipo
string:
Program Pesquisa_Sequencial;
Uses WinCrt;
var
nomes : array[1..10] of string;
i : integer;
nome : string;
resp : char;
achou : boolean;
begin
writeln('Pesquisa Seqüencial de Nomes');
writeln('============================');
. 60
Linguagem Pascal
else
writeln(nome,' não foi localizado!');
writeln;
write('Deseja Continuar a Pesquisa? (S/N) '); readln(resp);
end;
donewincrt;
end.
Primeiro é solicitado ao usuário a digitação do nome a ser pesquisado. Este nome é atribuído então à
variável NOME.
À variável “I” (variável contadora do índice) é então atribuído o valor 1 (índice 1) e à variável “ACHOU” é
atribuído o valor falso (false). Isto é necessário para que a expressão da instrução “while (i <= 10) and
(achou=false) do” seja validada no seu primeiro teste da condição. As instruções que se encontram dentro da
estrutura while-do serão executadas enquanto o valor da variável I for menor ou igual a 10 e simultaneamente o
valor da variável ACHOU for igual a falso (false).
A estrutura if-then-else, localizada dentro da estrutura While-do citada acima, verifica se o valor
digitado pelo usuário e atribuído à variável NOME é igual ao valor do elemento da variável indexada NOMES[I] (i
variando de 1 até 10). Se o valor da variável NOME for diferente do valor do elemento da variável indexada
NOMES[I] a variável I será incrementada em 1. Será executada a próxima verificação de NOME com NOMES[I],
e assim por diante. Caso seja igual, a variável ACHOU passa a ter o valor verdadeiro (true), indicando que o
nome procurado foi encontrado. Assim o fluxo de execução do programa é desviado para fora da estrutura while-
do e o programa informará ao usuário, através de uma mensagem, que o valor procurado foi encontrado.
Caso o processamento das instruções da estrutura while-do (while (i <= 10) and (achou=false) do)
chege ao seu final sem encontrar uma equivalência entre a variável NOME e a variável NOMES[I], a variável
ACHOU permanece com o valor falso. Assim o programa irá informar ao usuário, através de uma mensagem,
que o valor procurado não foi encontrado.
Observe que a variável ACHOU exerce um papel importante dentro da rotina de pesquisa, pois esta
serve como um pivô, estabelecendo um valor verdadeiro quando uma determinada informação é localizada. Este
tipo de tratamento de variável é conhecido como FLAG (Bandeira). A variável ACHOU é o flag, podendo-se dizer
que ao começar a rotina a bandeira estava “abaixada” – falsa, e quando a informação foi encontrada, a bandeira
foi “levantada” – verdadeira, indicando a localição da informação desejada.
. 61
Linguagem Pascal
Colunas
1 2 3 4 5 6
Linhas 1
2 Posição 2,3
3
4
5
A matriz TABELA com duas dimensões. 5 linhas e 6 colunas (TABELA[1..5,1..6]).
Em matrizes bidimensionais, assim como em matrizes de uma só dimensão, os seus elementos serão
também manipulados (acessados) de forma individualizada, sendo a referência a esses elementos feita sempre
através de dois índices: convenciona-se que o primeiro índice indica a linha da matriz e o segundo índice indica
a coluna. Assim, TABELA[2,3] indica que está sendo feita uma referência ao elemento armazenado na linha 2
coluna 3 da matriz.
Quando manipulamos uma matriz do tipo vetor utilizamos uma única estrutura de repetição (um for-to-
do por exemplo) para acessarmos os seus elementos individuais. No caso de matrizes com mais de uma
dimensão, deverá ser utilizado tantas estruturas de repetição quantas forem as suas dimensões. Para uma
matriz de duas dimensões, por exemplo, deveremos utilizar duas estruturas de repetição encadeadas para que
possamos acessar todos os seus elementos.
Uma matriz de duas dimensões é representada por seu nome, tamanho (dimensão de linhas e colunas)
entre colchetes e o seu tipo, tendo assim, a seguinte sintaxe:
Onde:
. 62
Linguagem Pascal
Observações:
• As regras para a formação dos identificadores das variáveis compostas são as mesmas que a dos
identificadores das variáveis simples.
• O tipo de dado dos elementos da variável pode ser qualquer tipo de dado válido no pascal.
• O índice da variável, li1, ls1, li2 e ls2 deve ser do tipo ordinal (inteiro, caracter, booleano ou
enumerado) ou uma gama de valores.
• Quando acessamos os elementos individuais das variáveis compostas o valor do índice pode ser
expresso como uma constante, uma variável ou uma expressão. Contudo o valor do índice deve
ser do tipo correto e deve estar dentro do intervalo correto.
• Os elementos individuais da variável do tipo vetor podem ser usados em expressões, instruções de
atribuição, instruções read e write, etc., como se fossem variáveis de tipo simples.
Exemplo 1:
Esta declaração cria uma estrutura de dados agrupados com o nome de MatrizA, com
4 x 3 = 12 elementos reais, endereçáveis por um par de índices, com o primeiro deles indicando a linha
e o outro indicando a coluna.
Exemplo 2:
Esta declaração cria uma estrutura de dados agrupados com o nome de MatrizB, com
5 x 5 = 25 elementos string, endereçáveis por um par de índices, com o primeiro deles indicando a linha
e o outro indicando a coluna.
Exemplo 3:
. 63
Linguagem Pascal
Program Nota_aluno;
Uses WinCrt;
var Notas : array[1..8,1..4] of real;
i,j : integer;
resp: char;
begin
resp := 'S';
while (UpCase(resp)='S') do
begin
Analisando o trecho do programa acima, onde é feita a leitura das notas dos alunos, podemos observar
que foi utilizada a variável I para controlar as posições dos elementos, a nível de linha (alunos), dentro da matriz.
Podemos observar também que foi utilizada a variável J para controlar as posições dos elementos, a nível de
coluna (notas dos alunos).
Observando o programa podemos verificar também que as variáveis I e J são inicializadas com 1, ou
seja, a leitura ou a apresentação, será iniciada na primeira linha da primeira coluna da matriz. Assim sendo, será
então digitada para o primeiro aluno a sua primeira nota, ou seja, aluno 1, nota 1. Logo em seguida será
. 64
Linguagem Pascal
incrementado mais 1 à variável J, variável que controla as posições da coluna (notas), passando então para a
posição Notas[1,2], ou seja, aluno 1, nota 2.
Quando o contador de coluna, a variável J, atingir o valor 4, a estrutura for-to-do será então encerrada.
Em seguida o contador de linha, a variável I, será incrementado em 1, tornando-se 2. Será então inicializado
novamente o contador J em 1, permitindo assim, que seja, digitado a nota 1 do aluno 2 (Notas[2,1]).
A entrada dos dados estende-se-á até que o valor do contador de linhas (variável I) atinja o seu último
valor, no caso, 8. Esta estrutura “for I:= 1 to 8 do” tem a função de controlar o posicionamento na tabela por
aluno. A outra estrutura mais interna “for J:= 1 to 4 do”, controla o posicionamento das notas.
---------------------------------------------------------
Leitura das Notas dos Alunos
============================
Entre com as notas do 1º aluno
---------------------------------------------------------
Apresentação das Notas dos Alunos
=================================
As notas do 1º aluno
1a. Nota :
2a. Nota :
3a. Nota :
4a. Nota :
Dados Pessoais
Nome Endereço CEP Bairro Telefone
1 João
2 Andrea
3 ...
Pessoas 4 ...
... ...
10 ...
. 65
Linguagem Pascal
{troca do endereço}
temp := AGENDA[atual,2]
AGENDA[atual,2] := AGENDA[proximo,2];
AGENDA[proximo,2]:= temp;
{troca do cep}
temp := AGENDA[atual,3]
AGENDA[atual,3] := AGENDA[proximo,3];
AGENDA[proximo,3]:= temp;
{troca do bairro}
temp := AGENDA[atual,4]
AGENDA[atual,4] := AGENDA[proximo,4];
AGENDA[proximo,4]:= temp;
{troca do telefone}
temp := AGENDA[atual,5]
AGENDA[atual,5] := AGENDA[proximo,5];
AGENDA[proximo,5]:= temp;
end;
...
{*** Rotina de saída ***}
. 66
Linguagem Pascal
12.1 Registros
O Registro é a principal estrutura de dados, cujos os elementos constituintes não necessitam ser do
mesmo tipo. Podemos, desta forma, nos referir coletivamente a um conjunto de elementos que diferem entre si
no seu tipo. Aos elementos individuais dessa estrutura damos o nome de campos do registro.
Pelo fato de podermos trabalhar com os vários dados de tipos diferentes (os campos) em uma mesma
estrutura, este tipo de dado é considerado heterogêneo.
A forma mais fácil de se definir um registro é incluir a definição como parte de uma declaração de
variável. Isto nos permite declarar uma variável individual do tipo registro, tal como declaramos variáveis de tipo
simples ou variáveis do tipo array. Veja abaixo a sintaxe.
Observações:
Exemplo:
Suponha que um registro de funcionário de uma empresa consista na sua matrícula do tipo inteiro, no
seu nome do tipo literal, na sua conta bancária do tipo real e no seu cargo do tipo literal. Representamos este
registro como uma variável do tipo registro chamada reg_funcionario. A declaração da variável é mostrada
abaixo.
. 67
Linguagem Pascal
Outra maneira de definir um registro, que é freqüentemente mais utilizada do que a simples declaração
de variável é a definição de um tipo registro. Assim, as variáveis individuais poderão ser declaradas como sendo
deste tipo previamente declarado. Neste caso um tipo registro é declarado em Pascal com a instrução type em
conjunto com a instrução record. Veja abaixo a sintaxe.
Onde:
Observe que após a declaração do tipo registro (declaração Type) você poderá então declarar as novas
variáveis individuais como sendo deste tipo declarado.
Vale lembrar que a declaração acima tem o mesmo resultado que a declaração de variável mostrada na
primeira forma de declaração. Esta abordagem é, contudo, mais geral, porque nos permite declarar variáveis
registro adicionais (com a mesma composição) à medida que se faz necessário.
Observações:
• Note que neste caso, os tipos registro devem ser declarados antes das declarações das variáveis
do tipo registro, pois é bastante comum ocorrer a necessidade de se declarar uma variável com o
tipo de registro previamente declarado.
• Cada declaração de campo é escrita seguindo as mesmas regras de declaração de variáveis no
Pascal.
• Além dos tipos simples, válidos no pascal, os campos do registro podem ser outro tipo definido pelo
usuário ou um outro registro previamente declarado.
Exemplo:
Vamos utilizar o mesmo exemplo utilizado anteriormente do registro de funcionário de uma empresa. A
declaração da variável é mostrada abaixo.
. 68
Linguagem Pascal
Observe que primeiro declaramos um o registro lógico chamado reg_funcionário e logo em seguida
declaramos a variável funcionário do tipo reg_funcionário. O registro reg_funcionário é um conjunto de dados
heterogêneos (um campo integer, um campo real e dois campos string).
Tanto a leitura quanto a escrita de um registro são efetuadas respectivamente com as instruções
read/readln e write/writeln seguidas do nome da variável do tipo registro e de seu campo correspondente
separado por um caracter “.” (ponto), como exemplificado a seguir:
begin
...
write(‘Informe o nome do funcionário....: ‘);
readln(funcionario.nome);
...
end.
Program cadastro_alunos;
Uses WinCrt;
. 69
Linguagem Pascal
Observe que a declaração VAR, declara uma variável de registro chamada ALUNO, sendo esta um
conjunto de oito registros (array[1..8]) do tipo reg_aluno, que por sua vez é formado por dois tipos de dados: o
nome (nome do aluno) como caractere e a nota (quatro notas do aluno) como bimestre.
Podemos observar, que no programa cadastro_alunos mostrado abaixo, algumas instruções fazem
referência a campos dos i-ésimos elementos do conjunto (variável ALUNO). Veja alguns exemplos:
Veja abaixo o programa completo que nos permite trabalhar com vários registros de alunos. Este
programa deverá receber a entrada do nome e notas (quatro notas) de oito alunos e ao final mostrar os nomes e
as notas dos mesmos.
Program cadastro_alunos;
Uses WinCrt;
Type
notas = array[1..4] of real;
reg_aluno = record
nome : string[20];
nota : notas
end;
begin
resp := 'S';
while (UpCase(resp)='S') do
begin
. 70
Linguagem Pascal
writeln;
for j := 1 to 4 do {coluna - notas}
begin
write('Informe a',j:2,'a. nota.........: ');
readln(aluno[i].nota[j]);
end;
end;
{*** Apresentação - 8 alunos com 4 notas cada***}
for i := 1 to 8 do
begin
clrscr;
writeln('Apresentação das Notas dos Alunos');
writeln('=================================');
writeln;
writeln('Aluno : ',aluno[i].nome);
writeln;
for j := 1 to 4 do
writeln('Nota ',j:2,'......: '
,aluno[i].nota[j]:5:2);
writeln;
write('Tecle <ENTER> para ver as notas do próximo
aluno...'); readln;
end;
writeln;
write('Deseja Continuar? (S/N) '); readln(resp);
end;
donewincrt;
end.
Aluno : XXXXXXXXXXXXXXXXXXXX
. 71
Linguagem Pascal
Capítulo 13 - Arquivos
Já estudamos os conceitos de tabelas em memória (memória RAM) através da utilização de VETORES
e MATRIZES. Estudamos também o conceito de utilização do tipo definido REGISTRO. Estes conceitos vistos
anteriormente formaram a base para a utilização de um arquivo, pois um arquivo é na verdade uma estrutura de
dados (tabela de informações) gravada em um meio magnético como disquetes, discos rígidos ou fitas
magnéticas.
As matrizes e os vetores são manipuladas através de um índice de controle ao passo que os arquivos
são manipulados por um ponteiro de registro.
Os arquivos são usados principalmente em dois casos:
13.1.1
13.1.1 O acesso seqüencial
Em um arquivo de acesso seqüencial o processo de leitura e gravação é feito de forma contínua, um
registro após o outro. Assim, quando queremos gravar um novo registro é necessário percorrer todo o arquivo,
passando por todos os registros, até localizar a primeira posição vazia após o último registro. Acontece o mesmo
no processo de leitura. Se o registro a ser lido é o último, por exemplo, será necessário a leitura de todos os
registros que o antecedem.
. 72
Linguagem Pascal
A sintaxe:
Var <identificador> : File Of <tipo registro>;
Onde:
Observações:
• É importante observar que devemos, antes de declarar a nova variável do tipo arquivo, definir um
tipo registro. O tipo registro, previamente declarado, definirá então a estrutura do registro do novo
arquivo.
Exemplo:
Neste exemplo, foi declarado uma variável chamada arq_agenda, um arquivo com tipo definido de
registro, composta por registros do tipo reg_agenda. A variável arq_agenda representará o novo arquivo criado.
Note então que, conforme descrito anteriormente, o tipo registro reg_agenda foi previamente declarado e só
depois foi declarada a variável arq_agenda. A estrutura de arq_agenda foi definida na declaração do novo tipo
record chamado reg_agenda. A figura abaixo mostra a representação do arquivo arq_agenda.
A sintaxe:
. 73
Linguagem Pascal
Assign(<variável arquivo>,<arquivo>);
Onde:
Observação:
• Pode-se acrescentar ao parâmetro “arquivo” da procedure assing um caminho (path). Este caminho
indicará o local (a unidade e a pasta) onde deverá ser feita a gravação do arquivo, quando da sua
criação pela procedure rewrite.
Exemplo:
Assign(arq_agenda,’agenda.dat’);
Esta instrução associa o arquivo lógico arq_agenda ao arquivo físico agenda.dat que será criado
posteriormente com a procedure rewrite.
A sintaxe:
Rewrite(<variável arquivo>);
Onde:
Observação:
Exemplo:
rewrite(arq_agenda);
. 74
Linguagem Pascal
A sintaxe:
Reset(<variável arquivo>);
Onde:
Observação:
• Caso você faça a tentativa de abrir um arquivo ainda não existente, será apresentada a mensagem
de erro em tempo de execução (Run-time error 2: File not found). Esta mensagem representa uma
tentativa de abertura de um arquivo inexistente. É necessário então que se crie o arquivo
(procedure rewrite) antes da sua abertura.
Exemplo:
reset(arq_agenda);
A sintaxe:
Onde:
Exemplo:
read(arq_agenda,agenda);
Esta instrução faz a leitura de um registro no arquivo arq_agenda e o armazena na variável do tipo
registro chamada agenda. A instrução lê o registro para o qual o ponteiro do arquivo aponta no momento.
. 75
Linguagem Pascal
A sintaxe:
Onde:
Observação:
Exemplo:
write(arq_agenda,agenda);
Esta instrução grava o registro, que se encontra armazenado na variável agenda, no arquivo
arq_agenda. A instrução grava a informação no registro para o qual o ponteiro do arquivo aponta no momento.
A sintaxe:
Close(<variável arquivo>);
Onde:
Exemplo:
Close(arq_agenda);
. 76
Linguagem Pascal
procedure podemos acessar o n-ésimo registro de um arquivo. Lembre-se: No Pascal o primeiro registro de um
arquivo é o de número 0 (zero).
A sintaxe:
Seek(<variável arquivo>,<n>);
Onde:
Seek – é palavra-chave do Pascal;
variável arquivo – é o nome da variável arquivo (arquivo lógico) associada ao arquivo (arquivo
físico).
n – é o número do registro que se quer acessar.
Exemplo:
Seek(arq_agenda,1);
Esta instrução posiciona o ponteiro do arquivo no registro de número 1 (segundo registro) do arquivo
associado à variável arquivo arq_agenda.
A sintaxe:
FilePos(<variável arquivo>);
Onde:
FilePos – é palavra-chave do Pascal;
variável arquivo – é o nome da variável arquivo (arquivo lógico) associada ao arquivo físico
(arquivo em meio magnético).
Exemplo:
...
Seek(arq_agenda,1);
Writeln(FilePos(arq_agenda));
...
A sintaxe:
FileSize(<variável arquivo>);
Onde:
. 77
Linguagem Pascal
Exemplo:
...
Writeln(FileSize(arq_agenda));
...
Onde:
Eof – é palavra-chave do Pascal;
variável arquivo – é o nome da variável arquivo (arquivo lógico) associada ao arquivo (arquivo
físico).
Exemplo:
...
while (not Eof(arq_agenda)) do
begin
read(arq_agenda,x);
writeln(x.codigo,’ ‘,x.nome);
end;
...
No exemplo acima a instrução “ writeln(x.codigo,’ ‘,x.nome);;” mostrará na tela os campos codigo e
nome de todos os registros do arquivo arq_agenda até que seja encontrado o fim deste arquivo.
Bibliografia:
Pascal Estruturado
Uarry Farrer, Christiano G. Becker, Eduardo Chaves Faria, Frederico Ferreira Campos, e outros
Editora LTC, terceira edição, 1999.
Programação em Pascal
Byron S. Gottfried, Ph. D.
McGraw-Hill, 1988.
. 78