pimperativa11 - arquivos
DESCRIPTION
tutorial sobre como criara arquivos em PITRANSCRIPT
-
UFS - DComp - Prof. Kenia Kodel 1
Programao Imperativa
Unidade 11
-
Alm dos tipos estruturados tipos definidos pelo usurio (programador); tambm existem os tipos primitivos ou pr-definidos.
UFS - DComp - Prof. Kenia
Kodel 2
Exemplos de tipos primitivos...
J trabalhamos com tipos
definidos pelo usurio?
-
UFS - DComp - Prof. Kenia
Kodel 3
Tipos
Definidos pelo
Programador
Escalares
Estruturados
Strings &
Arrays
Conjuntos
Registros &
Arquivos
Ponteiros
Primitivos
Integer
Real
String
Boolean
Array
-
UF
S -
DC
om
p -
Pro
f. K
enia
Kodel
4
Nos exemplos de modularizao
type
TpVetor: array[1..15]of byte;
var
Vetor: TpVetor;
type
Dia = (dom,seg,ter,qua,qui,sex,sab);
Str20 = string[20];
var
Horario: array[7..22,dom..sab]of Str20;
Nos exemplos de matrizes
-
Feita a declarao, estes tipos podem ser
aplicados em qualquer ponto do programa,
da mesma maneira que os tipos pr-definidos.
UFS - DComp - Prof. Kenia
Kodel 5
Em que seo de
programas Pascal
deve-se declarar
tipos?
-
type
=; |
=(valor1,valor2,...);
Onde:
o nome do tipo
um tipo pr-definido, ou previamente
declarado
valorN valor que a varivel de respectivo tipo
pode assumir
UFS - DComp - Prof. Kenia
Kodel 6
-
Exemplos:
type
Str20=string[20];
TpLogico=(verdadeiro,falso);
TpSemana=(DOM,SEG,TER,QUA,QUI,SEX,SAB);
UFS - DComp - Prof. Kenia
Kodel 7
type
=; |
=(valor1,valor2,valor3,...);
-
Exemplos:
type
Str20=string[20];
TpLogico=(verdadeiro,falso);
TpSemana=(DOM,SEG,TER,QUA,QUI,SEX,SAB);
UFS - DComp - Prof. Kenia
Kodel 8
Definidos os tipos, onde
aplic-los?
-
Importante observar que, assim como os tipos
primitivos, os tipos definidos pelo programador so
aplicados na declarao de variveis (seo var).
type
Str20=string[20];
TpLogico=(verdadeiro,falso);
TpSemana=(DOM,SEG,TER,QUA,QUI,SEX,SAB);
var
Nome: Str20;
Resposta: TpLogica;
Dia: TpSemana;
UFS - DComp - Prof. Kenia
Kodel 9
-
Os tipos definidos a partir dos tipos primitivos
(strings, arrays, registros, conjuntos, ponteiros e
outros) so denominados estruturados.
type
=;
Exemplo:
type
Str20= string[20];
TpNum = byte;
TpArray = array [1..100] of integer;
var
Nome: Str20;
Idade: TpNum;
Vetor: TpArray;
UFS - DComp - Prof. Kenia
Kodel 10
-
Outro Exemplo: type Str15 = string[15]; TpDias =(DOM,SEG,TER,QUA,QUI,SEX,SAB); TpSemana =array[DOM..SAB]of Str15;
var Semana: TpSemana; {Prioridades.}
UFS - DComp - Prof. Kenia
Kodel 11
Qual o esboo da
varivel semana?
-
Esboo da varivel Semana: type
Str15 = string[15];
TpDias =(DOM,SEG,TER,QUA,QUI,SEX,SAB); TpSemana = array[DOM..SAB] of Str15;
var
Semana: TpSemana;
UFS - DComp - Prof. Kenia
Kodel 12
DOM SEG TER QUA QUI SEX SAB
Semana
-
Esboo da varivel Semana: type
Str15 = string[15];
TpDias =(DOM,SEG,TER,QUA,QUI,SEX,SAB); TpSemana = array[DOM..SAB] of Str15;
var
Semana: TpSemana;
UFS - DComp - Prof. Kenia
Kodel 13
DOM SEG TER QUA QUI SEX SAB
Semana
for D:=DOM to SAB do Semana[D]:=definir;
definir definir definir definir definir definir definir
-
Para definir o tipo conjunto, que pode ser manipulado
como conjunto matemtico, usado: type
= set of ;
Exemplos: type
TpCaracteres = set of char;
TpAlgarismos = set of 0..9;
TpVogais = set of (A,E,I,O,U,a,e,i,o,u);
var
Letras: TpCaracteres;
Pares: TpAlgarismos;
Vogais: TpVogais;
UFS - DComp - Prof. Kenia
Kodel 14
-
Para manipulao dos dados mantidos em
conjuntos so disponibilizadas as operaes:
1. Unio + 2. Diferena 3. Interseo *
Exemplo - Unio: type
TpConj = set of byte;
var
Numeros,
Pares: TpConj;
...
Pares:=[0,2,4,6,8];
Numeros:=Pares + [1,3,5,7];
UFS - DComp - Prof. Kenia
Kodel 15
0, 1, 2, 3, 4, 5, 6, 7, 8
Numeros
Qual o contedo da
varivel Nmeros?
-
Para manipulao dos dados mantidos em
conjuntos so disponibilizadas as operaes:
1. Unio + 2. Diferena 3. Interseo *
Exemplo - Diferena: type
TpConj = set of byte;
var
Numeros,
Pares: TpConj;
...
Numeros:=[1,2,3,4,5] - [1,4,5,9];
UFS - DComp - Prof. Kenia
Kodel 16
2, 3
Numeros
Qual o contedo da
varivel Nmeros?
-
Para manipulao dos dados mantidos em
conjuntos so disponibilizadas as operaes:
1. Unio + 2. Diferena 3. Interseo *
Exemplo - Interseo: type
TpConj = set of byte;
var
Numeros,
Pares: TpConj;
...
Numeros:=[1,2,3,4,5] * [1,4,5,9];
UFS - DComp - Prof. Kenia
Kodel 17
1, 4, 5
Numeros
Qual o contedo da
varivel Nmeros?
-
Para construir expresses relacionais
envolvendo dois conjuntos tem-se:
1. Igual =, verdadeiro se todos os elementos so idnticos.
2. Diferente , verdadeiro se pelo menos um elemento pertencer a um conjunto e no
pertencer a outro.
3. Est Contido = Conj2, verdadeiro se Conj1 contm Conj2.
UFS - DComp - Prof. Kenia
Kodel 18
-
Para construir expresses relacionais envolvendo
conjunto e elemento tem-se:
Pertence in, se E in Conj, verdadeiro se o
elemento E pertence a Conj.
No Pertence not in, se E not in Conj,
verdadeiro se o elemento E no pertence a
Conj.
UFS - DComp - Prof. Kenia
Kodel 19
J havamos usado
conjunto?
-
Para declarao de registro fazemos uso das
sees type e var do Pascal.
type
= record
: ;
: ;
...
end;
var
: ;
UFS - DComp - Prof. Kenia
Kodel 20
-
Onde: type
= record
: ;
: ;
...
end;
var
: ;
nome do tipo registro
palavra reservada
campos que compoem registros
tipos dos campos
Varivel do tipo registro
UFS - DComp - Prof. Kenia
Kodel 21
-
UF
S -
DC
om
p -
Pro
f. K
enia
Kodel
Exemplo: type TpRegCliente = record Nome: string[20]; Telefone: string[10]; Financiamento: real; Tipo: char; Fidelidade: byte; end; var RegCliente: TpRegCliente;
Nome Z
Telefone 7932574455
Financiamento 17.000,00
Tipo B
Fidelidade 8
RegCliente 22
-
Onde: type
TpRegPesquisador = record
Nome: string[20];
Telefone: string[10];
Financiamento: real;
Tipo: char;
Fidelidade: byte;
end;
var
RegCliente: TpRegCliente;
nome do tipo registro
palavra reservada
campos que compoem registros
tipos dos campos
varivel do tipo registro
UFS - DComp - Prof. Kenia
Kodel 23
-
Se necessrio compor um registro, por exemplo, para manter a movimentao bancria de uma dado ms-ano?
type TpRegExtrato = record Dia: byte; Operacao: string[10]; Valor: real; Tipo: char; end; var RegExtrato: TpRegExtrato;
Dia 13
Operacao Transferncia
Valor 700,00
Tipo C
RegExtrato
UF
S -
DC
om
p -
Pro
f. K
enia
Kodel
24
-
Considerando o exemplo temos: type TpRegCliente = record Nome: string[20]; Telefone: string[10] Financiamento: real; Tipo: char; Fidelidade: byte; end; var RegCliente: TpRegCliente;
UF
S -
DC
om
p -
Pro
f. K
enia
Kodel
25
Qual a varivel deste exemplo?
Qual o tipo da referida varivel?
Quais os campos de composio do tipo e da varivel?
-
Considerando o exemplo temos: type TpRegCliente = record Nome: string[20]; Telefone: string[10] Financiamento: real; Tipo: char; Fidelidade: byte; end; var RegCliente: TpRegCliente;
Neste temos uma varivel RegCliente, do tipo TpRegCliente, composta pelos campos: Nome, Telefone, Financiamento, Tipo e Fidelidade.
UF
S -
DC
om
p -
Pro
f. K
enia
Kodel
26
-
Exceto a atribuio de registros de um mesmo tipo, os registros so manipulados campo a campo. Para tanto deve ser usado o nome do registro seguido de ponto e do nome do campo a manipular.
J a manipulao dos campos dos registros so efetuadas em conformidade com os tipos destes.
UF
S -
DC
om
p -
Pro
f. K
enia
Kodel
27
type
TpRegExtrato = record
Dia: byte;
Operacao: string[10];
Valor: real;
Tipo: char;
end;
var
Reg1, Reg2: TpRegExtrato;
Reg1:=Reg2; writeln(Reg1); readln(Reg2.Dia);
Reg1.Valor:=2000/3; readln(Reg2); Reg1.Tipo=Reg2.Tipo;
-
UF
S -
DC
om
p -
Pro
f. K
enia
Kodel
28
type
TpRegExtrato = record
Dia: byte;
Operacao: string[10];
Valor: real;
Tipo: char;
end;
var
Reg1, Reg2: TpRegExtrato;
Os 4 dados: dia, operao, valor e tipo
poderiam ser mantidos num vetor com 4 posies?
-
UF
S -
DC
om
p -
Pro
f. K
enia
Kodel
29
type
TpRegExtrato = record
Dia: byte;
Operacao: string[10];
Valor: real;
Tipo: char;
end;
var
Reg1, Reg2: TpRegExtrato;
Os 4 dados: dia, operao, valor e tipo no podem ser
mantidos num vetor porque no so homogneos.
Dados heterogneos devem ser mantidos em registros.
-
Um registro consiste num item de composio de programas de computador til ao armazenamento dos dados.
Diferentes dos arrays, so heterogneos, ou seja, podem armazenar dados de diversos tipos.
Na situao problema apresentada, por exemplo, tem-se um registro composto por 2 dados numricos e 2 alfanumricos.
UFS - DComp - Prof. Kenia
Kodel 30
type
TpRegExtrato = record
Dia: byte;
Operacao: string[10];
Valor: real;
Tipo: char;
end;
var
Reg1, Reg2: TpRegExtrato;
-
Para facilitar a manipulao de registros,
possibilitando que no seja necessrio repetir
exaustivamente o nome do registro, o Pascal
disponibiliza o comando with.
Assim, o trecho de cdigo: writeln(Reg1.Dia,Reg1.Operacao,Reg1.Valor,Reg1.Tipo);
Com with, pode ser reescrito: with Reg1 do
writeln(Reg1.Dia,Reg1.Operacao,Reg1.Valor,Reg1.Tipo);
with Reg1 do
writeln(Dia,Operacao,Valor,Tipo);
UFS - DComp - Prof. Kenia
Kodel 31
-
with RegAux do
begin
writeln(Nome);
writeln(Telefone);
Financiamento:=200000;
end;
UFS - DComp - Prof. Kenia
Kodel 32
Outro Exemplo: type TpRegCliente = record Nome: string[20]; Telefone: string[10] Financiamento: real; Tipo: char; Fidelidade: byte; end; var RegAux: TpRegCliente;
-
Exemplo: with RegAux do
begin
writeln(Nome);
writeln(Telefone);
Fianciamento:=200.000;
end;
UFS - DComp - Prof. Kenia
Kodel 33
Sintaxe
with do
;
-
Sintaxe with do
;
Onde:
o nome do registro (da varivel de tipo registro.
instrues envolvendo os campos do registro supracitado sem a necessidade de serem precedidas pelo nome deste.
UFS - DComp - Prof. Kenia
Kodel 34
-
Os registros podem compor arrays. Exemplo: type TpReg = record Nome: string[20]; Telefone: string[10] Financiamento: real; Tipo: char; Fidelidade: byte; end; var Melhores: array[1..20] of TpRegCliente; Reg: TpReg;
Neste caso, por exemplo, para exibir o campo Nome do registro mantido na posio 3 do vetor deve-se usar:
writeln( Melhores[3].Nome);
Para ler os nomes e telefones dos clientes especiais (melhores): for I:=1 t 20 do begin
readln(Melhores[I].Nome);
readln(Melhores[I].Telefone); end; UFS - DComp - Prof. Kenia Kodel 35
-
UFS - DComp - Prof. Kenia Kodel 36
Os arquivos tambm so colees de registros; mas residem em memria
secundria, ou seja, memria no voltil.
Portanto so diferentes dos itens de armazenamento de dados estudados at
ento: registros, vetores, matrizes; os quais
no preservam os dados neles
depositados, aps o trmino da execuo
dos programas que os definem.
-
UFS - DComp - Prof. Kenia Kodel 37
Sob o ponto de vista lgico, os arquivos so colees de registros e so
declarados:
var
: file of ;
Onde:
o Nome nome do arquivo (interno);
o TipoRegistro tipo dos registros que comporo o arquivo.
-
UFS - DComp - Prof. Kenia Kodel 38
Considerando, por exemplo, a necessidade de
cadastrar os pacientes a serem atendidos por um
determinado mdico. Onde as consultas so
marcadas com antecedncia de meses.
Para cadastro dos dados dos
pacientes, um array de
registros poderia ser usado?
-
UFS - DComp - Prof. Kenia Kodel 39
type TpRegMed = record Nome: string[20];
Convenio, Fone: string[10]; Pago: real;
Retorno: boolean; end; var
ArqPacientes: file of TpRegMed;
Considerando a definio dada temos que ArqPacientes um arquivo composto por registros formados por cinco campos: nome, convnio, fone, (valor) pago e retorno.
-
UFS - DComp - Prof. Kenia Kodel 40
type TpRegMed = record Nome: string[20]; Convenio, Fone: string[10]; Pago: real; Retorno: boolean; end; var ArqPacientes: file of TpRegMed;
0
1
2
3
4
5
6
7
...
N
ArqPacientes
Nome Convnio Fone Pago Retorno
Maria BoaSaude 322 18,50 true
-
UFS - DComp - Prof. Kenia Kodel 41
Para gerenciamento dos dados mantidos em arquivos, so necessrios comandos especficos; de manipulao de arquivos.
Um destes refere-se associao a nome externo. O assign o procedimento que possibilita a
associao do nome externo do arquivo ao seu nome lgico (interno).
Os arquivos so elementos que existem independente da existncia do programa que o manipula. Portanto, apresentam nome externo, atravs do qual, por exemplo, outros programas os identificam.
-
UFS - DComp - Prof. Kenia Kodel 42
Atravs do nome externo o arquivo mantm-se disponvel para outros programas.
assign(var ; : string);
Onde:
o nome lgico do arquivo, nome interno
o nome externo do arquivo
-
UFS - DComp - Prof. Kenia Kodel 43
Exemplo:
assign(ArqPacientes,Consultas.dat);
Com a execuo do programa que manipula ArqPacientes, considerando os efeitos da instruo dada acima, o arquivo Consultas.dat criado e/ou
alterado.
Mesmo aps a concluso do referido programa, o arquivo Consultas.dat existir, preservando os dados
neste mantidos.
-
UFS - DComp - Prof. Kenia Kodel 44
Exemplo: assign(ArqPacientes,C18nov08.dat); ... assign(ArqPacientes,C20nov08.dat);
Um nico arquivo lgico pode ser associado a diversos arquivos externos (um por vez), dependendo da situao problema a ser solucionada.
Antes da definio do nome externo do arquivo pode ser descrito o caminho de localizao deste: C:\Hospital DaSaude\Dr CuraTudo\Consultas.dat
-
UFS - DComp - Prof. Kenia Kodel 45
Para manipulao de dados mantidos em arquivos preciso abir estes (arquivos).
Em Pascal h dois comandos para abrir arquivos:
reset(var );
rewrite(var );
O reset um procedimento til para abrir arquivos j existentes. Preserva os dados mantidos neste.
Com o reset, caso o arquivo no exista, ocorre um erro de execuo.
-
UFS - DComp - Prof. Kenia Kodel 46
Como j dito, tem-se:
reset(var );
rewrite(var );
As caractersticas do reset j foram vistas. O rewrite um procedimento til para criar e
abrir novos arquivos. Caso o arquivo j exista, o rewrite provoca a
perda dos dados mantidos neste.
-
UFS - DComp - Prof. Kenia Kodel 47
reset(ArqPacientes);
rewrite(ArqPacientes);
Na prtica, se usamos apenas o reset para abrir os arquivos manipulados por um programa; na primeira vez que o usurio executar a aplicao, como o cadastro no existe, o reset provocaria erro de execuo.
-
UFS - DComp - Prof. Kenia Kodel 48
reset(ArqPacientes);
rewrite(ArqPacientes);
E se usamos, na prtica, apenas o rewrite, para abrir os arquivos manipulados por um programa; a primeira vez que o usurio executar a aplicao, como o cadastro no existe, o rewrite provoca a criao do arquivo; mas em todas as outras vezes, que o arquivo (cadastro) deve apenas ser aberto, o rewrite, provoca a perda dos dados.
-
UFS - DComp - Prof. Kenia Kodel 49
reset(ArqPacientes);
rewrite(ArqPacientes);
Precisamos ento: sendo a primeira vez que o usurio est executando o programa (o cadastro ainda no existe), o rewrite deve ser usado para criar o arquivo. E, em todas as outras vezes (o cadastro j existe e deve ser preservado) usar o reset.
-
UFS - DComp - Prof. Kenia Kodel 50
procedure AbrirArquivo(Arquivo: TipoArquivo;
NomeArq: string);
begin
assign(Arquivo,NomeArq);
{$I-} reset(Arquivo); {I+}
if IOResult 0 then
rewrite(Arquivo);
end;
Neste tenta-se abrir o arquivo com reset, presumindo que o Arquivo j exista.
Caso o arquivo no exista, com {$I-} efetuado o desligamento da diretiva de compilao fazendo com que o erro no seja tratado atravs de mensagem ao usurio, mas que seja atribudo um cdigo de erro varivel predefinida IOResult.
-
UFS - DComp - Prof. Kenia Kodel 51
procedure AbrirArquivo(Arquivo: TipoArquivo;
NomeArq: string);
begin
assign(Arquivo,NomeArq);
{$I-} reset(Arquivo); {I+}
if IOResult 0 then
rewrite(Arquivo);
end;
Se a IOResult for diferente de zero porque houve erro na tentativa de abrir o arquivo. Se houve erro porque o arquivo no existia, ento este deve ser criado usando o rewrite.
Se a IOResult for igual a zero porque no houve erro na tentativa de abrir o arquivo. Ou seja, o arquivo j existia e foi devidamente aberto com reset. Neste caso o rewrite no precisa ser usado.
-
UFS - DComp - Prof. Kenia Kodel 52
procedure AbrirArquivo(Arquivo: TipoArquivo;
NomeArq: string);
begin
assign(Arquivo,NomeArq);
{$I-} reset(Arquivo); {I+}
if IOResult 0 then
rewrite(Arquivo);
end;
Importante destacar que a abertura de um arquivo requer a associao prvia deste a um nome externo.
Em aplicaes que manipulam arquivo, a abertura deste deve ser efetuada no incio da aplicao, e uma nica vez, no deve ser feita ento, por exemplo, em laos (de operaes).
-
UFS - DComp - Prof. Kenia Kodel 53
close(var );
Atravs do comando close possvel fechar um arquivo.
Vale esclarecer que a ausncia do close no
identificada nem no processo de compilao, nem no de
execuo . Porm pode provocar danos nos dados
mantidos no arquivo.
O processo de fechar um arquivo deve ser efetuada ao
final da manipulao deste e uma nica vez. Assim,
tambm, no deve ser mantido em laos de operaes.
-
UFS - DComp - Prof. Kenia Kodel 54
Para armazenamento, usar:
write(var ,);
Para leitura, usar:
read(var ,var );
Exemplo, a instruo write(Arq,R); provoca o armazenamento do registro R no arquivo Arq. Mas, resta
esclarecer em que posio.
O read e o write so aplicados ao registro da posio corrente do arquivo.
Para gerenciamento de um arquivo mantido um ponteiro numrico que indica a posio (corrente) do registro a ser
manipulado.
-
UFS - DComp - Prof. Kenia Kodel 55
Para armazenamento, usar:
write(var ,);
Para leitura, usar:
read(var ,var );
Inicialmente, logo aps a abertura de um arquivo, o
ponteiro lgico setado na posio zero deste.
Havendo leituras (read) ou gravaes (write), esta
operao efetuada sobre o registros que encontra-se na
posio corrente e o apontador atualizado em uma
posio.
-
UFS - DComp - Prof. Kenia Kodel 56
Em geral, no processo de incluso de novos registros, estes devem ser adicionados ao final do arquivo, aps o ltimo registro. Para tanto, til a funo eof.
eof():boolean;
eof uma funo que retorna true quando encontrado
o fim do arquivo.
Caso seja necessrio manipular um registro que encontra-se numa dada posio do arquivo, til procedimento seek.
seek(var ; : longint);
Considerando seek(Arq,50); o ponteiro posicionado na posio 50 do arquivo Arq; ento a prxima operao de leitura ou armazenamento ser efetuada sobre o registro que se encontra nesta posio.
-
UFS - DComp - Prof. Kenia Kodel 57
Para identificar em que posio se encontra o ponteiro de
um arquivo h a funo filepos.
filepos():longint;
E para identificar quantos registros compem o arquivo
til a funo filesize.
filesize(): longint;
Vale esclarecer que o nmero de registros que compem
um arquivo tambm denominado tamanho do arquivo.
-
UFS - DComp - Prof. Kenia Kodel 58
Arquivos devem ser aplicados em aplicaes
computacionais que manipulam dados que devem ser
mantidos permanentemente:
agenda telefnica
estoque
cadastros
Vale considerar que a memria permanente tem tambm
grande capacidade de armazenamento de dados, mas
lenta em relao memria principal.
-
UFS - DComp - Prof. Kenia Kodel 59
Implementar
programa de
cadastro dos
medicamentos de uma farmcia.
-
UFS - DComp - Prof. Kenia Kodel 60
type Str20 = string[20]; TpReg = record Nome: Str20; Preco: real; Estoque: integer; {Quantidade em estoque} end; var ArqFarma: file of TpReg; RegFarma: TpReg; Opcao: char; CadastroVazio, Existe: boolean; Pos: longint;
-
UFS - DComp - Prof. Kenia Kodel 61
begin
CadastroVazio:=false;
assign(ArqFarma,'Farmas.dat');
{$I-} reset(ArqFarma); {$I+}
if IOResult 0 then rewrite(ArqFarma);
repeat
clrscr; writeln('*** farma ***'); writeln;
writeln(' 1 - incluir');
writeln(' 2 - excluir');
writeln(' 3 - editar estoque');
writeln(' 4 - consultar');
writeln(' 5 - listar todos');
writeln(' 6 - encerrar');
writeln; writeln('Opcao:');
repeat Opcao:=readkey;
until Opcao in ['1','2','3','4','5','6'];
if Opcao in ['2','3','4','5'] then VerifiqueVazio(CadastroVazio);
if not CadastroVazio then
case Opcao of
'1': incluir;
'2': excluir;
'3': alterar;
'4': consultar;
'5': listarTodos; end;
until Opcao = '6';
close(ArqFarma); end.
-
UFS - DComp - Prof. Kenia Kodel 62
procedure VerifiqueVazio(var inicio: boolean);
begin
inicio:=false;
if filesize(ArqFarma)=0 then begin
inicio:=true;
clrscr;
writeln('impossivel realizar operao, cadastro vazio');
writeln('pressione qualquer tecla');
readln;
end;
end;
-
UFS - DComp - Prof. Kenia Kodel 63
procedure incluir; var R: char; begin repeat clrscr; writeln('*** inclusao ***'); writeln; with RegFarma do begin writeln('Nome: '); readln(Nome); writeln('Preco: '); readln(Preco); writeln('Estoque: '); readln(Estoque); end; seek(ArqFarma,filesize(ArqFarma)); write(ArqFarma,RegFarma); writeln; writeln('Deseja efetuar nova inclusao? S/N '); repeat R:=upcase(readkey); until (R='S') or (R='N'); until R='N'; end;
-
UFS - DComp - Prof. Kenia Kodel 64
procedure listarTodos;
begin
clrscr; writeln('*** lista todos ***');
writeln;
writeln('Nome':20,'Preco':12,'Estoque':10);
seek(ArqFarma,0);
while not eof(ArqFarma) do begin
read(ArqFarma,RegFarma);
if RegFarma.Nome 'XXX' then
with RegFarma do
writeln(Nome:20,Preco:10:2,Estoque:10);
end;
writeln;
writeln('pressione qualquer tecla');
readkey;
end;
-
UFS - DComp - Prof. Kenia Kodel 65
procedure consultar; var Remedio: Str20; R: char; begin repeat clrscr; writeln('*** consulta ***'); writeln; writeln('Nome: '); readln(Remedio); localizar(Remedio,Existe,Pos); if Existe then with RegFarma do begin writeln('Nome: ',Nome); writeln('Preco: ',Preco); writeln('Estoque: ',Estoque); end else writeln('*** medicamento inexistente ***'); writeln; writeln('Deseja efetuar nova consulta? S/N '); repeat R:=upcase(readkey); until (R='S') or (R='N'); until R = 'N'; end;
-
UFS - DComp - Prof. Kenia Kodel 66
procedure localizar(N: Str20; var Achou: boolean;
var Posicao: longint); begin Achou:=false;
Posicao:=-1; seek(ArqFarma,0); while not eof(ArqFarma) do begin
read(ArqFarma,RegFarma); if RegFarma.Nome = N then begin Achou:=true;
Posicao:=filepos(ArqFarma)-1; end; end; end;
Por que continuar a busca mesmo j tendo localizado o elemento desejado?
-
UFS - DComp - Prof. Kenia Kodel 67
Implementar
procedimento
de excluso
(lgica).
-
UFS - DComp - Prof. Kenia Kodel 68
procedure incluir; var R: char; begin repeat clrscr; writeln('*** inclusao ***'); writeln; with RegFarma do begin writeln('Nome: '); readln(Nome); writeln('Preco: '); readln(Preco); writeln('Estoque: '); readln(Estoque); end; seek(ArqFarma,filesize(ArqFarma)); write(ArqFarma,RegFarma); writeln; writeln('Deseja efetuar nova inclusao? S/N '); repeat R:=upcase(readkey); until (R='S') or (R='N'); until R='N'; end;
Ajustar
procedimento de
incluso de forma a
evitar redundncia
de dados.
-
UFS - DComp - Prof. Kenia Kodel 69
Implementar
procedimento
de alterao
(ajuste do
estoque).
-
UFS - DComp - Prof. Kenia Kodel 70
Analisando a situao
problema, que outras alteraes (edies)
so provavelmente necessrias?
Cadastro
Farmcia
[Principal]
Verifique
Vazio
Incluso
Excluso
Alterao
Consulta
Consulta
Total
-
UFS - DComp - Prof. Kenia Kodel 71
Criar programa Pascal
para manter as notas
dos alunos da turma
de Programao
Imperativa: 3 notas
(de 0 a 10).
Controle
de Notas
[Principal]
Verifique
Vazio?
Incluso?
Excluso?
Alterao?
Consulta?
Consulta
Total?
-
UFS - DComp - Prof. Kenia Kodel 72
Criar trecho de cdigo Pascal para
manter o ranking de um jogo.
Neste so mantidos nome do
jogador e pontuao (o que
tambm corresponde
entrada). Um nome no pode
aparecer mais de uma vez no
jogo. O ranking composto
por at 5 jogadores.
-
73
UF
S -
DC
om
p -
Pro
f. K
enia
Kodel
ARQUIVOS
COMPLEMENTAR ESTUDOS:
Fundamentos da Programao de Computadores
Ana Fernanda Gomes Ascencio
Edilene Aparecida Veneruchi de Campos
Captulos: Registro &
Arquivo 73