sexta-feira, 16 de novembro de 2012

      Uso de ficheiros em Pascal



    Ficheiros são, como o nome indica, conjuntos de fichas ou registos de dados. Estes servem para armazenar a informação introduzida pelo utilizador em suportes de físicos como discos rigidos, cds, etc. em vez de apenas armazenados na memória RAM, que sendo uma memória volátil, perde os dados que nela se encontram quando o computador é desligado da corrente eléctrica.
Tens dois tipos de ficheiros: Ficheiros de Texto do tipo *.txt que abres com duplo clique no Bloco de Notas e Ficheiros de Tipos Definidos Pelo Utilizador que podem ter a extensão que o programador entender.
     A diferença entre um e outro tipo encontra-se no acesso aos dados, que nos Ficheiros de Texto é sequencial, isto é, o inicio da leitura dos dados não pode ser iniciada num ponto que o utilizador tenha escolhido, começa sempre no primeiro elemento do ficheiro e tem de percorrer todos os elementos existentes até chegar ao local pretendido, enquanto nos Ficheiros de Tipos Definidos Pelo Utilizador pode ser feita de forma aleatória, ou seja, pode ser escolhida a posição a partir da qual vai começar a leitura do ficheiro.




FICHEIRO DEFINIDO PELO PROGRAMADOR/UTILIZADOR

Program Ficheiro_programador;
Type carros = record
        marca, matricula, tipo: string[20];
        tempo: integer;
end;
Var fich: file of carros;
        auto: carros;
        escolha1: integer;
        escolha:char;
        valor:real;
Procedure criar;
begin
        Assign(fich,'Automoveis.txt');
        Rewrite(fich);
        Close(fich);
end;
Procedure ler;
begin
        Reset(fich);
        seek(fich, filesize(fich));
        Write('Introduza a marca do ve¡culo');
        Readln(auto.marca);
        Write('Introduza a matr¡cula');
        readln(auto.matricula);
        Write('Introduza o tempo de estacionamento');
        Readln(auto.tempo);
        Writeln('Introduza o tipo de veiculo');
        readln(auto.tipo);
        write(fich,auto);
        Close(fich);
end;
Procedure Apresentar;
Var apre:string;
        maior, soma:integer;
        media:real;

begin
        reset(fich);
        while not eof(fich) do
        begin
                read(fich,auto);
                write('Marca:',auto.marca);
                write('Matricula:',auto.matricula);
                write('Tempo de estacionamento:',auto.tempo);
                write('Tipo de veiculo:',auto.tipo);
        end;
        write('Tempo m‚dio=',soma/filesize(fich));
        maior:=0;
        while not eof (fich) do
        begin
                if (auto.tempo>maior) then
                begin
                        maior:=auto.tempo;
                        apre:=auto.matricula;
                end;
        end;
        write('A matricula',apre,' foi quem esteve mais tempo no parque');
        close(fich);
end;
Procedure Limpar;
begin
        Assign(fich,'Automoveis.txt');
        Rewrite(fich);
        Close(fich);
end;
Procedure Alterar;
var escolha:char;
        mat:string;
begin
        write('Pretende alterar algum dado? (S/N)');
        readln(escolha);
        if (escolha='s') then
        begin
                reset(fich);
                read(fich,auto);
                while not eof (fich) do
                begin
                        write('Introduza a matr¡cula cujo vai ser alterada');
                        read(mat);
                        if mat=auto.matricula then
                        begin
                                write('Pretende alterar a matricula? (S/N)');
                                readln(escolha);
                                if (escolha='s') then
                                begin
                                        write('Matricula:');
                                        readln(auto.matricula);
                                end;
                                write('Alterar Marca? (s/N)');
                                readln(escolha);
                                if (escolha='s') then
                                begin
                                        write('Marca:');
                                        readln(auto.marca);
                                end;
                                write('Alterar tempo de estacionamento? (S/N)');
                                readln(escolha);
                                if (escolha='s') then
                                begin
                                        write('Tempo de estacionamento:');
                                        readln(auto.tempo);
                                end;
                                write('Alterar tipo? (S/N)');
                                readln(escolha);
                                if (escolha='s') then
                                begin
                                        write('Tipo de veiculo:');
                                        readln(auto.tipo);
                                end;
                        end;
                end;
        end;
        write(fich,auto);
        close(fich);
end;
Procedure valor_pago;
var mt, lg, ps:real;
begin
        reset(fich);
        while not eof (fich) do
        begin
                read(fich,auto);
                write('Matricula:',auto.matricula);
                write('Tipo:',auto.tipo);
                write('Marca:',auto.marca);
                write('Tempo:',auto.tempo);
                If auto.tipo='moto' then
                valor:= 0.04*auto.tempo*1.2;
                 If auto.tipo='pesado' then
                valor:= 0.08*auto.tempo*1.2;
                 If auto.tipo='ligeiro' then
                valor:= 0.1*auto.tempo*1.2;
               Writeln(auto.matricula,' ',auto.tempo,'  ',valor);
        end;
end;
Begin //Programa Principal
repeat
        writeln('1 - Para criar');
        writeln('2 - Para ler');
        writeln('3 - Para apresentar');
        writeln('4 - Para Alterar');
        writeln('5 - Para o valor pago');
        writeln('6 - Para limpar');
        writeln('7 - Para sair');
        readln(escolha);
        case escolha1 of
                1:criar;
                2:ler;
                3:apresentar;
                4:alterar;
                5:valor_pago;
                6:limpar;
        end;
until (escolha1=7);
End.

Sem comentários:

Enviar um comentário