SlideShare uma empresa Scribd logo
1 de 20
ARQUIVOS
DISCIPLINA DE ALGORITMOS E
ESTRUTURAS DE DADOS
Prof.ª M.ª Eng.ª Elaine Cecília Gatto
Bauru-SP
2015
Sumário
1. ARQUIVOS...............................................................................................................................................3
1.1. Declaração de Arquivos......................................................................................................................3
1.1.1. Sintaxe .........................................................................................................................................3
1.1.2. Exemplo.......................................................................................................................................3
1.2. Associação de variáveis a arquivos ....................................................................................................3
1.3. Criação de novos arquivos..................................................................................................................4
1.4. Abrindo arquivos existentes ...............................................................................................................4
1.5. Fechando arquivos ..............................................................................................................................4
1.6. Lendo arquivos ...................................................................................................................................5
1.7. Gravando dados em um arquivos .......................................................................................................5
1.8. Movimentação do Ponteiro.................................................................................................................5
1.9. Tamanho do Arquivo..........................................................................................................................5
2.0. Posição do ponteiro.............................................................................................................................5
2.1. Verificação do fim de arquivo ............................................................................................................6
2.2. Exemplos ............................................................................................................................................6
Exemplo 1..............................................................................................................................................6
Exemplo 2: Incluindo clientes no arquivo criado ..................................................................................7
Passo 3: Inclua contas para os clientes cadastrados no arquivo criado .................................................9
Exemplo 4: Consultando o saldo de todas as contas de um cliente cadastrado...................................12
Exemplo 5: Atualizando o saldo de um cliente a partir de um depósito .............................................13
Exemplo 6: Atualizando o saldo de um cliente a partir de um saque ..................................................14
2.3. Exercícios .........................................................................................................................................16
1. ARQUIVOS
1.1. Declaração de Arquivos
1.1.1. Sintaxe
TYPE nome_do_registro = RECORD
nome_do_campo_1: tipo_do_dado;
nome_do_campo_2: tipo_do_dado;
nome_do_campo_3: 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;
1.1.2. Exemplo
Exemplo 1:
TYPE registro = RECORD
nome : string[30];
endereco : string[20];
telephone : string[10];
END;
arquivo = FILE OF registro;
VAR
agenda : arquivo;
reg : registro;
Exemplo 2:
TYPE carro = RECORD
placa : string[7];
marca : string[20];
ano : integer
END;
Frota = FILE OF carro;
VAR
Detran : frota;
Carros : carro;
1.2. Associação de variáveis a arquivos
ASSIGN: comando usado para associar nomes de arquivos FÍSICOS à variáveis de programa.
Assim uma ligação é estabelecida entre a memória principal (RAM) e a memória secundária (HD).
Sintaxe:
ASSIGN (nome_da_variavel_do_tipo_arquivo, ‘caminho do arquivo no disco’);
Exemplo 1:
ASSIGN(agenda, ‘agenda.dat’);
Exemplo 2:
ASSIGN(detran, ‘c:exemploscarros.dat’);
1.3. Criação de novos arquivos
REWRITE: comando utilizado para criar um novo arquivo. Posiciona o ponteiro no primeiro
registro do arquivo quando utilizado. Existem duas condições:
a) arquivo já existente: se o camando REWRITE for utilizado para fazer referencia a um arquivo que
já exista em seu HD, todos os dados que estão armazenados nesse arquivo serão DESTRUÍDOS.
b) Arquivo não existente: força a criação do arquivo.
Sintaxe:
REWRITE(nome_da_variável_do_tipo_arquivo);
Exemplo 1:
REWRITE(detran);
Exemplo 2:
REWRITE(agenda);
1.4. Abrindo arquivos existentes
RESET: comando utilizado para abrir arquivos já criados. O ponteiro deve ser posicionado no
primeiro registro, sem destruir os dados já existentes no arquivo.
Sintaxe:
RESET(nome_da_variável_do_tipo_arquivo);
Exemplo 1:
RESET(detran);
Exemplo 2:
RESET(agenda);
1.5. Fechando arquivos
CLOSE: comando utilizado para fechar arquivos abertos pelo comando REWRITE ou RESET.
Todas as alterações feitas em um arquivo só serão efetivamente realizadas quando o mesmo for fechado.
Sintaxe:
CLOSE(nome_da_variável_do_tipo_arquivo);
Exemplo 1:
CLOSE(detran);
Exemplo 2:
CLOSE(agenda);
1.6. Lendo arquivos
READ: comando utilizado para ler arquivos. Uma leitura em disco deve ser executada para ler os
dados contidos em um arquivo.
Sintaxe:
READ(nome_da_variável_do_tipo_arquivo, nome_da_variavel_do_tipo_registro);
Exemplo 1:
READ(detran, carros);
Exemplo 2:
READ(agenda, reg);
1.7. Gravando dados em um arquivos
WRITE: comando utilizado para gravar dados em arquivos.
Sintaxe:
WRITE(nome_da_variável_do_tipo_arquivo, nome_da_variavel_do_tipo_registro);
Exemplo 1:
WRITE(detran, carros);
Exemplo 2:
WRITE(agenda, reg);
1.8. Movimentação do Ponteiro
SEEK: posiciona o ponteiro no registro desejado. O primeiro registro do arquivo é sempre o
número zero.
Sintaxe:
SEEK(nome_da_variável_do_tipo_arquivo, numero_do_registro);
Exemplo 1:
SEEK(detran, 0);
Exemplo 2:
SEEK(agenda, 0);
1.9. Tamanho do Arquivo
FILEZISE: retorna o número de registros existentes em um arquivo.
Sintaxe:
FILEZISE(nome_da_variável_do_tipo_arquivo);
Exemplo 1:
int tamanho := FILEZISE(agenda);
Exemplo 2:
int tamanho := FILEZISE(detran);
2.0. Posição do ponteiro
FILEPOS: retorna o número do registro onde o ponteiro está localizado.
Sintaxe:
int posicao := FILEPOS(nome_da_variavel_do_tipo_arquivo);
Exemplo 1:
int posicao := FILEPOS(agenda);
Exemplo 2:
int posicao := FILEPOS(detran);
2.1. Verificação do fim de arquivo
NOT EOF: verifica se o ponteiro chegou ao final do arquivo. Retorno desta função:
a) Verdadeiro: se o final do arquivo foi encontrado
b) Falso: se o final do arquivo não foi encontrado
Sintaxe:
WHILE NOT EOF (nome_da_variavel_do_tipo_arquivo) DO
BEGIN
Comandos;
END;
Exemplo 1:
WHILE NOT EOF (detran) DO
BEGIN
READ(detran, carros);
END;
Exemplo 2:
WHILE NOT EOF (agenda) DO
BEGIN
READ(agenda, reg);
END;
2.2. Exemplos
Exemplo 1
Criando dois arquivos, um para armazenar dados de clientes e, outro, para armazenar dados da
conta bancária desses clientes, conforme ilustram as tabelas abaixo.
Clientes Conta Bancaria
Numero do cliente Número da conta
Nome do cliente Número do cliente
Saldo
PROGRAM EXEMPLO;
USES CRT;
TYPE cliente = RECORD
numero : INTEGER;
nome : STRING[20];
ativo: INTEGER;
END;
clientes = FILE OF cliente;
TYPE conta = RECORD
numero_conta : INTEGER;
numero_cli : INTEGER;
saldo : REAL;
ativo: INTEGER;
END;
contas = FILE OF conta;
VAR
cli: clientes;
cl: cliente;
com: contas;
co: conta;
BEGIN
CLRSCR;
ASSIGN(CLI, 'C:CLIENTES.DAT');
REWRITE(CLI);
CLOSE(CLI);
WRITELN('ARQUIVO DE CLIENTES CRIADO COM SUCESSO ');
ASSIGN(COM, 'C:CONTAS.DAT');
REWRITE(COM);
CLOSE(COM);
WRITELN('ARQUIVO DE CONTAS CRIADO COM SUCESSO ');
READLN;
END.
Exemplo 2: Incluindo clientes no arquivo criado
PROGRAM EXEMPLO;
USES CRT;
TYPE cliente = RECORD
numero, ativo : INTEGER;
nome : STRING[20];
END;
clientes = FILE OF cliente;
VAR
cli: clientes;
cl: cliente;
K, I, P, POSICAO: INTEGER;
ACHOU : BOOLEAN;
NUMERO: INTEGER;
NOME: STRING[20];
BEGIN
CLRSCR;
ASSIGN(CLI, 'C:CLIENTES.DAT');
{$I-}
RESET(CLI);
{$I+}
IF IORESULT = 2
THEN REWRITE(CLI);
K := FILESIZE(CLI);
WRITE('DIGITE O NéMERO DO CLIENTE A SER INCLUÖDO ');
READLN(NUMERO);
IF K = 0
THEN BEGIN
WRITE('DIGITE O NOME DO CLIENTE A SER INCLUÖDO ');
READLN(NOME);
CL.NUMERO := NUMERO;
CL.NOME := NOME;
CL.ATIVO := 1;
WRITE(CLI, CL);
WRITELN('CLIENTE INCLUÖDO');
END
ELSE BEGIN
I := 0;
ACHOU := FALSE;
POSICAO := 0;
RESET(CLI);
WHILE ( I <= (K-1)) DO
BEGIN
READ(CLI, CL);
IF (CL.NUMERO = NUMERO) AND (CL.ATIVO = 1)
THEN BEGIN
ACHOU := TRUE;
I := K + 2;
END
ELSE BEGIN
IF NUMERO < CL.NUMERO
THEN BEGIN
POSICAO := FILEPOS(CLI) - 1;
I := K + 2;
END
ELSE BEGIN
I := I+1;
SEEK(CLI, I);
END;
END;
END;
IF ACHOU = TRUE
THEN WRITELN('JA EXISTE CLIENTE CADASTRADO COM ESTE CODIGO ')
ELSE BEGIN
IF I = FILESIZE(CLI)
THEN BEGIN
WRITE('DIGITE O NOME DO CLIENTE A SER INCLUÖDO ');
READLN(NOME);
SEEK(CLI, FILESIZE(CLI));
CL.NUMERO := NUMERO;
CL.NOME := NOME;
CL.ATIVO := 1;
WRITE(CLI, CL);
WRITELN('CLIENTE INCLUÖDO');
END
ELSE BEGIN
P := FILESIZE(CLI) - 1;
WHILE P >= POSICAO DO
BEGIN
SEEK(CLI,P);
READ(CLI,CL);
WRITE(CLI,CL);
P := P - 1 ;
END;
SEEK(CLI, POSICAO);
WRITE('DIGITE O NOME DO CLIENTE A SER INCLUÖDO ');
READLN(NOME);
CL.NUMERO := NUMERO;
CL.NOME := NOME;
CL.ATIVO := 1;
WRITE(CLI, CL);
WRITELN('CLIENTE INCLUÖDO');
END;
END;
END;
READLN;
CLOSE(CLI);
END.
Passo 3: Inclua contas para os clientes cadastrados no arquivo criado
PROGRAM EXEMPLO;
USES CRT;
TYPE cliente = RECORD
numero : INTEGER;
nome : STRING[20];
ativo: INTEGER;
END;
clientes = FILE OF cliente;
TYPE conta = RECORD
numero_conta : INTEGER;
numero_cli : INTEGER;
saldo : REAL;
ativo: INTEGER;
END;
contas = FILE OF conta;
VAR
con: contas;
co: conta;
cli: clientes;
cl: cliente;
K, I, P, POSICAO : INTEGER;
ACHOU : BOOLEAN;
NUM_CONTA, NUM_CLIENTE: INTEGER;
SALDO: REAL;
BEGIN
CLRSCR;
ASSIGN(CON, 'C:CONTAS.DAT');
{$I-}
RESET(CON);
{$I+}
IF IORESULT = 2 THEN
REWRITE(CON);
ASSIGN(CLI, 'C:CLIENTES.DAT');
{$I-}
RESET(CLI);
{$I+}
IF IORESULT = 2 THEN
REWRITE(CLI);
K := FILESIZE(CON);
WRITE('DIGITE O NéMERO DA CONTA A SER INCLUÖDA ');
READLN(NUM_CONTA);
WRITE('DIGITE O NéMERO DO CLIENTE DA CONTA ');
READLN(NUM_CLIENTE);
WRITE('DIGITE O SALDO ');
READLN(SALDO);
ACHOU:=FALSE;
WHILE NOT EOF(CLI) DO
BEGIN
READ(CLI,CL);
IF (CL.NUMERO = NUM_CLIENTE) AND (CL.ATIVO = 1)
THEN ACHOU:=TRUE;
END;
IF ACHOU = FALSE
THEN WRITELN('ESTE CLIENTE NÇO ESTµ CADASTRADO')
ELSE BEGIN
ACHOU:=FALSE;
IF K = 0
THEN BEGIN
CO.NUMERO_CONTA := NUM_CONTA;
CO.NUMERO_CLI := NUM_CLIENTE;
CO.SALDO:= SALDO;
CO.ATIVO:=1;
WRITE(CON,CO);
WRITELN('CONTA INCLUÖDA');
END
ELSE BEGIN
I := 0;
ACHOU := FALSE;
POSICAO := 0;
RESET(CON);
WHILE ( I <= (K-1)) DO
BEGIN
READ(CON, CO);
IF (CO.NUMERO_CONTA = NUM_CONTA) AND (CO.ATIVO = 1)
THEN BEGIN
ACHOU := TRUE;
I := K + 2;
END
ELSE BEGIN
IF NUM_CONTA < CO.NUMERO_CONTA
THEN BEGIN
POSICAO := FILEPOS(CON) - 1;
I := K + 2;
END
ELSE BEGIN
I := I+1;
SEEK(CON, I);
END;
END;
END;
IF ACHOU = TRUE
THEN WRITELN('JA EXISTE CONTA CADASTRADA COM ESTE NUMERO ')
ELSE BEGIN
IF I = FILESIZE(CON)
THEN BEGIN
SEEK(CON, FILESIZE(CON));
CO.NUMERO_CONTA := NUM_CONTA;
CO.NUMERO_CLI := NUM_CLIENTE;
CO.SALDO:= SALDO;
CO.ATIVO:=1;
WRITE(CON, CO);
WRITELN('CONTA INCLUÖDA');
END
ELSE BEGIN
P := FILESIZE(CON) - 1;
WHILE P >= POSICAO DO
BEGIN
SEEK(CON,P);
READ(CON,CO);
WRITE(CON,CO);
P := P - 1 ;
END;
SEEK(CON, POSICAO);
CO.NUMERO_CONTA := NUM_CONTA;
CO.NUMERO_CLI := NUM_CLIENTE;
CO.SALDO:= SALDO;
CO.ATIVO:=1;
WRITE(CON, CO);
WRITELN('CONTA INCLUÖDA');
END;
END;
END;
END;
READLN;
CLOSE(CLI);
CLOSE(CON);
END.
Exemplo 4: Consultando o saldo de todas as contas de um cliente cadastrado
PROGRAM EXEMPLO;
USES CRT;
TYPE cliente = RECORD
numero : INTEGER;
nome : STRING[20];
ativo: INTEGER;
END;
clientes = FILE OF cliente;
TYPE conta = RECORD
numero_conta : INTEGER;
numero_cli : INTEGER;
saldo : REAL;
ativo: integer;
END;
contas = FILE OF conta;
VAR
com: contas;
co: conta;
cli: clientes;
cl: cliente;
K, I : INTEGER;
ACHOU : BOOLEAN;
NUM_CLIENTE: INTEGER;
BEGIN
CLRSCR;
ASSIGN(COM, 'C:CONTAS.DAT');
RESET(COM);
ASSIGN(CLI,'C:CLIENTES.DAT');
RESET(CLI);
K := FILESIZE(COM);
WRITE('DIGITE O NéMERO DO CLIENTE DA CONTA ');
READLN(NUM_CLIENTE);
ACHOU:=FALSE;
WHILE NOT EOF(CLI) DO
BEGIN
READ(CLI,CL);
IF (CL.NUMERO = NUM_CLIENTE) AND (CL.ATIVO = 1)
THEN ACHOU:=TRUE;
END;
IF ACHOU = FALSE
THEN WRITELN('ESTE CLIENTE NÇO ESTµ CADASTRADO')
ELSE BEGIN
ACHOU:=FALSE;
WHILE NOT EOF(COM) DO
BEGIN
READ(COM,CO);
IF (CO.NUMERO_CLI = NUM_CLIENTE) AND (CO.ATIVO = 1)
THEN BEGIN
ACHOU:=TRUE;
WRITELN('CONTA ',CO.NUMERO_CONTA,' = ',CO.SALDO:5:2);
END;
END;
IF ACHOU = FALSE
THEN WRITELN('NÇO EXISTE CONTA CASTRADA PARA ESTE CLIENTE');
END;
READLN;
CLOSE(CLI);
CLOSE(COM);
END.
Exemplo 5: Atualizando o saldo de um cliente a partir de um depósito
PROGRAM EXEMPLO;
USES CRT;
TYPE conta = RECORD
numero_conta : INTEGER;
numero_cli : INTEGER;
saldo : REAL;
ativo: INTEGER;
END;
contas = FILE OF conta;
VAR
con: contas;
co: conta;
K, I : INTEGER;
ACHOU : BOOLEAN;
NUM_CONTA: INTEGER;
VALOR: REAL;
BEGIN
CLRSCR;
ASSIGN(CON, 'C:CONTAS.DAT');
{$I-}
RESET(CON);
{$I+}
IF IORESULT = 2
THEN REWRITE(CON);
K := FILESIZE(CON);
WRITE('DIGITE O NéMERO DA CONTA QUE SOFRERµ O DEPàSITO ');
READLN(NUM_CONTA);
ACHOU:=FALSE;
WHILE NOT EOF(CON) DO
BEGIN
READ(CON,CO);
IF (CO.NUMERO_CONTA = NUM_CONTA) AND (CO.ATIVO = 1)
THEN BEGIN
ACHOU:=TRUE;
SEEK(CON,FILEPOS(CON)-1);
WRITELN('SALDO ATUAL DA CONTA: ', CO.SALDO:7:2);
WRITE('DIGITE O VALOR DO DEPàSITO ');
READLN(VALOR);
CO.SALDO:= CO.SALDO + VALOR;
WRITE(CON,CO);
SEEK(CON,FILEPOS(CON)+1);
WRITELN('DEPàSITO EFETUADO COM SUCESSO');
END;
END;
IF ACHOU = FALSE
THEN WRITELN('ESTA CONTA NÇO ESTµ CADASTRADA');
CLOSE(CON);
READLN;
END.
Exemplo 6: Atualizando o saldo de um cliente a partir de um saque
PROGRAM EXEMPLO;
USES CRT;
TYPE conta = RECORD
numero_conta : INTEGER;
numero_cli : INTEGER;
saldo : REAL;
ativo: INTEGER;
END;
contas = FILE OF conta;
VAR
con: contas;
co: conta;
K, I : INTEGER;
ACHOU : BOOLEAN;
NUM_CONTA: INTEGER;
VALOR: REAL;
BEGIN
CLRSCR;
ASSIGN(CON, 'C:CONTAS.DAT');
{$I-}
RESET(CON);
{$I+}
IF IORESULT = 2 THEN
REWRITE(CON);
K := FILESIZE(CON);
WRITE('DIGITE O NéMERO DA CONTA QUE SOFRERµ O SAQUE ');
READLN(NUM_CONTA);
ACHOU:=FALSE;
WHILE NOT EOF(CON) DO
BEGIN
READ(CON,CO);
IF (CO.NUMERO_CONTA = NUM_CONTA) AND (CO.ATIVO = 1)
THEN BEGIN
ACHOU:=TRUE;
SEEK(CON,FILEPOS(CON)-1);
WRITELN('SALDO ATUAL DA CONTA: ', CO.SALDO:7:2);
WRITE('DIGITE O VALOR DO SAQUE ');
READLN(VALOR);
CO.SALDO:= CO.SALDO - VALOR;
WRITE(CON,CO);
SEEK(CON,FILEPOS(CON)+1);
WRITELN('SAQUE EFETUADO COM SUCESSO');
END;
END;
IF ACHOU = FALSE
THEN WRITELN('ESTA CONTA NÇO ESTµ CADASTRADA');
CLOSE(CON);
READLN;
END.
2.3. Exercícios
Faça um programa em pascal que:
1. Crie um arquivo chamado ALUNOS.DAT, no qual cada registro será composto pelos seguintes
campos: número, nome, curso, nota1, nota2, media.
2. Permita incluir 10 alunos no arquivo criado, lembrando que não podem existir dois alunos com o
mesmo número.
3. Permita alterar todas as notas dos alunos.
4. Permita alterar uma nota especifica de um aluno especifico.
5. Permita alterar o curso de todos os alunos.
6. Permita alterar o curso de um aluno especifico.
7. Permita excluir todos os alunos.
8. Permita excluir apenas um aluno especifico.
9. Permita buscar por um nome de aluno especifico.
10. Permita emitir um relatório completo da ficha de um aluno especifico.
11. Permita emitir um relatório completo de todos os alunos.
12. Permita emitir um relatório com os nomes de todos os alunos reprovados (média menor que 7)
13. Permita emitir um relatório com os nomes de todos os alunos aprovados (média maior ou igual a
7).
Para o desenvolvimento deste exercício use todos os recursos aprendidos: units, procedures,
functions, swtch/case, etc.
INSERINDO ALUNOS USANDO PROCEDURES
PROGRAM EXEMPLO;
USES CRT,WINCRT;
TYPE aluno = RECORD
numero : INTEGER;
nome : STRING[255];
nota1, nota2, media : REAL;
ativo: INTEGER;
END;
alunos = FILE OF aluno; //variável do tipo regitro cliente
VAR
alu: alunos;
al: aluno;
k, i, p, posicao, numero: INTEGER;
achou : BOOLEAN;
nome: STRING[255];
nota1, nota2, media: REAL;
PROCEDURE INSERIRALUNO();
begin
ASSIGN(alu, 'C:Userselaine.gattoDocumentsalunos2.txt');
{$I-}
{comando utilizado para abrir arquivos já criados
abre o arquivo ALU que já foi criado por ASSIGN }
RESET(alu);
{$I+}
if(IORESULT = 2) then
REWRITE(alu);
k := FILESIZE(alu); //k tem o tamanho do arquivo
WRITELN(' Digite o numero do aluno a ser incluido ');
READLN(numero);
{se o tamanho do arquivo for igual a zero, então o arquivo está vazio}
if(K=0)then
begin
WRITELN(' Digite o numero do aluno a ser incluido ');
READLN(numero);
WRITELN(' Digite o nome do aluno a ser incluido ');
READLN(nome);
WRITELN(' Digite a primeira nota a ser incluido ');
READLN(nota1);
WRITELN(' Digite a segunda nota a ser incluido ');
READLN(nota1);
al.numero := numero;
al.nome := nome;
al.nota1 := nota1;
al.nota2 := nota2;
al.media := (nota1+nota2)/2;
al.ativo := 1; //indica que este número de registro existe no arquivo
WRITE(alu, al);
WRITELN(' Aluno incuido com sucesso ');
end
{se o tamanho do arquivo for diferente de zero, então o arquivo não está
vazio - cuidado para não apagar o que já existe!}
else begin
i := 0;
achou := false; //seta a variavel auxiliar ACHOU como falsa
posicao := 0;
RESET(alu); //abre o arquivo existente
//enquanto i menor que o tamanho do arquivo - 1
while( i <= (k-1))do
begin
//faz a leitura dos dados do arquivo
READ(alu, al);
{ se o número digitado for igual ao número do registro
e se ativo for igual a 1, então registro existe}
if((al.numero = numero) AND (al.ativo = 1)) then
begin
achou := true; //encontrou o registro!!! seta como verdadeiro
i := k + 2;
end
else begin
{se o numero digitado for menor que o número do registro}
if(numero<al.numero) then
begin
{retorna o número do registro onde o ponteiro está localizado
seta a posicao do ponteiro para a posição atual}
posicao := FILEPOS(alu)-1;
i := k + 2;
end
else begin
i := i + 1;
SEEK(alu,i); //posiciona o ponteiro no registro desejado
end;
end;
end;
{ se achou for verdadeiro, então o número do aluno já está cadastrado
no arquivo, assim sendo, você não pode permitir que dois número iguais
sejam gravados para alunos diferentes }
IF achou = true THEN
WRITELN(' Já existe um aluno cadastrado com esse número ')
{ se achou for falso, então, significa que o número que será cadastrado
é diferente!}
ELSE BEGIN
IF(i = FILESIZE(alu))THEN
BEGIN
WRITELN(' Digite o numero do aluno a ser incluído ');
READLN(nome);
SEEK(alu, FILESIZE(alu));
WRITELN(' Digite o numero do aluno a ser incluido ');
READLN(numero);
WRITELN(' Digite o nome do aluno a ser incluido ');
READLN(nome);
WRITELN(' Digite a primeira nota a ser incluido ');
READLN(nota1);
WRITELN(' Digite a segunda nota a ser incluido ');
READLN(nota1);
al.numero := numero;
al.nome := nome;
al.nota1 := nota1;
al.nota2 := nota2;
al.media := (nota1+nota2)/2;
al.ativo := 1; //indica que este número de registro existe no arquivo
WRITE(alu, al);
WRITELN(' Aluno incluido com sucesso ');
END
ELSE BEGIN
p := FILESIZE(alu) - 1;
WHILE(p >= posicao) DO
BEGIN
SEEK(alu,p);
READ(alu,al);
WRITE(alu,al);
p := p - 1 ;
END;
SEEK(alu, posicao);
WRITELN(' Digite o numero do aluno a ser incluido ');
READLN(numero);
WRITELN(' Digite o nome do aluno a ser incluido ');
READLN(nome);
WRITELN(' Digite a primeira nota a ser incluido ');
READLN(nota1);
WRITELN(' Digite a segunda nota a ser incluido ');
READLN(nota1);
al.numero := numero;
al.nome := nome;
al.nota1 := nota1;
al.nota2 := nota2;
al.media := (nota1+nota2)/2;
al.ativo := 1; //indica que este número de registro existe no arquivo
WRITE(alu, al);
WRITELN(' Aluno incluido com sucesso ');
END;
END;
END;
READLN; //pula linha
CLOSE(alu); //fecha o arquivo
end;
BEGIN
CLRSCR; //limpa a tela
INSERIRALUNO();
END.

