background image

PODST AWY PROGRAM OWANIA

 

 

Pliki elementowe cz. 1 

 

Pliki elementowe (zdefiniowane) są to pliki, w których przechowywane informacje są przedstawione w postaci 
zakodowanej niemożliwej do bezpośredniego odczytania. Zasady obsługi pliku elementowego są takie same jak 
dla pliku tekstowego. Dostęp do pliku jest sekwencyjny, tzn. dostępny jest tylko jeden element określony przez 
aktualne położenie wskaźnika, zaś inne elementy mogą być udostępniane tylko po wykonaniu pewnych operacji 
na pliku (np. przesuwanie wskaźnika). Rozmiar pliku jest dynamiczny. Zmienną typu plikowego można kojarzyć 
kolejno z różnymi plikami dyskowymi.  Deklaracja zmiennej plikowej ma postać: 

var nazwa zmiennej plikowej: file of

 typ składowy

 

Typ składowy nie może być typem plikowym i wskaźnikowym. 

Podobnie  jak  dla  plików  tekstowych  przyporządkowanie  nazwy  pliku  dyskowego  do  zmiennej  plikowej 
dokonuje się przy pomocy procedury 

assign

, otwieranie pliku dokonuje się przy pomocy procedur 

rewrite

 

(do  zapisu)  i 

reset 

(do  odczytu  i  zapisu),  a  zamykanie  przy  pomocy  procedury 

close

.  Dla  plików 

elementowych nie można użyć procedury 

append

.  

Czytanie  z  pliku  odbywa  się  przy  pomocy  procedury 

read

,  a  zapisywanie  do  pliku  przy  pomocy  procedury 

write

mają one następującą postać: 

read(zmienna plikwa, lista zmiennych typu bazowego) 

write(zmienna plikowa, wyr

ażenie typu bazowego)

 

Dla plików elementowych nie można używać procedur 

readln

 i 

writeln

Procedury pomocnicze  

• 

seek(zmienna plikowa, pozycja)

 – ustawia wskaźnik pliku przed elementem o numerze pozycja 

• 

truncate(zmienna plikowa)

 – kasuje plik od pozycji bieżącej do końca 

Funkcje pomocnicze 

• 

filesize(zmienna plikowa)

 – podaje liczbę elementów pliku 

• 

filepos(zmienna plikowa)

 – podaje pozycję elementu bieżącego 

 
Ćwiczenie 1 

Napisz program, który: 

− 

tworzy  na  dysku  w  katalogu  bieżącym  dwa  pliki  elementowe:  do  jednego  zapisuje  100  losowych  liczb 
całkowitych, do drugiego zapisuje 100 losowych liczb rzeczywistych. 

− 

Wyświetla oba pliki. 

program pliki1_e; 
uses crt; 
const n = 100; 
var fcal: file of integer; 
    frzecz: file of real; 
    i, m : integer; 
    x, y : real; 
begin 
    clrscr; 
    assign(fcal, 'pcal'); 
    rewrite(fcal); 
    assign(frzecz, 'przecz'); 
    rewrite(frzecz); 
       

 

 

{zapisywanie do plikow} 

    randomize; 
    for i := 1 to n do 
         begin 
         m := random(100); 
         write(fcal, m); 
         x := random(100) * 0.25; 
         write(frzecz, x); 

background image

PODST AWY PROGRAM OWANIA

 

 

Pliki elementowe cz. 1 

 

         end; 
      close(fcal); 
      close(frzecz); 
       

 

 

{odczytywanie z plikow} 

     reset(fcal); 
     writeln('liczby calkowite'); 
     while not eof(fcal) do 
           begin 
                read(fcal, m); 
                write(m:3); 
           end
     writeln
     writeln('liczby rzeczywiste'); 
     reset (frzecz); 
     while not eof(frzecz) do 
           begin 
                read(frzecz, x); 
                write(x:5:1); 
           end; 
     close(fcal); 
     close(frzecz); 

readln; 

end
 

Ćwiczenie 2 

Napisz program, który otworzy do odczytu plik zawierający liczby całkowite i wyświetli jego zawartość. 
Na końcu programu dopisz poniższy ciag instrukcji.  

     
reset(fcal); 
writeln('liczby calkowite'); 
for i := 1 to 10 do 

begin 

       

