Você está na página 1de 25

__Registros__

Estrutrura de Dados Heterogneas

Janeiro/2014

Introduo
Conhecer uma estrutura de Dados
Heterognea, composio e aplicao.
ANTES:

AGORA :

2 tipos de dados
2 matrizes

- vrios tipos de dados


- mesma estrutura

Registros

Definio
Registro Simples;
Registro com Matrizes;
Mltiplos Registros;
Aplicao

ICC

Flashback Exemplo: ED Homognea

Carlos

Flvia

Pedro

Joana

Lucia

ICC

PSC II

Fisica II

Fis Exp I

Clc III

7,50

8,00

7,30

8,25

7,00

Estrutura de dados HOMOGNEA.


ICC

Definio Exemplo: ED Heterognea


Consiste em trabalhar com vrios dados de
tipos diferentes (os campos) em uma mesma
estrutura.
Nome

Carlos

Disciplina

ICC

Nota1

7,50

Nota 2

8,25

Estrutura de dados HETEROGNEA.


ICC

1. Registros Simples
Os tipos so declarados antes da definies das
variveis:.
type CADASTRO = record
NOME:string;
NOTA1:real;
NOTA2:real
NOTA3:real
NOTA4:real;
end;
Var
ALUNO:CADASTRO

type <identificador> = record


campo 1: tipo;
campo2:tipo;
...
campo(n):tipo;
end;
Var
<varivel>:identificador

A entrada/sada de dados feita com o nome da varivel e de