Mais conteúdo relacionado

Mais procurados

Java vetores e matrizes
Java   vetores e matrizesJava   vetores e matrizes
Java vetores e matrizes
Armando Daniel
 

Mais procurados (20)

Python Notes.pdf
Python Notes.pdfPython Notes.pdf
Python Notes.pdf
 
Exercicios resolvidos visu alg vetores
Exercicios resolvidos visu alg vetoresExercicios resolvidos visu alg vetores
Exercicios resolvidos visu alg vetores
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Exercicios Vetores (Arrays) - Estruturas de dados e algoritmos com Java
Exercicios Vetores (Arrays) - Estruturas de dados e algoritmos com JavaExercicios Vetores (Arrays) - Estruturas de dados e algoritmos com Java
Exercicios Vetores (Arrays) - Estruturas de dados e algoritmos com Java
 
Java vetores e matrizes
Java   vetores e matrizesJava   vetores e matrizes
Java vetores e matrizes
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
 
Algoritmos e Programação: Matrizes
Algoritmos e Programação: MatrizesAlgoritmos e Programação: Matrizes
Algoritmos e Programação: Matrizes
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Python - Dicionários
Python - DicionáriosPython - Dicionários
Python - Dicionários
 
Estrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memóriaEstrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memória
 
Java generics
Java genericsJava generics
Java generics
 
