Uniwersytet Zielonogórski
Instytut Sterowania i Systemów Informatycznych Metody i języki programowania
Lista 2 — Pliki
1 Wstęp
1. Napisać i uruchomić program, który wpisuje N liczb typu integer do pliku:
program Z a p i s 1 ; c o n s t N=10;
t y p e TPlik = f i l e o f i n t e g e r ; v a r p l i k : TPlik ;
x , y : i n t e g e r ; b e g i n
a s s i g n ( p l i k , ’ p l i k . dat ’ ) ; { $I −}
r e w r i t e ( p l i k ) ; { $ I+}
i f i o r e s u l t <>0 t h e n b e g i n
w r i t e l n ( ’ Problem z otw arc iem p l i k u ! ’ ) ; h a l t ( 1 ) ;
end ;
f o r x :=1 t o N do b e g i n
w r i t e ( ’ Podaj l i c z b e nr ’ , x , ’ : ’ ) ; r e a d l n ( y ) ;
w r i t e ( p l i k , y ) ; end ;
c l o s e ( p l i k ) ; end .
2. Napisać i uruchomić program, który odczytuje N liczb typu integer z pliku, zapisanych przy pomocy programu 1.
program Odczyt1 ; c o n s t N=10;
t y p e TPlik = f i l e o f i n t e g e r ; v a r p l i k : TPlik ;
x , y : i n t e g e r ; b e g i n
a s s i g n ( p l i k , ’ p l i k . dat ’ ) ; { $I −}
r e s e t ( p l i k ) ; { $ I+}
i f i o r e s u l t <>0 t h e n b e g i n
w r i t e l n ( ’ Problem z otw arc iem p l i k u ! ’ ) ;
1
h a l t ( 1 ) ; end ;
f o r x :=1 t o N do b e g i n r e a d ( p l i k , y ) ;
w r i t e l n ( ’ L i c z b a nr ’ , x , ’ = ’ , y ) ; end ;
c l o s e ( p l i k ) ; end .
3. Poprawić program 2. tak, aby wyświetlone zostały wszystkie liczby zapisane w pliku, nieza- leżnie od ich ilości
program Odczyt2 ;
t y p e TPlik = f i l e o f i n t e g e r ; v a r p l i k : TPlik ;
x , y : i n t e g e r ; b e g i n
a s s i g n ( p l i k , ’ p l i k . dat ’ ) ; { $I −}
r e s e t ( p l i k ) ; { $ I+}
i f i o r e s u l t <>0 t h e n b e g i n
w r i t e l n ( ’ Problem z otw arc iem p l i k u ! ’ ) ; h a l t ( 1 ) ;
end ; x : = 1 ;
w h i l e not e o f ( p l i k ) do b e g i n r e a d ( p l i k , y ) ;
w r i t e l n ( ’ L i c z b a nr ’ , x , ’ = ’ , y ) ; x:=x +1;
end ;
c l o s e ( p l i k ) ; end .
4. Napisać i uruchomić program, którego zadaniem jest wczytanie z klawiatury tablicy N liczb typu integer a następnie wpisanie tej tablicy do pliku. Ponadto program powinien umożliwić odczyt tak utworzonego pliku i wypisanie zawartości tablicy na ekran.
program O d c z y t Z a p i s 1 ; c o n s t N=10;
t y p e T p l i k = f i l e o f i n t e g e r ;
TTab = a r r a y [ 1 . . N] o f i n t e g e r ; v a r p l i k : TPlik ;
x , y : i n t e g e r ; tab : TTab ; b e g i n
a s s i g n ( p l i k , ’ p l i k . dat ’ ) ; { $I −}
r e w r i t e ( p l i k ) ; { $ I+}
i f i o r e s u l t <>0 t h e n b e g i n
w r i t e l n ( ’ Problem z otw arc iem p l i k u ! ’ ) ; 2
h a l t ( 1 ) ; end ;
f o r x :=1 t o N do b e g i n
w r i t e ( ’ Podaj l i c z b e nr ’ , x , ’ : ’ ) ; r e a d l n ( tab [ x ] ) ;
end ;
f o r x :=1 t o N do b e g i n w r i t e ( p l i k , tab [ x ] ) ; end ;
c l o s e ( p l i k ) ;
{ ========================== ODCZYT =================}
a s s i g n ( p l i k , ’ p l i k . dat ’ ) ; { $I −}
r e s e t ( p l i k ) ; { $ I+}
i f i o r e s u l t <>0 t h e n b e g i n
w r i t e l n ( ’ Problem z otw arc iem p l i k u ! ’ ) ; h a l t ( 1 ) ;
end ;
f o r x :=1 t o N do b e g i n r e a d ( p l i k , tab [ x ] ) ; end ;
c l o s e ( p l i k ) ;
f o r x :=1 t o N do b e g i n
w r i t e l n ( ’ L i c z b a ’ , x , ’ = ’ , tab [ x ] ) ; end ;
end .
2 Zadania
1. Na podstawie programów 1..4 zawartych we Wstępie, opracować procedury do otwierania i zamykania plików wraz z kontrolą błędów.
2. Przerobić program 4. ze Wstępu tak, aby korzystał z procedur do otwierania, zamykania, wpisywania i odczytywania tablicy z pliku.
3. Dany jest plik zawierający znaki ASCII. Napisać procedurę zwracającą liczbę wystąpień każdego znaku z tabeli ASCII w postaci tablicy. Założyć, że długość pliku jest mniejsza od maksymalnej wartości liczb typu longint.
4. Wygenerować w sposób losowy plik zawierający 13542 liczby typu LongInt (proszę zwrócić uwagę na zakres, jaki może przyjmować funkcja random). Napisać procedurę, która po utworzeniu nowego pliku umieści w nim wartości sum każdych dwóch kolejnych liczb z pliku źródłowego.
5. Napisać program służący do kopiowania plików o nazwach podanych z klawiatury. Pro- gram ma posiadać zabezpieczenie przed skopiowaniem nieistniejącego pliku. Zastosować funkcję blockread i blockwrite. Odczytywać pliki znak po znaku.
6. Przerobić program z punktu (5) tak, aby odczyt pliku odbywał się blokowo, po 10 kB.
3
7. Dany jest plik tekstowy, gdzie w każdej linii znajduje się słowo o dowolnej długości. Ob- liczyć średnią długość słów oraz wyświetlić słowo najkrótsze i najdłuższe. Zastosować funkcję blockread. Wskazówka: odczytywać znak po znaku. Koniec linii oznacza się zna- kami o kodach ASCII 13 i 10 (znaki CR i LF ).
8. Podać definicję rekordu opisującego jeden wpis do ksiażki teleadresowej (oprócz telefonu, adresu można dodawać także inne dane np.: wzrost, kolor oczu). Podać definicję typu plikowego dla tego typu rekordowego.
9. Przygotować zestaw procedur do obsługi prostej bazy teleadresowej:
• procedura do usuwania pliku z bazą
• procedura do zakładania pustej bazy
• procedura do dopisania nowego rekordu do bazy
• procedura do usunięcia rekordu do bazy
• procedura do przeszukiwania bazy według nazwiska.
Wskazówka: Do usuwania rekordu z bazy można zastosować znacznik (pole rekordu) wska- zujący, czy określony rekord został usunięty.
4