pimperativa11 - arquivos

73
 UFS - DComp - Prof. Kenia Kodel 1 Programação Imperativa Unidade 11

Upload: lucas-henrique

Post on 08-Oct-2015

224 views

Category:

Documents


0 download

DESCRIPTION

tutorial sobre como criara arquivos em PI

TRANSCRIPT

  • 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