01 php - introdução ao php
01   php - introdução ao php01   php - introdução ao php
01 php - introdução ao php
 
Introdução ao HTML e CSS
Introdução ao HTML e CSSIntrodução ao HTML e CSS
Introdução ao HTML e CSS
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 
Exercicios resolvidos visuAlg
Exercicios resolvidos visuAlgExercicios resolvidos visuAlg
Exercicios resolvidos visuAlg
 
Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1
 

Semelhante a Tutorial pascal arquivos

Trabalhando na Linha de comando
Trabalhando na  Linha de comandoTrabalhando na  Linha de comando
Trabalhando na Linha de comando
SoftD Abreu
 
O Que é shell - bash
O Que é shell - bashO Que é shell - bash
O Que é shell - bash
Sérgio Silva
 
Criação e configuração de base de dados
Criação e configuração de base de dadosCriação e configuração de base de dados
Criação e configuração de base de dados
Portal_do_Estudante_SQL
 

Semelhante a Tutorial pascal arquivos (20)

Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
Tutorial dev cpp   002 - criação, leitura e alteração de arquivosTutorial dev cpp   002 - criação, leitura e alteração de arquivos
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
 
Apresentação Oracle SGBD
Apresentação Oracle SGBDApresentação Oracle SGBD
Apresentação Oracle SGBD
 
