Download - Arquivos e Registros
__Registros__Estrutrura de Dados Heterogêneas
Janeiro/2014
Introdução
• Conhecer uma estrutura de Dados Heterogênea, composição e aplicação.
ANTES: 2 tipos de dados ≠
2 matrizes ≠
2
…AGORA : - vários tipos de dados
- mesma estrutura
Registros
• Definição
• Registro Simples;
• Registro com Matrizes;
• Múltiplos Registros;
• Aplicação
3ICC
Flashback – Exemplo: ED Homogênea
4ICC
Carlos Flávia Pedro Joana Lucia
ICC PSC II Fisica II Fis Exp I Cálc III
7,50 8,00 7,30 8,25 7,00
Estrutura de dados HOMOGÊNEA.
Definição – Exemplo: ED Heterogênea
Consiste em trabalhar com vários dados de tipos diferentes (os campos) em uma mesma estrutura.
5ICC
Nome Carlos
Disciplina ICC
Nota1 7,50
Nota 2 8,25
Estrutura de dados HETEROGÊNEA.
1. Registros Simples
6ICC
Os tipos são declarados antes da definições dasvariáveis:.
type <identificador> = record
campo 1: tipo;
campo2:tipo;
...
campo(n):tipo;
end;
Var
<variável>:identificador
type CADASTRO = record
NOME:string;
NOTA1:real;
NOTA2:real
NOTA3:real
NOTA4:real;
end;
Var
ALUNO:CADASTRO
A entrada/saída de dados é feita com o nome da variável e de
seu campo correspondente separado por pontos. Ex: ALUNO.NOTA3
Exemplo 1:
Registros Simples
7ICC
Program REGISTRO_SIMPLES;
type CAD_ALUNO=record
NOME:string;
NOTA1:real;
NOTA2:real;
NOTA3:real;
NOTA4:real;
end;
var
ALUNO:CAD_ALUNO;
begin {entrada de dados}
writeln('Cadastro de Alunos');
write('informe o nome......:');readln(ALUNO.NOME);
write('informe a 1a. Nota..:');readln(ALUNO.NOTA1);
write('informe a 2a. Nota..:');readln(ALUNO.NOTA2);
write('informe a 3a. Nota..:');readln(ALUNO.NOTA3);
write('informe a 4a. Nota..:');readln(ALUNO.NOTA4);
writeln; {saída de dados}
writeln('----------------------------');
write('nome......:');writeln(ALUNO.NOME);
write('1a. Nota..:');writeln(ALUNO.NOTA1);
write('2a. Nota..:');writeln(ALUNO.NOTA2);
write('3a. Nota..:');writeln(ALUNO.NOTA3);
write('4a. Nota..:');writeln(ALUNO.NOTA4);
writeln('----------------------------');
readkey;
end.
Nome da variável do tipo registro
Nome do campo correspondente
2. Registros com Matrizes
8ICC
Definimos um dos campos como uma Matriz
Vetor (unidimensional ) para guardar um
mesmo tipo de dado:
Nome Carlos
Disciplina ICC
Notas
7,50
8,25
9,00
Estrutura de dados HETEROGÊNEA.
Exemplo 2:
Registros com Matrizes
Program REGISTRO_MATRIZ;
type CADASTRO = record
NOME:string;
NOTA:array[1..4] of real; {campo matriz}
end;
var
ALUNO:CADASTRO;
i: integer; {contador}
begin {entrada de dados}
writeln('Cadastro de Alunos');
write('informe o nome......:');
readln(ALUNO.NOME);
for i:=1 to 4 do
begin
write('informe a ');write(i:2);write('a. nota: ');
readln(ALUNO.NOTA[i]);
end;
writeln;
{saída de dados}
writeln('----------------------------');
write('nome......:');
writeln(ALUNO.NOME);
9ICC
for i:=1 to 4 do
begin
write(i:2);write('a. nota: ');
writeln(ALUNO.NOTA[i]);
end;
writeln('----------------------------');
readkey;
end.
Exemplo 3:
Múltiplos Registros
10
Program CLASSE;
type CADASTRO = record
NOME : string;
NOTA : array[1..4] of real;
end;
var
ALUNO : array [1..7] of CADASTRO; {conjunto de 7 registros}
i, c : integer;
begin {entrada de dados}
writeln('Cadastro de Alunos'); writeln;
for c:=1 to 7 do
begin
write('informe o nome......:');
readln(ALUNO[c].NOME);
for i:=1 to 4 do
begin
write('informe a ');write(i:2);write('a. nota: ');
readln(ALUNO[c].NOTA[i]);
end; writeln;
end;
begin {entrada de dados}
writeln('Cadastro de Alunos'); writeln;
for c:=1 to 7 do
begin
write('informe o nome......:');
readln(ALUNO[c].NOME);
for i:=1 to 4 do
begin
write('informe a ');write(i:2);write('a. nota: ');
readln(ALUNO[c].NOTA[i]);
end; writeln;
end;
Aplicação
11
Com as técnicas de programação aprendidas, somado a
utilização de dados heterogêneos, passa-se a ter uma
mobilidade de manipular um grande quantidade de informações.
Por exemplo: Elaborar um programa que Cadastre certo
número de alunos, contendo 04 notas de avaliação e no final
forneça o nome de cada aluno em ordem decrescente de
médias alcançadas no período
Aplicação
12ICC
Program APLICACAO;
type
CADASTRO = record
NOME:string;
SEXO:string;
NOTA:array[1..4] of real;
MEDIA:real;
end;
var
ALUNO : array [1..7] of CADASTRO;
i, c, maior, menor :integer;
X:CADASTRO;
soma , aux : real;
begin {entrada de dados}
writeln('Cadastro de Alunos');
writeln;
for c:=1 to 7 do
begin
write('informe o nome......:');readln(ALUNO[c].NOME);
write('informe o sexo......:');readln(ALUNO[c].SEXO);
soma:=0;
for i:=1 to 4 do
begin
write('informe a ');write(i:2);write('a. nota: ');
readln(ALUNO[c].NOTA[i]);
aux:=1*ALUNO[c].NOTA[i];
soma:=soma+aux;
end;
ALUNO[c].MEDIA:=SOMA/4;
writeln;
end;
for maior:=1 to 6 do {ordenação dos registros
pela média}
for menor:= maior+1 to 7 do
if
ALUNO[maior].MEDIA<ALUNO[menor].MEDIA
then
begin
X:=ALUNO[maior];
ALUNO[maior]:=ALUNO[menor];
ALUNO[menor]:=X;
end;
writeln('----------------------------'); {saída de
dados}
for c:=1 to 7 do
begin
write('nome do
aluno:');writeln(ALUNO[c].NOME);
write('sexo do
aluno:');writeln(ALUNO[c].SEXO);
write('média do
aluno:');writeln(ALUNO[c].MEDIA:2);
writeln; delay(500);
end;
writeln('----------------------------');
readkey;
end.
__Arquivos__
Janeiro/2014
Introdução
14
BASE : - matrizes
- registros
Definição:
É uma tabela de informações gravada em um meio físico
(disquetes, winchesters, fitas magnéticas, entre outros),
enquanto que as matrizes são tabelas manipuladas na
memória RAM
Diferença
• Matrizes: índice de controle
• Arquivos: um ponteiro de registro
PRINCIPAL VANTAGEM:
1) As informações armazenadas podem ser utilizadas a qualquer momento;
2) Armazena um número maior de registros do que em uma tabela de memória
(Limitação: tamanho do meio físico utilizado para a sua gravação);
15ICC
A manipulação de um arquivo usa o tipo file, que é uma estrutura formada por elementos do mesmo tipo, dispostos de forma sequencial, tendo como objetivo fazer a comunicação entre a memória principal (RAM) e a memória secundária (meios magnéticos).
SINTAXE:
type
<arquivo> = [text] [ file [ of <tipo>]];
var
<variável> : <arquivos>;
ou
<variável> = [text] [ file [ of <tipo>]];
Definição de Arquivo
16ICC
o nome de um arquivo com tipo
definido
o tipo de um arquivo (text, string, real,
record, …)
a variável que será usada para
representar o arquivo
Classificação dos Arquivos
- Arquivos de texto;
- Arquivos de tipo definido;
- Arquivos sem tipo definido
Obs: a exemplo dos tipos de dados…
17ICC
Operações Executadas em um Arquivo
COMUNS:
Abertura, leitura ou escrita e fechamento
18ICC
Instruções Apropriadas
19ICC
Criação de um Arquivo – Exemplo 1
program CRIA_ARQUIVO_TEXTO;varARQUIVO_TXT : text; //define para a variável indicada o tipo de arquivo texto
beginassign(ARQUIVO_TXT, 'ARQTXT.XXX');rewrite(ARQUIVO_TXT);close(ARQUIVO_TXT);
end.
Obs: antes de iniciar qualquer operação com arquivo, é necessário criá-lo.
20ICC
Arquivo a ser manipulado
Gravação de Informações em um Arquivo– Exemplo 2
program GRAVA_ARQUIVO_TEXTO;varARQUIVO_TXT : text;MENSAGEM : string[50];
beginassign(ARQUIVO_TXT, 'ARQTXT.XXX');append(ARQUIVO_TXT);//abre o arquivo p inclusao de um dado
read(MENSAGEM);write(ARQUIVO_TXT, MENSAGEM);close(ARQUIVO_TXT);
end.Obs: depois de criar o arquivo, ele pode ser utilizado para a gravação das informações que vai
guardar.21ICC
Escreve dado no arquivo
Leitura das Informações de um Arquivo –Exemplo 3
program LE_ARQUIVO_TEXTO;varARQUIVO_TXT : text;MENSAGEM : string[50];
beginassign(ARQUIVO_TXT, 'ARQTXT.XXX');reset(ARQUIVO_TXT);read(ARQUIVO_TXT, MENSAGEM);write(MENSAGEM);close(ARQUIVO_TXT);
end.Obs: o programa lê um arquivo texto e mostra no vídeo a informação armazenada com o
programa anterior.22ICC
Exemplo
O programa de agenda proposto deve solicitar apenas o nome e o telefone de uma pessoa.
O programa deve ter um menu com 4 opções:
- Criar arquivo;- Cadastrar registro;- Exibir registros;- Finalizar o programa.
23ICC
Exemplo
program AGENDATXT;usesCrt;
varARQTXT : text;NOME : string[40];TELEFONE : string[8];TECLA : char;OPCAO : char;
{*** Rotinas de Visualizacao ***}procedure CENTER(MENSAGEM : string);varTAMANHO : integer;
beginTAMANHO := 40 + length(MENSAGEM) div 2;writeln(MENSAGEM:TAMANHO);
end;
procedure WRITEXY(X, Y : byte; MENSAGEM : string);begingotoxy(X, Y); write(MENSAGEM);
end;
procedure LINE;varI : byte;
beginfor I := 1 to 80 dowrite(#205);
end;24ICC
{*** Rotinas de Manipulacao de Arquivos ***}
procedure ARQUIVO;
begin
clrscr;
line;
center('Criacao de Arquivo');
line;
rewrite(ARQTXT); //cria um arquivo para uso…
gotoxy( 1,12); center('Arquivo foi criado');
writexy(25,24,'Tecle algo para voltar ao menu');
TECLA := readkey;
close(ARQTXT);
end;
procedure CADASTRA;
begin
clrscr;
line;
center('Cadastramento de Registro');
line;
append(ARQTXT/);//abre o arquivo para inclusao de um dado
writexy(10, 5, 'Entre com o Nome ..........: '); readln(NOME);
writexy(10, 6, 'Entre com o Telefone ......: '); readln(TELEFONE);
writeln(ARQTXT, NOME);
writeln(ARQTXT, TELEFONE);
writexy(25,24,'Tecle algo para voltar ao menu');
TECLA := readkey;
close(ARQTXT);//fecha arquivo em uso dentro de um programa
End.
Exemplo
procedure EXIBIR;varLINHA : byte;
beginclrscr;line;center('Apresentacao de Registros');line;LINHA := 5;reset(ARQTXT);//abre um arquivo existente,
//colocando p leitura/escritawhile not eof(ARQTXT) do
//(eof) end of file - final do arquivobeginreadln(ARQTXT, NOME);readln(ARQTXT, TELEFONE);gotoxy( 5,LINHA); write(NOME);gotoxy(50,LINHA); write(TELEFONE);LINHA := LINHA + 1;
end;writexy(25,24,'Tecle algo para voltar ao menu'); TECLA := readkey;close(ARQTXT);
end;
25ICC
{*** Programa Principal ***}
begin
OPCAO := '0';
assign(ARQTXT,'AGENDTXT.DAT');
while (OPCAO <> '4') do
begin
clrscr;
line;
center('Menu Principal');
line;
gotoxy(28, 6); write('1 ........ Criar arquivo');
gotoxy(28, 8); write('2 ............ Cadastrar');
gotoxy(28,10); write('3 ..... Exibir registros');
gotoxy(28,12); write('4 ...... Fim de Programa');
gotoxy(28,16); write('Escolha uma opcao ....: ');
readln(OPCAO);
if (OPCAO <> '4') then
case OPCAO of
'1' : Arquivo;
'2' : Cadastra;
'3' : Exibir;
else
gotoxy(27,24); writeln('Opcao invalida - Tecle algo');
OPCAO := readkey;
end;
end;
end.