1. ARQUIVOS
Prof.ª Ms. Eng.ª Elaine Cecília Gatto
Algoritmos e Estruturas de Dados
Engenharia de Computação
Universidade Sagrado Coração
2. Pesquisar no arquivo sequencial
inicio
tipo pessoa = registro
caracter: nome;
inteiro: fone;
fimregistro;
repita
tipo pessoal = arquivo composto de
pessoa;
pessoa: aux,
pessoal: agenda;
caracter: nomeprocurado;
se(aux.nome = nomeprocurado)
então escreva(aux.fone);
senão escreva(“telefone não
registrado”);
fimse;
abra(agenda);
leia(nomeprocurado);
feche(agenda);
fim.
copie(agenda, aux);
avance(agenda);
até(aux.nome = nomeprocurado) ou
(fda(agenda));
3. Pesquisar no arquivo sequencial
inicio
Não é possível apenas
tipo pessoa = registro
avançar pelos registros,
caracter: nome; vez
uma
que
inteiro: precisamos verificar se
fone;
o conteúdo de cada um
fimregistro;
deles é o esperado, por
isso se copia para um
registro auxiliar cada
tipo pessoal = arquivo composto de
dos
registros
pessoa;um
armazenados.
repita
copie(agenda, aux);
avance(agenda);
até(aux.nome = nomeprocurado) ou
(fda(agenda));
pessoa: aux,
pessoal: agenda;
caracter: nomeprocurado;
se(aux.nome = nomeprocurado)
então escreva(aux.fone);
senão escreva(“telefone não
registrado”);
fimse;
abra(agenda);
leia(nomeprocurado);
feche(agenda);
fim.
4. Alteração - sequencial
inicio
tipo pessoa = registro
caracter: nome;
inteiro: fone;
fimregistro;
tipo pessoal = arquivo composto de
pessoa;
pessoa: aux,
pessoal: agenda;
caracter: nomeprocurado
inteiro: novofone;
abra(agenda);
leia(nomeprocurado);
copie(agenda,aux);
enquanto(aux.nome <> nomeprocurado)
e (não fda(agenda)) faça
avance(agenda);
copie(agenda, aux);
fimenquanto;
se(aux.nome = nomeprocurado)
então inicio
escreva(aux.nome, “possui
fone”, aux.fone);
escreva(“novo telefone”);
leia(novofone);
aux.fona novofone;
guarde(agenda, aux);
fim;
senão escreva(“telefone não
registrado!”);
fimse;
feche(agenda);
fim.
5. Alteração - sequencial
inicio
copie(agenda, aux);
É preciso ter o cuidado
tipo pessoa = registro
fimenquanto;
de não avançar a
caracter: nome;
posição se(aux.nome = nomeprocurado)
corrente
inteiro: fone;
depois então ter sido
de inicio
fimregistro;
escreva(aux.nome, “possui
encontrado o registro,
fone”, aux.fone);
pois temos, após a
tipo pessoal = arquivo composto de
pessoa;
escreva(“novo telefone”);
atualização, de regraválo na mesma posição.
pessoa: aux,
leia(novofone);
pessoal: agenda;
aux.fona novofone;
caracter: nomeprocurado
guarde(agenda, aux);
inteiro: novofone;
fim;
abra(agenda);
senão escreva(“telefone não
registrado!”);
leia(nomeprocurado);
fimse;
copie(agenda,aux);
feche(agenda);
enquanto(aux.nome <> nomeprocurado)
e (não fda(agenda)) faça
fim.
avance(agenda);
6. Exclusão - sequencial
inicio
tipo pessoa = registro
caracter: nome;
inteiro: fone;
fimregistro;
tipo pessoal = arquivo composto de
pessoa;
pessoa: aux,
pessoal: agenda;
caracter: nomeprocurado, confirmacao;
abra(agenda);
leia(nomeprocurado);
repita
copie(agenda, aux);
avance(agenda);
até(aux.nome = nomeprocurado) ou
(fda(agenda));
se(aux.nome = nomeprocurado)
então inicio
escreva(aux.nome, aux.fone);
escreva(“confirma exclusão
(s/n) ?”);
leia(confirmacao);
se confirmacao = “s”
então elimine(agenda);
fimse;
fim;
senão escreva(“nome não
encontrado”);
fimse;
feche(agenda);
fim.
7. Exclusão - sequencial
É importante certificarse de que a posição
correntese(aux.nomeé=anomeprocurado)
no arquivo
inicio
correta, então inicio
apresentando
tipo pessoa = registro
os dados queescreva(aux.nome, aux.fone);
nela
caracter: nome;
constam;
inteiro: fone;
escreva(“confirma exclusão
(s/n) ?”);
fimregistro;
Sempre
é
leia(confirmacao);
tipo pessoal = arquivo composto de
recomendável solicitar
pessoa;
se confirmacao = “s”
uma confirmação para
pessoa: aux,
então elimine(agenda);
uma
operação
de
pessoal: agenda;
fimse;
exclusão,
porque
caracter: nomeprocurado, confirmacao;depois de executa não
fim;
abra(agenda);
senão escreva(“nome não
haverá mais volta
encontrado”);
leia(nomeprocurado);
fimse;
repita
copie(agenda, aux);
feche(agenda);
avance(agenda);
fim.
até(aux.nome = nomeprocurado) ou
(fda(agenda));
8. RANDÔMICO
• É quando a circusntância de armazenamento que perfaz o
algoritmo é a da localização do registro dentro do arquivo ficar
diretamente relacionada a uma informação constituinte desse
arquivo.
• Através de um dos campos do registro podemos determinar o
lugar onde ele está guardado, podendo acessá-lo de modo
instantaneo.
• Podemos acessar um registro específico diretamente, sem nos
preocuparmos com seus antecessores, utilizando nesse acesso
o mesmo campo que determinou sua posição no arquivo no
instante da gravação.
9. RANDÔMICO
• O campo que determina a posição do registro no arquivo é
denominado CHAVE, pois é a informação capaz de acessar o
registro.
• A CHAVE determinada no algoritmo deve ser única, pois nunca
podemos armazenar dois registros diferentes em uma mesma
localização.
• Em um arquivo randômico os arquivos não ficam localizados
na ordem em que são gravados.
• Cada registro possui um lugar reservado para ser guardado,
identificado através da chave.
10. Cadastro randômico
inicio
tipo aluno = registro
caracter : nome;
inteiro : numero;
real : n1, n2, n3, n4;
fimregistro;
tipo sala = arquivo composto
de aluno;
aluno : aux;
sala : diario;
abra(diario);
Repita
Leia(aux.numero, aux.n1,
aux.nome);
se(aux.numero>0)
então inicio
aux.n2 0;
aux.n2 0;
aux.n4 0;
posicione(diario,
aux.numero);
guarde(diario, aux);
fim;
fimse;
até aux.numero = 0;
feche(diario);
fim.
11. Cadastro randômico
inicio
tipo aluno = registro
Precisamos atribuir
caracter : nome; a n1, n2 e n3
o valor zero para que todos os
inteiro : numero; armazenados
campos a serem
realestejamn2, n3, n4;
: n1, preenchido;
fimregistro;
O comando posicione determina
tipoque a localização nocomposto
sala = arquivo arquivo seja
de aluno;
a estabelecida pelo número de
chamada,
aluno : aux; que é a chave de
salaacesso utilizada pelo professor.
: diario;
abra(diario);
Repita
Leia(aux.numero, aux.n1,
aux.nome);
se(aux.numero>0)
então inicio
aux.n2 0;
aux.n2 0;
aux.n4 0;
posicione(diario,
aux.numero);
guarde(diario, aux);
fim;
fimse;
até aux.numero = 0;
feche(diario);
fim.
12. Acessando registros
diretamente
inicio
tipo aluno = registro
caracter : nome;
inteiro : numero;
real : n1, n2, n3, n4;
fimregistro;
tipo sala = arquivo composto
de aluno;
aluno : aux;
sala : diario;
Inteiro: numeroAluno;
abra(diario);
leia(numeroaluno);
posicione(diario,
numeroaluno);
copie(aux.nome, “possui
nota”, aux.n1);
feche(diario);
fim.
13. Acessando registros
diretamente
inicio
Após a execução do
tipo aluno = registro
comando
POSICIONE,
o
caracter : nome;
registro que está
inteiro : numero; a
apto
ser
real : n1, n2, manipulado é o
n3, n4;
indicado pela chave
fimregistro; numeroAluno
fornecida
tipo sala = arquivo composto
anteriormente
de aluno;
aluno : aux;
sala : diario;
Inteiro: numeroAluno;
abra(diario);
leia(numeroaluno);
posicione(diario,
numeroaluno);
copie(aux.nome, “possui
nota”, aux.n1);
feche(diario);
fim.
14. Alteração
inicio
tipo aluno = registro
caracter : nome;
inteiro : numero;
real : n1, n2, n3, n4;
fimregistro;
tipo sala = arquivo composto
de aluno;
aluno : aux;
sala : diario;
inteiro: numeroaluno,
qualnota;
real: nota;
abra(diario);
leia(numeroaluno,
qualnota);
posicione(diario,
numeroaluno);
copie(diario, aux);
escolha qualnota
caso 1: nota aux.n1;
caso 2: nota aux.n2;
caso 3: nota aux.n3;
caso 4: nota aux.n4;
fimescolha;
15. Alteração
escreva(aux.nome, “possui
nota”, qualnota, “=”, nota);
escreva(“nova nota: ”);
leia(nota);
escolha qualnota
caso 1 : aux.n1 nota;
caso 2 : aux.n2 nota;
caso 3 : aux.n3 nota;
caso 4 : aux.n4 nota;
fimescolha;
guarde(diario, aux);
feche(diario)
fim.
16. ARQUIVOS EM PASCAL
type nome_do_registro = record
nome_do_campo : tipo do dado;
end;
nome_do_arquivo = file of nome_do_registro;
var
variável_do_arquivo : nome_do_arquivo;
variável_do_registro : nome_do_registro;
17. ARQUIVOS EM PASCAL
type registro = record
nome : string;
endereco : string;
telefone : string;
end;
arquivo = file of registro;
var
agenda : arquivo;
reg : registro;
18. COMANDOS EM PASCAL
• ASSING: associa nomes de arquivos e variáveis locais, do programa
com arquivos de dispositivos de memória secundária, como por
exemplo, disco.
• REWRITE: abre novos arquivos, pois, antes de posicionar o ponteiro
no registro de número zero, o comando rewrite apagará todo o
conteúdo do arquivo.
• RESET: abre arquivos e posiciona o ponteiro no registro de número
zero, sem destruir os dados já existentes no arquivo.
• CLOSE: fecha arquivos que foram abertos pelo comando REWRITE ou
pelo comando RESET. As atualizações só serão efetuadas em um
arquivo assim que ele for fechado.
19. COMANDOS EM PASCAL
• READ: lê os dados que estão armazenados nos registros de um
arquivo.
• WRITE: grava os dados nos registros de um arquivo.
• SEEK: posiciona o ponteiro no registro desejado. O primeiro registro
do arquivo é sempre o de número zero.
• FILESIZE: retorna o número de registros presentes em um arquivo.
• FILEPOS: retorna o número do registro em que o ponteiro está
localizado.
• NOT EOF: verifica o final do arquivo
20. ARQUIVOS EM PASCAL
type carro= record
placa: string;
marca: string;
ano: integer;
end;
frota = file of carro;
var
detran: frota;
carros : carro;
21. Criando um arquivo em Pascal
Program cria;
Uses crt, wincrt;
Type carro = record
Placa : string;
Marca : string;
Ano : integer;
End;
Frota = file of carro;
Var
Detran : frota;
Carros : carro;
Begin
Assing(detran,
‘carros.dat’);
Rewrite(detran);
Close(detran);
End.
22. Arquivos em Pascal
•
•
•
•
•
•
•
•
Inclusão sequencial de dados em arquivos
Inclusão ordenada de dados em um arquivo
Exclusão física de dados de um arquivo
Exclusão lógica de dados de um arquivo
Alteração de dados de um arquivo
Consulta geral de dados em um arquivo
Consulta específica de dados em um arquivo
Consulta formulada de dados em um arquivo
• Ascencio, A. F. G. Lógica de Programação com Pascal. São
Paulo: Makron Books, 1999. Página 86.