write('filepos' ,filepos(fcal):4); 
write ('filesize ', filesize(fcal):4); 

            read(fcal, m); 
            writeln(m:4); 
      end; 

seek(fcal, 5); 
read(fcal, m); 
writeln(' seek 5  ', m); 
seek(fcal, 100);       {1} 
read(fcal, m);    {disk read error} 
writeln(m:4); 
close(fcal);  

 

 

• 

Zastąp instrukcję oznaczoną {1} instrukcją: 

seek(fcal, filesize(fcal)); 

• 

Wytłumacz uzyskany efekt. 

 
Uwagi: 

  Po  otwarciu  pliku  funkcja 

filepos

  przyjmuje  wartość  0,  po  zapisaniu  pierwszego  elementu  zmienia 

wartość na 1 itd.. Elementy w pliku są, więc numerowane od 0. 

  Funkcja 

filesize 

zawsze pokazuje liczbę elementów w pliku. 

  Instrukcja oznaczona {1} ustawia wskaźnik pliku po 100 (ostatnim) elemencie, dlatego kolejna instrukcja 

czytania próbuje czytać poza końcem pliku i powoduje błąd. 

  Liczbę 100 w instrukcji {1} możemy zastąpić wartością funkcji 

filesize

, (najczęściej jest to konieczne, 

bo nie znamy dokładnej liczby elementów w pliku). 

 

background image

PODST AWY PROGRAM OWANIA

 

 

Pliki elementowe cz. 1 

 

• 

Zastąp instrukcję {1} instrukcją: 

seek(fcal, 99); 

a następnie instrukcją: 

seek(fcal, filesize(fcal) - 1); 

 
W obu przypadkach program zakończy się poprawnie i zostanie odczytany z pliku ostatni element. 
 
Ćwiczenie 3 

Usuń z pliku 10 ostatnich liczb i ponownie wyświetl plik. 
Następnie ustaw wskaźnik pliku na końcu i dopisz 10 innych liczb losowych z zakresu (100, 200).  

       

{usunięcie

 ostatnich 10 elementów z pliku} 

reset(fcal); 
seek(fcal, 89); 
truncate(fcal); 
close(fcal); 
 

 

{dopisanie elementów na końcu pliku}

 

reset(fcal); 
seek(fcal, filesize(fcal)); 
for i := 1 to 10 do 

begin 

       

m := random(100) + 100; 

       

write(fcal, m); 

 

end; 

close(fcal); 
 

Ćwiczenie 4 

Napisz  procedurę,  która  skopiuje  plik  zawierający  liczby  rzeczywiste  do  innego  pliku  pomijając  podczas 
kopiowania wszystkie liczby większe od zadanej liczby i policzy ile takich liczb było w pliku wejściowym. 
Zastosuj procedurę do skopiowania pliku przecz z pominięciem liczb większych od 20. 
 
Ćwiczenie 5 

1.  Napisz funkcję, która wyznaczy największą liczbę w pliku. 
2.  Napisz funkcję, która wyznaczy liczbę najmniejszą w pliku. 
3.  Napisz  funkcję,  która  obliczy  sumę  wszystkich  elementów  w  pliku.  Zastosuj  tę  funkcję  w  programie,  

w którym z pliku wejściowego zawierającego liczby, utworzysz drugi plik, do którego zapiszesz tylko tyle 
liczb z pliku pierwszego, aby ich suma nie przekroczyła określonej liczby. Zastosuj te funkcje w programie, 
w  którym  w  pliku  wejściowym  zostanie  tylko  tyle  elementów,  żeby  ich  suma  nie  przekroczyła  zadanej 
liczby. 

4.  Napisz program, który będzie realizował menu: 

Operacje na plikach zawierających liczby:

 

1. 

Zakładanie pliku

 

2. 

Dopisanie liczb na końcu pliku

 

3. Usuwanie z pliku wybranych liczb 
4. Obliczanie liczby elementów w pliku 
5. Obliczanie sumy elementów w pliku 
6. Obcinanie pliku do zdanej liczby elementów 
7. Obcinanie pliku do zadanej sumy elementów 
8. 

Wyświetlanie pliku

 

9. Koniec 

Wybierz opcję:

 

 
Wszystkie opcje zrealizuj w postaci funkcji lub procedur.