Trabalhando na Linha de comando
Trabalhando na  Linha de comandoTrabalhando na  Linha de comando
Trabalhando na Linha de comando
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
 
Arquivos
ArquivosArquivos
Arquivos
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1
 
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
Apostila aed
Apostila aedApostila aed
Apostila aed
 
Linguagem C 10 Arquivos
Linguagem C 10 ArquivosLinguagem C 10 Arquivos
Linguagem C 10 Arquivos
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Arquivos em C
Arquivos em CArquivos em C
Arquivos em C
 
O Que é shell - bash
O Que é shell - bashO Que é shell - bash
O Que é shell - bash
 
PowerShell
PowerShellPowerShell
PowerShell
 
Criação e configuração de base de dados
Criação e configuração de base de dadosCriação e configuração de base de dados
Criação e configuração de base de dados
 
Aula1
Aula1Aula1
Aula1
 
Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05
 
Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Apostila ph pwamp_parte5
Apostila ph pwamp_parte5
 
Banco de Dados II - Unimep/Pronatec - Aula 6
Banco de Dados II - Unimep/Pronatec - Aula 6Banco de Dados II - Unimep/Pronatec - Aula 6
Banco de Dados II - Unimep/Pronatec - Aula 6
 

Mais de Elaine Cecília Gatto

