Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Um endereço de memória é um número que serve para identificar um byte específico da memória.
Podemos imaginar a memória como sendo um vetor onde cada elemento é um byte, acessível através
de um número que é seu endereço.
Normalmente usamos variáveis para armazenar dados (caracteres, inteiros, reais, etc.). Se um endereço
é também um número, nada impede que possamos criar também variáveis para armazenar endereços
de memória. Estas variáveis são denominadas ponteiros.
Antes de se utilizar ponteiros, precisamos definir seu tipo.
type
Nome da variavél ponteiro = ^Tipo de dados;
* Sendo tipo de dados um record, um vetor, uma variável, outro tipo, etc.
Exemplo:
type
Dados = Record
Nome:String;
Idade:Integer;
End;
PtrDados = ^Dados;
Após definido um tipo, pode-se criar variáveis desse tipo.
Exemplo:
var PDados:PtrDados;
* Se uma variável ponteiro P armazena um endereço de memória qualquer, então P^ nos dá o conteúdo
armazenado naquele endereço.
Exemplo:
PDados^ - É um record
PDados^.Nome - É uma string de caracteres
PDados^.Idade - É um número inteiro
Funções Pascal para Ponteiros
New (Tipo Ponteiro);
Aloca uma área de memória e guarda seu endereço em P.
Dispose (Tipo Ponteiro);
Serve para liberar a área de memória cujo endereço está em P.
* Sendo que uma área de memória alocada por New, só estará disponível de novo, se for usado o
comando Dispose ou quando a utilização desse área for terminada.
Uma pilha é uma lista linear onde as operações de inserção e retirada são efetuadas apenas em uma
extremidade da lista linear, ou seja:
- A inserção de um elemento X torna-o o último elemento da lista;
- A retirada é sempre efetuada sobre o elemento An.
Devido às características das operações da pilha, o último elemento a ser inserido será o primeiro a ser
retirado. Estruturas desse tipo são conhecidas como "LIFO" (last in, first out).
Rotinas para Pilha
type
Tipo = Integer;
Pilha = record
P:Array [1..20] of Tipo;
Base, topo:Integer;
Maxtopo:Integer;
end;
function Topopilha(P:Pilha):Tipo;
begin
if not (PilhaVazia(P))
then Topopilha:=P.p[P.Topo];
end;
Uma fila é uma lista linear onde as operações de inserção são efetuadas apenas no final da lista e as
retiradas apenas no início da lista linear, ou seja:
- A inserção de um elemento X torna-o o último elemento da lista linear;
- A retirada é sempre efetuada sobre o elemento A1.
Devido às características das operações da fila, o primeiro elemento a ser inserido será o primeiro a ser
retirado. Estruturas desse tipo são conhecidas como "FIFO" (first in, first out).
Rotinas para Fila
const Tamanho = 20
Type Fila = record
f: array[1..tamanho] of integer;
frente, tras, MAXFILA: integer;
end;
Procedure InitFila(var f: Fila);
begin
f.frente := 0;
f.tras := 0;
f.MAXFILA := tamanho;
end;
Em listas implementadas através de alocação seqüêncial de memória, a própria sucessão dos endereços
de memória nos dá a seqüência dos nós na estrutura.Para listas encadeadas, para manter a seqüência
dos nós precisamos acrescentar ao nó a informação de onde está o próximo nó na seqüência, ou seja, o
seu endereço.
Rotinas para Listas Encadeadas
type
PtrNodoLista = ^NodoLista;
Nodolista = Record
Conteudo:Integer;
Proximo:PtrNodoLista;
End;
procedure InicializaLista (var l:PtrNodoLista);
begin
l:=nil;
end;
Arquivos Binários
Arquivos do tipo binário usam o sistema binário de numeração para armazenar tanto as informações
numéricas quanto as informações literais, estas últimas através de códigos numéricos dos seus
caracteres (ASCII).
Na linguagem Pascal a organização dos arquivos binários é sempre seqüencial, isto é, os registros são
colocados um após o outro, em seqüência. Quanto ao acesso, embora a linguagem Pascal só
estabeleça o acesso seqüencial dos arquivos binários, as suas implementações geralmente também
permitem o seu acesso direto, através do número de ordem do registro.
Declaração de Arquivos Binários
type
nome do tipo = File of tipo do registro;
var lista de identificadores: nome do tipo;
Exemplo:
type
ArqInt = File of Integer;
var Notas: ArqInt;
Arquivos Textos
Arquivos do tipo texto armazenam todas as informações, numéricas ou literais, através de códigos de
seus caracteres (geralmente ASCII). Por exemplo, o valor numérico 65 é armazenado através dos
caracteres '6' e '5', cujos códigos ASCII são 54 e 53.
Os caracteres de um arquivo tipo texto (ou os seus códigos) são agrupados em linhas, que por sua vez
são agrupadas em páginas. O caractere de código 13 (#13) indica o fim da linha, o de código 12 (#12) o
fim da página e o código 26 (#26) o fim do arquivo. Por exemplo se faço write(Arq,#13); estou criando
uma quebra de linha no arquivo.
* A organização dos arquivos textos no Pascal assim como os arquivos binários também é seqüencial,
mas não permite o acesso direto aos elementos do arquivo.
Leitura de Arquivos
• read (variável do tipo arquivo, variável que irá receber o valor lido);
Exemplo:
var Arq: File of Integer;
Num:Integer;
begin
assign (Arq,'ArqBin.bin');
reset (Arq);
read (Arq, num);
close (Arq);
end.
• readln (variável do tipo arquivo, variável que irá receber o valor lido);
Exemplo:
var Arq: Text;
Linha:String;
begin
assign (Arq,'ArqText.txt');
reset (Arq);
readln (Arq, linha);
close (Arq);
end.
* O comando read e readln podem ser usados para arquivos do tipo texto, mas para arquivos do tipo
binário só se pode usar o comando read.
Escrita de Arquivos
• write (variável do tipo arquivo, variável que contém o valor a ser gravado);
Exemplo:
var Arq: File of Integer;
Num:Integer;
begin
num:=10;
assign (Arq,'ArqBin.bin');
reset (Arq);
write (Arq, num); { É gravado o número 10 num arquivo binário }
close (Arq);
end.
• writeln (variável do tipo arquivo, variável que contém o valor a ser gravado);
Exemplo:
var Arq: Text;
Linha:String;
begin
linha:='Teste de Arquivos';
assign (Arq,'ArqText.txt');
rewrite (Arq); { Cria um arquivo "ArqText.txt" e o deixa em modo de inserção }
writeln (Arq, linha); { É gravado a string "Teste de Arquivos" no arquivo texto }
close (Arq);
end.
* O comando write e writeln podem ser usados para arquivos do tipo texto, mas para arquivos do tipo
binário só se pode usar o comando write.
Funções Auxiliares
Arquivos Arquivos
Nome Utilização
Binários Textos
Seek (variável do tipo Posiciona o registro do apontador
arquivo,número do para o número de registro Sim Não
registro); especificado.
FileSize (variável do Retorna o número total de
Sim Não
tipo arquivo); registros de um arquivo binário.
Retorna TRUE quando o
EOF (variável do tipo
apontador chega no final do Sim Sim
arquivo );
arquivo.
Retorna TRUE quando o
EOLN (variável do tipo
apontador chega no final da linha Sim Sim
arquivo);
do arquivo.