23
ARQUIVOS Prof.ª Ms. Eng.ª Elaine Cecília Gatto Algoritmos e Estruturas de Dados Engenharia de Computação Universidade Sagrado Coração

Algoritmos - Arquivos Parte 3

Embed Size (px)

DESCRIPTION

Algoritmos - Arquivos Parte 3

Citation preview

Page 1: Algoritmos - Arquivos Parte 3

ARQUIVOSProf.ª Ms. Eng.ª Elaine Cecília GattoAlgoritmos e Estruturas de DadosEngenharia de ComputaçãoUniversidade Sagrado Coração

Page 2: Algoritmos - Arquivos Parte 3

Pesquisar no arquivo - sequencial

iniciotipo pessoa = registrocaracter: nome;inteiro: fone;fimregistro;

tipo pessoal = arquivo composto de pessoa;pessoa: aux,pessoal: agenda;caracter: nomeprocurado;

abra(agenda);leia(nomeprocurado);

repitacopie(agenda, aux);avance(agenda);

até(aux.nome = nomeprocurado) ou (fda(agenda));

se(aux.nome = nomeprocurado)então escreva(aux.fone);senão escreva(“telefone

não registrado”);fimse;

feche(agenda);fim.

Page 3: Algoritmos - Arquivos Parte 3

Pesquisar no arquivo - sequencial

iniciotipo pessoa = registrocaracter: nome;inteiro: fone;fimregistro;

tipo pessoal = arquivo composto de pessoa;pessoa: aux,pessoal: agenda;caracter: nomeprocurado;

abra(agenda);leia(nomeprocurado);

repitacopie(agenda, aux);avance(agenda);

até(aux.nome = nomeprocurado) ou (fda(agenda));

se(aux.nome = nomeprocurado)então escreva(aux.fone);senão escreva(“telefone

não registrado”);fimse;

feche(agenda);fim.

Não é possível apenas avançar pelos registros, uma vez que precisamos verificar se o conteúdo de cada um deles é o esperado, por isso se copia para um registro auxiliar cada um dos registros armazenados.

Page 4: Algoritmos - Arquivos Parte 3

Alteração - sequencialiniciotipo pessoa = registro

caracter: nome;inteiro: fone;

fimregistro;tipo pessoal = arquivo composto de pessoa;pessoa: aux,pessoal: agenda;caracter: nomeprocuradointeiro: 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.

Page 5: Algoritmos - Arquivos Parte 3

Alteração - sequencialiniciotipo pessoa = registro

caracter: nome;inteiro: fone;

fimregistro;tipo pessoal = arquivo composto de pessoa;pessoa: aux,pessoal: agenda;caracter: nomeprocuradointeiro: 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.

É preciso ter o cuidado de não avançar a posição corrente depois de ter sido encontrado o registro, pois temos, após a atualização, de regravá-lo na mesma posição.

Page 6: Algoritmos - Arquivos Parte 3

Exclusão - sequencialiniciotipo 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.

Page 7: Algoritmos - Arquivos Parte 3

Exclusão - sequencialiniciotipo 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.

É importante certificar-se de que a posição corrente no arquivo é a correta, apresentando os dados que nela constam;

Sempre é recomendável solicitar uma confirmação para uma operação de exclusão, porque depois de executa não haverá mais volta

Page 8: Algoritmos - Arquivos Parte 3

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.

Page 9: Algoritmos - Arquivos Parte 3

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.

Page 10: Algoritmos - Arquivos Parte 3

Cadastro randômicoiniciotipo aluno = registrocaracter : nome;inteiro : numero;real : n1, n2, n3, n4;fimregistro;tipo sala = arquivo composto de aluno;aluno : aux;sala : diario;abra(diario);RepitaLeia(aux.numero, aux.n1, aux.nome);

se(aux.numero>0)então inicioaux.n2 0;aux.n2 0;aux.n4 0;posicione(diario, aux.numero);guarde(diario, aux);fim;fimse;até aux.numero = 0;feche(diario);fim.

Page 11: Algoritmos - Arquivos Parte 3

Cadastro randômicoiniciotipo aluno = registrocaracter : nome;inteiro : numero;real : n1, n2, n3, n4;fimregistro;tipo sala = arquivo composto de aluno;aluno : aux;sala : diario;abra(diario);RepitaLeia(aux.numero, aux.n1, aux.nome);

se(aux.numero>0)então inicioaux.n2 0;aux.n2 0;aux.n4 0;posicione(diario, aux.numero);guarde(diario, aux);fim;fimse;até aux.numero = 0;feche(diario);fim.

Precisamos atribuir a n1, n2 e n3 o valor zero para que todos os campos a serem armazenados estejam preenchido;

O comando posicione determina que a localização no arquivo seja a estabelecida pelo número de chamada, que é a chave de acesso utilizada pelo professor.

Page 12: Algoritmos - Arquivos Parte 3

Acessando registros diretamente

iniciotipo aluno = registrocaracter : 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.

Page 13: Algoritmos - Arquivos Parte 3

Acessando registros diretamente

iniciotipo aluno = registrocaracter : 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.

Após a execução do comando POSICIONE, o registro que está apto a ser manipulado é o indicado pela chave numeroAluno fornecida anteriormente

Page 14: Algoritmos - Arquivos Parte 3

Alteraçãoiniciotipo aluno = registrocaracter : 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;

Page 15: Algoritmos - Arquivos Parte 3

Alteraçãoescreva(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.

Page 16: Algoritmos - Arquivos Parte 3

ARQUIVOS EM PASCAL

type nome_do_registro = recordnome_do_campo : tipo do dado;end;nome_do_arquivo = file of nome_do_registro;

varvariável_do_arquivo : nome_do_arquivo;variável_do_registro : nome_do_registro;

Page 17: Algoritmos - Arquivos Parte 3

ARQUIVOS EM PASCAL

type registro = recordnome : string;endereco : string;telefone : string;

end;arquivo = file of registro;

varagenda : arquivo;reg : registro;

Page 18: Algoritmos - Arquivos Parte 3

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.

Page 19: Algoritmos - Arquivos Parte 3

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

Page 20: Algoritmos - Arquivos Parte 3

ARQUIVOS EM PASCAL

type carro= recordplaca: string;marca: string;ano: integer;

end;frota = file of carro;

vardetran: frota;carros : carro;

Page 21: Algoritmos - Arquivos Parte 3

Criando um arquivo em Pascal

Program cria;Uses crt, wincrt;

Type carro = recordPlaca : string;Marca : string;Ano : integer;

End;Frota = file of carro;Var

Detran : frota;Carros : carro;

BeginAssing(detran, ‘carros.dat’);Rewrite(detran);Close(detran);End.

Page 22: Algoritmos - Arquivos Parte 3

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.

Page 23: Algoritmos - Arquivos Parte 3

Exercícios