Mais de Elaine Cecília Gatto (20)

A influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etariaA influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etaria
 
Inteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à MedicinaInteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à Medicina
 
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
 
Apresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPCApresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPC
 
entrevista r7.pdf
entrevista r7.pdfentrevista r7.pdf
entrevista r7.pdf
 
Como a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptxComo a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptx
 
Empoderamento Feminino
Empoderamento FemininoEmpoderamento Feminino
Empoderamento Feminino
 
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
 
Community Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCarCommunity Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCar
 
Classificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de CorrelaçõesClassificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de Correlações
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
 
Community Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label ClassificationCommunity Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label Classification
 
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdfMulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
 
Curtinhas de sábado.pdf
Curtinhas de sábado.pdfCurtinhas de sábado.pdf
Curtinhas de sábado.pdf
 
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
 
Pipeline desdobramento escalonamento
Pipeline desdobramento escalonamentoPipeline desdobramento escalonamento
Pipeline desdobramento escalonamento
 
Cheat sheet Mips 32 bits
Cheat sheet Mips 32 bitsCheat sheet Mips 32 bits
Cheat sheet Mips 32 bits
 
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bitsResumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
 
Como descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcaçãoComo descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcação
 

Último

A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
PatriciaCaetano18
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
azulassessoria9
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
tatianehilda
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
azulassessoria9
 
QUIZ ensino fundamental 8º ano revisão geral
QUIZ ensino fundamental 8º ano revisão geralQUIZ ensino fundamental 8º ano revisão geral
QUIZ ensino fundamental 8º ano revisão geral
AntonioVieira539017
 
Artigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.pptArtigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.ppt
RogrioGonalves41
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfatividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
Autonoma
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
sh5kpmr7w7
 

Último (20)

Cópia de AULA 2- ENSINO FUNDAMENTAL ANOS INICIAIS - LÍNGUA PORTUGUESA.pptx
Cópia de AULA 2- ENSINO FUNDAMENTAL ANOS INICIAIS - LÍNGUA PORTUGUESA.pptxCópia de AULA 2- ENSINO FUNDAMENTAL ANOS INICIAIS - LÍNGUA PORTUGUESA.pptx
Cópia de AULA 2- ENSINO FUNDAMENTAL ANOS INICIAIS - LÍNGUA PORTUGUESA.pptx
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
classe gramatical Substantivo apresentação..pptx
classe gramatical Substantivo apresentação..pptxclasse gramatical Substantivo apresentação..pptx
classe gramatical Substantivo apresentação..pptx
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx
 
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdfAPRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
APRESENTAÇÃO - BEHAVIORISMO - TEORIA DA APRENDIZAGEM.pdf
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
A Revolução Francesa. Liberdade, Igualdade e Fraternidade são os direitos que...
 
QUIZ ensino fundamental 8º ano revisão geral
QUIZ ensino fundamental 8º ano revisão geralQUIZ ensino fundamental 8º ano revisão geral
QUIZ ensino fundamental 8º ano revisão geral
 
Artigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.pptArtigo Científico - Estrutura e Formatação.ppt
Artigo Científico - Estrutura e Formatação.ppt
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Educação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxEducação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptx
 
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfatividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
 