seu campo correspondente separado por pontos. Ex: ALUNO.NOTA3
ICC

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; {sada 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.
ICC

Exemplo 1:
Registros Simples
Nome da varivel do tipo registro
Nome do campo correspondente

2. Registros com Matrizes


Definimos um dos campos como uma Matriz
Vetor (unidimensional ) para guardar um
mesmo tipo de dado:
Nome

Carlos

Disciplina

ICC

7,50
8,25

Notas

9,00
Estrutura de dados HETEROGNEA.
ICC

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;
{sada de dados}
writeln('----------------------------');
write('nome......:');
writeln(ALUNO.NOME);

Exemplo 2:

Registros com Matrizes


for i:=1 to 4 do
begin
write(i:2);write('a. nota: ');
writeln(ALUNO.NOTA[i]);
end;
writeln('----------------------------');
readkey;
end.

ICC

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;

Exemplo 3:

Mltiplos Registros

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;

10

Aplicao
Com as tcnicas de programao aprendidas, somado a
utilizao de dados heterogneos, passa-se a ter uma
mobilidade de manipular um grande quantidade de informaes.

Por exemplo: Elaborar um programa que Cadastre certo


nmero de alunos, contendo 04 notas de avaliao e no final
fornea o nome de cada aluno em ordem decrescente de
mdias alcanadas no perodo

11

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;
ICC
end;

Aplicao
for maior:=1 to 6 do {ordenao dos registros
pela mdia}
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('----------------------------'); {sada 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('mdia do
aluno:');writeln(ALUNO[c].MEDIA:2);
writeln; delay(500);
end;
writeln('----------------------------');
readkey;
12
end.

__Arquivos__

Janeiro/2014

Introduo
BASE :
- matrizes
- registros
Definio:
uma tabela de informaes gravada em um meio fsico
(disquetes, winchesters, fitas magnticas, entre outros),
enquanto que as matrizes so tabelas manipuladas na
memria RAM
14

Diferena
Matrizes: ndice de controle
Arquivos: um ponteiro de registro

PRINCIPAL VANTAGEM:
1) As informaes armazenadas podem ser utilizadas a qualquer momento;
2) Armazena um nmero maior de registros do que em uma tabela de memria
(Limitao: tamanho do meio fsico utilizado para a sua gravao);

ICC

15

Definio de Arquivo
A manipulao 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 comunicao entre a memria principal (RAM) e a memria secundria
(meios magnticos).
o nome de um arquivo com tipo
definido

SINTAXE:
type
<arquivo> = [text] [ file [ of <tipo>]];

o tipo de um arquivo (text, string, real,


record, )

var
<varivel> : <arquivos>;
a varivel que ser usada para
representar o arquivo

ou
<varivel> = [text] [ file [ of <tipo>]];
ICC

16

Classificao dos Arquivos


- Arquivos de texto;
- Arquivos de tipo definido;
- Arquivos sem tipo definido

Obs: a exemplo dos tipos de dados

ICC

17

Operaes Executadas em um Arquivo


COMUNS:
Abertura, leitura ou escrita e fechamento

ICC

18

Instrues Apropriadas

ICC

19

Criao de um Arquivo Exemplo 1


program CRIA_ARQUIVO_TEXTO;
var
ARQUIVO_TXT : text; //define para a varivel indicada o tipo de arquivo texto
begin
assign(ARQUIVO_TXT, 'ARQTXT.XXX');
rewrite(ARQUIVO_TXT);
Arquivo a ser manipulado
close(ARQUIVO_TXT);
end.
Obs: antes de iniciar qualquer operao com arquivo, necessrio cri-lo.

ICC

20

Gravao de Informaes em um Arquivo


Exemplo 2
program GRAVA_ARQUIVO_TEXTO;
var
ARQUIVO_TXT : text;
MENSAGEM : string[50];
begin
assign(ARQUIVO_TXT, 'ARQTXT.XXX');
append(ARQUIVO_TXT);//abre o arquivo p inclusao de um dado
Escreve dado no arquivo
read(MENSAGEM);
write(ARQUIVO_TXT, MENSAGEM);
close(ARQUIVO_TXT);
end.
Obs: depois de criar o arquivo, ele pode ser utilizado
para a gravao das informaes que vai
ICC
guardar.

21

Leitura das Informaes de um Arquivo


Exemplo 3
program LE_ARQUIVO_TEXTO;
var
ARQUIVO_TXT : text;
MENSAGEM : string[50];
begin
assign(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
vdeo a informao armazenada com o
ICC
programa anterior.

22

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 opes:

Criar arquivo;
Cadastrar registro;
Exibir registros;
Finalizar o programa.
ICC

23

program AGENDATXT;
uses
Crt;
var
ARQTXT : text;
NOME : string[40];
TELEFONE : string[8];
TECLA : char;
OPCAO : char;

Exemplo

{*** Rotinas de Visualizacao ***}


procedure CENTER(MENSAGEM : string);
var
TAMANHO : integer;
begin
TAMANHO := 40 + length(MENSAGEM) div 2;
writeln(MENSAGEM:TAMANHO);
end;

{*** 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');
procedure WRITEXY(X, Y : byte; MENSAGEM : string); line;
begin
append(ARQTXT/);//abre o arquivo para inclusao de um dado
gotoxy(X, Y); write(MENSAGEM);
writexy(10, 5, 'Entre com o Nome ..........: '); readln(NOME
end;
writexy(10, 6, 'Entre com o Telefone ......: '); readln(TELEF
writeln(ARQTXT, NOME);
procedure LINE;
writeln(ARQTXT, TELEFONE);
var
writexy(25,24,'Tecle algo para voltar ao menu');
I : byte;
TECLA := readkey;
begin
close(ARQTXT);//fecha arquivo em uso dentro de um programa
for I := 1 to 80 do
End.
write(#205);
ICC
24
end;

procedure EXIBIR;
var
LINHA : byte;
begin
clrscr;
line;
center('Apresentacao de Registros');
line;
LINHA := 5;
reset(ARQTXT);//abre um arquivo existente,
//colocando p leitura/escrita
while not eof(ARQTXT) do
//(eof) end of file - final do arquivo
begin
readln(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;

Exemplo

{*** 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.
ICC

25