Tutorial pascal arquivos

  • 1. ARQUIVOS DISCIPLINA DE ALGORITMOS E ESTRUTURAS DE DADOS Prof.ª M.ª Eng.ª Elaine Cecília Gatto Bauru-SP 2015
  • 2. Sumário 1. ARQUIVOS...............................................................................................................................................3 1.1. Declaração de Arquivos......................................................................................................................3 1.1.1. Sintaxe .........................................................................................................................................3 1.1.2. Exemplo.......................................................................................................................................3 1.2. Associação de variáveis a arquivos ....................................................................................................3 1.3. Criação de novos arquivos..................................................................................................................4 1.4. Abrindo arquivos existentes ...............................................................................................................4 1.5. Fechando arquivos ..............................................................................................................................4 1.6. Lendo arquivos ...................................................................................................................................5 1.7. Gravando dados em um arquivos .......................................................................................................5 1.8. Movimentação do Ponteiro.................................................................................................................5 1.9. Tamanho do Arquivo..........................................................................................................................5 2.0. Posição do ponteiro.............................................................................................................................5 2.1. Verificação do fim de arquivo ............................................................................................................6 2.2. Exemplos ............................................................................................................................................6 Exemplo 1..............................................................................................................................................6 Exemplo 2: Incluindo clientes no arquivo criado ..................................................................................7 Passo 3: Inclua contas para os clientes cadastrados no arquivo criado .................................................9 Exemplo 4: Consultando o saldo de todas as contas de um cliente cadastrado...................................12 Exemplo 5: Atualizando o saldo de um cliente a partir de um depósito .............................................13 Exemplo 6: Atualizando o saldo de um cliente a partir de um saque ..................................................14 2.3. Exercícios .........................................................................................................................................16
  • 3. 1. ARQUIVOS 1.1. Declaração de Arquivos 1.1.1. Sintaxe TYPE nome_do_registro = RECORD nome_do_campo_1: tipo_do_dado; nome_do_campo_2: tipo_do_dado; nome_do_campo_3: 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; 1.1.2. Exemplo Exemplo 1: TYPE registro = RECORD nome : string[30]; endereco : string[20]; telephone : string[10]; END; arquivo = FILE OF registro; VAR agenda : arquivo; reg : registro; Exemplo 2: TYPE carro = RECORD placa : string[7]; marca : string[20]; ano : integer END; Frota = FILE OF carro; VAR Detran : frota; Carros : carro; 1.2. Associação de variáveis a arquivos ASSIGN: comando usado para associar nomes de arquivos FÍSICOS à variáveis de programa. Assim uma ligação é estabelecida entre a memória principal (RAM) e a memória secundária (HD). Sintaxe: ASSIGN (nome_da_variavel_do_tipo_arquivo, ‘caminho do arquivo no disco’);
  • 4. Exemplo 1: ASSIGN(agenda, ‘agenda.dat’); Exemplo 2: ASSIGN(detran, ‘c:exemploscarros.dat’); 1.3. Criação de novos arquivos REWRITE: comando utilizado para criar um novo arquivo. Posiciona o ponteiro no primeiro registro do arquivo quando utilizado. Existem duas condições: a) arquivo já existente: se o camando REWRITE for utilizado para fazer referencia a um arquivo que já exista em seu HD, todos os dados que estão armazenados nesse arquivo serão DESTRUÍDOS. b) Arquivo não existente: força a criação do arquivo. Sintaxe: REWRITE(nome_da_variável_do_tipo_arquivo); Exemplo 1: REWRITE(detran); Exemplo 2: REWRITE(agenda); 1.4. Abrindo arquivos existentes RESET: comando utilizado para abrir arquivos já criados. O ponteiro deve ser posicionado no primeiro registro, sem destruir os dados já existentes no arquivo. Sintaxe: RESET(nome_da_variável_do_tipo_arquivo); Exemplo 1: RESET(detran); Exemplo 2: RESET(agenda); 1.5. Fechando arquivos CLOSE: comando utilizado para fechar arquivos abertos pelo comando REWRITE ou RESET. Todas as alterações feitas em um arquivo só serão efetivamente realizadas quando o mesmo for fechado. Sintaxe: CLOSE(nome_da_variável_do_tipo_arquivo); Exemplo 1: CLOSE(detran); Exemplo 2: CLOSE(agenda);
  • 5. 1.6. Lendo arquivos READ: comando utilizado para ler arquivos. Uma leitura em disco deve ser executada para ler os dados contidos em um arquivo. Sintaxe: READ(nome_da_variável_do_tipo_arquivo, nome_da_variavel_do_tipo_registro); Exemplo 1: READ(detran, carros); Exemplo 2: READ(agenda, reg); 1.7. Gravando dados em um arquivos WRITE: comando utilizado para gravar dados em arquivos. Sintaxe: WRITE(nome_da_variável_do_tipo_arquivo, nome_da_variavel_do_tipo_registro); Exemplo 1: WRITE(detran, carros); Exemplo 2: WRITE(agenda, reg); 1.8. Movimentação do Ponteiro SEEK: posiciona o ponteiro no registro desejado. O primeiro registro do arquivo é sempre o número zero. Sintaxe: SEEK(nome_da_variável_do_tipo_arquivo, numero_do_registro); Exemplo 1: SEEK(detran, 0); Exemplo 2: SEEK(agenda, 0); 1.9. Tamanho do Arquivo FILEZISE: retorna o número de registros existentes em um arquivo. Sintaxe: FILEZISE(nome_da_variável_do_tipo_arquivo); Exemplo 1: int tamanho := FILEZISE(agenda); Exemplo 2: int tamanho := FILEZISE(detran); 2.0. Posição do ponteiro FILEPOS: retorna o número do registro onde o ponteiro está localizado.
  • 6. Sintaxe: int posicao := FILEPOS(nome_da_variavel_do_tipo_arquivo); Exemplo 1: int posicao := FILEPOS(agenda); Exemplo 2: int posicao := FILEPOS(detran); 2.1. Verificação do fim de arquivo NOT EOF: verifica se o ponteiro chegou ao final do arquivo. Retorno desta função: a) Verdadeiro: se o final do arquivo foi encontrado b) Falso: se o final do arquivo não foi encontrado Sintaxe: WHILE NOT EOF (nome_da_variavel_do_tipo_arquivo) DO BEGIN Comandos; END; Exemplo 1: WHILE NOT EOF (detran) DO BEGIN READ(detran, carros); END; Exemplo 2: WHILE NOT EOF (agenda) DO BEGIN READ(agenda, reg); END; 2.2. Exemplos Exemplo 1 Criando dois arquivos, um para armazenar dados de clientes e, outro, para armazenar dados da conta bancária desses clientes, conforme ilustram as tabelas abaixo. Clientes Conta Bancaria Numero do cliente Número da conta Nome do cliente Número do cliente Saldo PROGRAM EXEMPLO; USES CRT; TYPE cliente = RECORD numero : INTEGER; nome : STRING[20]; ativo: INTEGER; END;
  • 7. clientes = FILE OF cliente; TYPE conta = RECORD numero_conta : INTEGER; numero_cli : INTEGER; saldo : REAL; ativo: INTEGER; END; contas = FILE OF conta; VAR cli: clientes; cl: cliente; com: contas; co: conta; BEGIN CLRSCR; ASSIGN(CLI, 'C:CLIENTES.DAT'); REWRITE(CLI); CLOSE(CLI); WRITELN('ARQUIVO DE CLIENTES CRIADO COM SUCESSO '); ASSIGN(COM, 'C:CONTAS.DAT'); REWRITE(COM); CLOSE(COM); WRITELN('ARQUIVO DE CONTAS CRIADO COM SUCESSO '); READLN; END. Exemplo 2: Incluindo clientes no arquivo criado PROGRAM EXEMPLO; USES CRT; TYPE cliente = RECORD numero, ativo : INTEGER; nome : STRING[20]; END; clientes = FILE OF cliente; VAR cli: clientes; cl: cliente; K, I, P, POSICAO: INTEGER; ACHOU : BOOLEAN; NUMERO: INTEGER; NOME: STRING[20]; BEGIN
  • 8. CLRSCR; ASSIGN(CLI, 'C:CLIENTES.DAT'); {$I-} RESET(CLI); {$I+} IF IORESULT = 2 THEN REWRITE(CLI); K := FILESIZE(CLI); WRITE('DIGITE O NéMERO DO CLIENTE A SER INCLUÖDO '); READLN(NUMERO); IF K = 0 THEN BEGIN WRITE('DIGITE O NOME DO CLIENTE A SER INCLUÖDO '); READLN(NOME); CL.NUMERO := NUMERO; CL.NOME := NOME; CL.ATIVO := 1; WRITE(CLI, CL); WRITELN('CLIENTE INCLUÖDO'); END ELSE BEGIN I := 0; ACHOU := FALSE; POSICAO := 0; RESET(CLI); WHILE ( I <= (K-1)) DO BEGIN READ(CLI, CL); IF (CL.NUMERO = NUMERO) AND (CL.ATIVO = 1) THEN BEGIN ACHOU := TRUE; I := K + 2; END ELSE BEGIN IF NUMERO < CL.NUMERO THEN BEGIN POSICAO := FILEPOS(CLI) - 1; I := K + 2; END ELSE BEGIN I := I+1; SEEK(CLI, I); END; END; END; IF ACHOU = TRUE THEN WRITELN('JA EXISTE CLIENTE CADASTRADO COM ESTE CODIGO ') ELSE BEGIN
  • 9. IF I = FILESIZE(CLI) THEN BEGIN WRITE('DIGITE O NOME DO CLIENTE A SER INCLUÖDO '); READLN(NOME); SEEK(CLI, FILESIZE(CLI)); CL.NUMERO := NUMERO; CL.NOME := NOME; CL.ATIVO := 1; WRITE(CLI, CL); WRITELN('CLIENTE INCLUÖDO'); END ELSE BEGIN P := FILESIZE(CLI) - 1; WHILE P >= POSICAO DO BEGIN SEEK(CLI,P); READ(CLI,CL); WRITE(CLI,CL); P := P - 1 ; END; SEEK(CLI, POSICAO); WRITE('DIGITE O NOME DO CLIENTE A SER INCLUÖDO '); READLN(NOME); CL.NUMERO := NUMERO; CL.NOME := NOME; CL.ATIVO := 1; WRITE(CLI, CL); WRITELN('CLIENTE INCLUÖDO'); END; END; END; READLN; CLOSE(CLI); END. Passo 3: Inclua contas para os clientes cadastrados no arquivo criado PROGRAM EXEMPLO; USES CRT; TYPE cliente = RECORD numero : INTEGER; nome : STRING[20]; ativo: INTEGER; END; clientes = FILE OF cliente; TYPE conta = RECORD numero_conta : INTEGER;
  • 10. numero_cli : INTEGER; saldo : REAL; ativo: INTEGER; END; contas = FILE OF conta; VAR con: contas; co: conta; cli: clientes; cl: cliente; K, I, P, POSICAO : INTEGER; ACHOU : BOOLEAN; NUM_CONTA, NUM_CLIENTE: INTEGER; SALDO: REAL; BEGIN CLRSCR; ASSIGN(CON, 'C:CONTAS.DAT'); {$I-} RESET(CON); {$I+} IF IORESULT = 2 THEN REWRITE(CON); ASSIGN(CLI, 'C:CLIENTES.DAT'); {$I-} RESET(CLI); {$I+} IF IORESULT = 2 THEN REWRITE(CLI); K := FILESIZE(CON); WRITE('DIGITE O NéMERO DA CONTA A SER INCLUÖDA '); READLN(NUM_CONTA); WRITE('DIGITE O NéMERO DO CLIENTE DA CONTA '); READLN(NUM_CLIENTE); WRITE('DIGITE O SALDO '); READLN(SALDO); ACHOU:=FALSE; WHILE NOT EOF(CLI) DO BEGIN READ(CLI,CL); IF (CL.NUMERO = NUM_CLIENTE) AND (CL.ATIVO = 1) THEN ACHOU:=TRUE; END; IF ACHOU = FALSE THEN WRITELN('ESTE CLIENTE NÇO ESTµ CADASTRADO') ELSE BEGIN
  • 11. ACHOU:=FALSE; IF K = 0 THEN BEGIN CO.NUMERO_CONTA := NUM_CONTA; CO.NUMERO_CLI := NUM_CLIENTE; CO.SALDO:= SALDO; CO.ATIVO:=1; WRITE(CON,CO); WRITELN('CONTA INCLUÖDA'); END ELSE BEGIN I := 0; ACHOU := FALSE; POSICAO := 0; RESET(CON); WHILE ( I <= (K-1)) DO BEGIN READ(CON, CO); IF (CO.NUMERO_CONTA = NUM_CONTA) AND (CO.ATIVO = 1) THEN BEGIN ACHOU := TRUE; I := K + 2; END ELSE BEGIN IF NUM_CONTA < CO.NUMERO_CONTA THEN BEGIN POSICAO := FILEPOS(CON) - 1; I := K + 2; END ELSE BEGIN I := I+1; SEEK(CON, I); END; END; END; IF ACHOU = TRUE THEN WRITELN('JA EXISTE CONTA CADASTRADA COM ESTE NUMERO ') ELSE BEGIN IF I = FILESIZE(CON) THEN BEGIN SEEK(CON, FILESIZE(CON)); CO.NUMERO_CONTA := NUM_CONTA; CO.NUMERO_CLI := NUM_CLIENTE; CO.SALDO:= SALDO; CO.ATIVO:=1; WRITE(CON, CO); WRITELN('CONTA INCLUÖDA'); END ELSE BEGIN
  • 12. P := FILESIZE(CON) - 1; WHILE P >= POSICAO DO BEGIN SEEK(CON,P); READ(CON,CO); WRITE(CON,CO); P := P - 1 ; END; SEEK(CON, POSICAO); CO.NUMERO_CONTA := NUM_CONTA; CO.NUMERO_CLI := NUM_CLIENTE; CO.SALDO:= SALDO; CO.ATIVO:=1; WRITE(CON, CO); WRITELN('CONTA INCLUÖDA'); END; END; END; END; READLN; CLOSE(CLI); CLOSE(CON); END. Exemplo 4: Consultando o saldo de todas as contas de um cliente cadastrado PROGRAM EXEMPLO; USES CRT; TYPE cliente = RECORD numero : INTEGER; nome : STRING[20]; ativo: INTEGER; END; clientes = FILE OF cliente; TYPE conta = RECORD numero_conta : INTEGER; numero_cli : INTEGER; saldo : REAL; ativo: integer; END; contas = FILE OF conta; VAR com: contas; co: conta; cli: clientes; cl: cliente;
  • 13. K, I : INTEGER; ACHOU : BOOLEAN; NUM_CLIENTE: INTEGER; BEGIN CLRSCR; ASSIGN(COM, 'C:CONTAS.DAT'); RESET(COM); ASSIGN(CLI,'C:CLIENTES.DAT'); RESET(CLI); K := FILESIZE(COM); WRITE('DIGITE O NéMERO DO CLIENTE DA CONTA '); READLN(NUM_CLIENTE); ACHOU:=FALSE; WHILE NOT EOF(CLI) DO BEGIN READ(CLI,CL); IF (CL.NUMERO = NUM_CLIENTE) AND (CL.ATIVO = 1) THEN ACHOU:=TRUE; END; IF ACHOU = FALSE THEN WRITELN('ESTE CLIENTE NÇO ESTµ CADASTRADO') ELSE BEGIN ACHOU:=FALSE; WHILE NOT EOF(COM) DO BEGIN READ(COM,CO); IF (CO.NUMERO_CLI = NUM_CLIENTE) AND (CO.ATIVO = 1) THEN BEGIN ACHOU:=TRUE; WRITELN('CONTA ',CO.NUMERO_CONTA,' = ',CO.SALDO:5:2); END; END; IF ACHOU = FALSE THEN WRITELN('NÇO EXISTE CONTA CASTRADA PARA ESTE CLIENTE'); END; READLN; CLOSE(CLI); CLOSE(COM); END. Exemplo 5: Atualizando o saldo de um cliente a partir de um depósito PROGRAM EXEMPLO; USES CRT; TYPE conta = RECORD numero_conta : INTEGER; numero_cli : INTEGER; saldo : REAL; ativo: INTEGER;
  • 14. END; contas = FILE OF conta; VAR con: contas; co: conta; K, I : INTEGER; ACHOU : BOOLEAN; NUM_CONTA: INTEGER; VALOR: REAL; BEGIN CLRSCR; ASSIGN(CON, 'C:CONTAS.DAT'); {$I-} RESET(CON); {$I+} IF IORESULT = 2 THEN REWRITE(CON); K := FILESIZE(CON); WRITE('DIGITE O NéMERO DA CONTA QUE SOFRERµ O DEPàSITO '); READLN(NUM_CONTA); ACHOU:=FALSE; WHILE NOT EOF(CON) DO BEGIN READ(CON,CO); IF (CO.NUMERO_CONTA = NUM_CONTA) AND (CO.ATIVO = 1) THEN BEGIN ACHOU:=TRUE; SEEK(CON,FILEPOS(CON)-1); WRITELN('SALDO ATUAL DA CONTA: ', CO.SALDO:7:2); WRITE('DIGITE O VALOR DO DEPàSITO '); READLN(VALOR); CO.SALDO:= CO.SALDO + VALOR; WRITE(CON,CO); SEEK(CON,FILEPOS(CON)+1); WRITELN('DEPàSITO EFETUADO COM SUCESSO'); END; END; IF ACHOU = FALSE THEN WRITELN('ESTA CONTA NÇO ESTµ CADASTRADA'); CLOSE(CON); READLN; END. Exemplo 6: Atualizando o saldo de um cliente a partir de um saque PROGRAM EXEMPLO; USES CRT;
  • 15. TYPE conta = RECORD numero_conta : INTEGER; numero_cli : INTEGER; saldo : REAL; ativo: INTEGER; END; contas = FILE OF conta; VAR con: contas; co: conta; K, I : INTEGER; ACHOU : BOOLEAN; NUM_CONTA: INTEGER; VALOR: REAL; BEGIN CLRSCR; ASSIGN(CON, 'C:CONTAS.DAT'); {$I-} RESET(CON); {$I+} IF IORESULT = 2 THEN REWRITE(CON); K := FILESIZE(CON); WRITE('DIGITE O NéMERO DA CONTA QUE SOFRERµ O SAQUE '); READLN(NUM_CONTA); ACHOU:=FALSE; WHILE NOT EOF(CON) DO BEGIN READ(CON,CO); IF (CO.NUMERO_CONTA = NUM_CONTA) AND (CO.ATIVO = 1) THEN BEGIN ACHOU:=TRUE; SEEK(CON,FILEPOS(CON)-1); WRITELN('SALDO ATUAL DA CONTA: ', CO.SALDO:7:2); WRITE('DIGITE O VALOR DO SAQUE '); READLN(VALOR); CO.SALDO:= CO.SALDO - VALOR; WRITE(CON,CO); SEEK(CON,FILEPOS(CON)+1); WRITELN('SAQUE EFETUADO COM SUCESSO'); END; END; IF ACHOU = FALSE THEN WRITELN('ESTA CONTA NÇO ESTµ CADASTRADA'); CLOSE(CON); READLN;
  • 16. END. 2.3. Exercícios Faça um programa em pascal que: 1. Crie um arquivo chamado ALUNOS.DAT, no qual cada registro será composto pelos seguintes campos: número, nome, curso, nota1, nota2, media. 2. Permita incluir 10 alunos no arquivo criado, lembrando que não podem existir dois alunos com o mesmo número. 3. Permita alterar todas as notas dos alunos. 4. Permita alterar uma nota especifica de um aluno especifico. 5. Permita alterar o curso de todos os alunos. 6. Permita alterar o curso de um aluno especifico. 7. Permita excluir todos os alunos. 8. Permita excluir apenas um aluno especifico. 9. Permita buscar por um nome de aluno especifico. 10. Permita emitir um relatório completo da ficha de um aluno especifico. 11. Permita emitir um relatório completo de todos os alunos. 12. Permita emitir um relatório com os nomes de todos os alunos reprovados (média menor que 7) 13. Permita emitir um relatório com os nomes de todos os alunos aprovados (média maior ou igual a 7). Para o desenvolvimento deste exercício use todos os recursos aprendidos: units, procedures, functions, swtch/case, etc. INSERINDO ALUNOS USANDO PROCEDURES PROGRAM EXEMPLO; USES CRT,WINCRT; TYPE aluno = RECORD numero : INTEGER; nome : STRING[255]; nota1, nota2, media : REAL; ativo: INTEGER; END; alunos = FILE OF aluno; //variável do tipo regitro cliente VAR alu: alunos; al: aluno; k, i, p, posicao, numero: INTEGER;
  • 17. achou : BOOLEAN; nome: STRING[255]; nota1, nota2, media: REAL; PROCEDURE INSERIRALUNO(); begin ASSIGN(alu, 'C:Userselaine.gattoDocumentsalunos2.txt'); {$I-} {comando utilizado para abrir arquivos já criados abre o arquivo ALU que já foi criado por ASSIGN } RESET(alu); {$I+} if(IORESULT = 2) then REWRITE(alu); k := FILESIZE(alu); //k tem o tamanho do arquivo WRITELN(' Digite o numero do aluno a ser incluido '); READLN(numero); {se o tamanho do arquivo for igual a zero, então o arquivo está vazio} if(K=0)then begin WRITELN(' Digite o numero do aluno a ser incluido '); READLN(numero); WRITELN(' Digite o nome do aluno a ser incluido '); READLN(nome); WRITELN(' Digite a primeira nota a ser incluido '); READLN(nota1); WRITELN(' Digite a segunda nota a ser incluido '); READLN(nota1); al.numero := numero; al.nome := nome; al.nota1 := nota1; al.nota2 := nota2; al.media := (nota1+nota2)/2; al.ativo := 1; //indica que este número de registro existe no arquivo WRITE(alu, al); WRITELN(' Aluno incuido com sucesso '); end {se o tamanho do arquivo for diferente de zero, então o arquivo não está vazio - cuidado para não apagar o que já existe!} else begin i := 0; achou := false; //seta a variavel auxiliar ACHOU como falsa
  • 18. posicao := 0; RESET(alu); //abre o arquivo existente //enquanto i menor que o tamanho do arquivo - 1 while( i <= (k-1))do begin //faz a leitura dos dados do arquivo READ(alu, al); { se o número digitado for igual ao número do registro e se ativo for igual a 1, então registro existe} if((al.numero = numero) AND (al.ativo = 1)) then begin achou := true; //encontrou o registro!!! seta como verdadeiro i := k + 2; end else begin {se o numero digitado for menor que o número do registro} if(numero<al.numero) then begin {retorna o número do registro onde o ponteiro está localizado seta a posicao do ponteiro para a posição atual} posicao := FILEPOS(alu)-1; i := k + 2; end else begin i := i + 1; SEEK(alu,i); //posiciona o ponteiro no registro desejado end; end; end; { se achou for verdadeiro, então o número do aluno já está cadastrado no arquivo, assim sendo, você não pode permitir que dois número iguais sejam gravados para alunos diferentes } IF achou = true THEN WRITELN(' Já existe um aluno cadastrado com esse número ') { se achou for falso, então, significa que o número que será cadastrado é diferente!} ELSE BEGIN IF(i = FILESIZE(alu))THEN BEGIN WRITELN(' Digite o numero do aluno a ser incluído '); READLN(nome); SEEK(alu, FILESIZE(alu)); WRITELN(' Digite o numero do aluno a ser incluido '); READLN(numero); WRITELN(' Digite o nome do aluno a ser incluido '); READLN(nome);
  • 19. WRITELN(' Digite a primeira nota a ser incluido '); READLN(nota1); WRITELN(' Digite a segunda nota a ser incluido '); READLN(nota1); al.numero := numero; al.nome := nome; al.nota1 := nota1; al.nota2 := nota2; al.media := (nota1+nota2)/2; al.ativo := 1; //indica que este número de registro existe no arquivo WRITE(alu, al); WRITELN(' Aluno incluido com sucesso '); END ELSE BEGIN p := FILESIZE(alu) - 1; WHILE(p >= posicao) DO BEGIN SEEK(alu,p); READ(alu,al); WRITE(alu,al); p := p - 1 ; END; SEEK(alu, posicao); WRITELN(' Digite o numero do aluno a ser incluido '); READLN(numero); WRITELN(' Digite o nome do aluno a ser incluido '); READLN(nome); WRITELN(' Digite a primeira nota a ser incluido '); READLN(nota1); WRITELN(' Digite a segunda nota a ser incluido '); READLN(nota1); al.numero := numero; al.nome := nome; al.nota1 := nota1; al.nota2 := nota2; al.media := (nota1+nota2)/2; al.ativo := 1; //indica que este número de registro existe no arquivo WRITE(alu, al); WRITELN(' Aluno incluido com sucesso '); END; END; END; READLN; //pula linha CLOSE(alu); //fecha o arquivo end; BEGIN CLRSCR; //limpa a tela