Tablice, rekordy i pliki

Transkrypt

Tablice, rekordy i pliki
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Program Rozwojowy Potencjału Dydaktycznego Politechniki Świętokrzyskiej w Kielcach: kształcenie na miarę sukcesu.
Priorytet IV
Szkolnictwo wyższe i nauka.
Działanie 4.1
Wzmocnienie i rozwój potencjału dydaktycznego uczelni oraz zwiększenie liczby absolwentów kierunków o kluczowym znaczeniu dla gospodarki opartej na wiedzy.
Poddziałanie 4.1.1
Wzmocnienie potencjału dydaktycznego uczelni.
Umowa: uda-pokl.040.01.01-00-175/08-00
Materiały dydaktyczne „Programowanie w języku wysokiego poziomu na przykładzie języka Pascal
- część 2” (Moduł nr 12) zrealizowane do Zadania 9
Autorzy: mgr inż. Arkadiusz Chrobot, mgr inż. Karol Wieczorek, mgr inż. Robert Tomaszewski
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Programowanie w języku wysokiego poziomu na
przykładzie języka Pascal - część 3
Tablice, rekordy i pliki
Arkadiusz Chrobot
Robert Tomaszewski
Karol Wieczorek
Katedra Informatyki, Politechnika Świętokrzyska w Kielcach
Bibliografia
Wprowadzenie
Tablica jednowymiarowa
Spis treści
1
Wprowadzenie
2
Tablica jednowymiarowa
3
Tablice wielowymiarowe
4
Algorytmy
5
Rekordy
Budowa
Użycie typu rekordowego
Przykład
6
Pliki
Wprowadzenie
Definiowanie plików
Operacje na plikach
Przykłady
7
Zadania
8
Bibliografia
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Wprowadzenie
Tablice i rekordy są strukturami danych, co oznacza, że zmienna typu tablicowego lub rekordowego może przechowywać jednocześnie kilka wartości.
W przypadku tablic wszystkie te wartości są tego samego typu. Rekordy
mogą przechowywać kilka wartości o różnych typach.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Tablica jednowymiarowa
Najprostszym przykładem tablicy (i prawdopodobnie najczęściej stosowanym) jest tablica jednowymiarowa. Zanim dowiemy się w jaki sposób definiować takie tablice w języku Pascal przyjrzymy się jej budowie. Poniższy
rysunek obrazuje strukturę tablicy jednowymiarowej.
0
1
2
3
4
5
3
4
2
5
Tablica podzielona jest na elementy. Każdy z elementów przechowuje pojedynczą wartość. Wszystkie wartości zgromadzone w elementach tablicy
mają ten sam typ. Mogą to być dowolne wartości mieszczące się w typie elementu. Każdy element ma również swój indeks (na rysunku u góry
elementu), który jednoznacznie określa jego położenie względem początku
tablicy (jest jego unikatowym identyfikatorem). [1, 2]
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Typ tablicowy
W języku Pascal istnieje kilka sposobów na zdefiniowanie zmiennej tablicowej (tablicy). Wygodnie jest najpierw zdefiniować w sekcji type program
lub podprogramu odpowiedni typ tablicowy.
Schemat definicji typu tablicowego
nazwa typu = array [przedział indeksów ] of typ elementu;
Typ elementu może być dowolny predefiniowanym typem języka Pascal lub
typem zdefiniowanym przez programistę. Przedział indeksów jest definiowany za pomocą nazwanego lub anonimowego typu okrojonego. [1, 2]
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Typ tablicowy - przykłady
Przykłady typów tablicowych
type
p r z e d z i a l = −5 . . 5 ;
T t a b l i c a = a r r a y [ p r z e d z i a l ] o f byte ;
T t a b l i c a 2 = array [ 1 . . 5 ] of r e a l ;
W przykładzie zdefiniowano dwa typu tablicowe o nazwach Ttablica i Ttablica2. W pierwszym typie do określenia zakresu indeksów użyto zdefiniowanego wcześniej typu okrojonego o nazwie przedzial. Wszystkie typy
okrojone budowane są na bazie typów porządkowych. Pierwsza wartość
w definicji typu okrojonego musi być mniejsza lub równa wartości drugiej. W typie Tablica2 zakres indeksów został określony za pomocą anonimowego typu okrojonego, umieszczonego bezpośrednio w definicji typu
tablicowego w nawiasach kwadratowych. [1, 2]
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Zmienne tablicowe
Zmienne tablicowe, nazywane w skrócie tablicami, deklarowane są w sekcji
var programu lub podprogramu, tak jak zmienne innych typów. Możemy
też zadeklarować zmienną tablicową używając anonimowego typu tablicowego.
Przykłady zmiennych tablicowych
v ar
tablica : Ttablica1 ;
t a b l i c a 2 : a r r a y [ 0 . . 9 ] o f word ;
Zmienna o nazwie tablica została zadeklarowana przy użyciu zdefiniowanego we wcześniejszym przykładzie typu o nazwie Ttablica1, a zmienna
o nazwie tablica2 przy użyciu typu anonimowego. Zalecanym sposobem
jest korzystanie z typów nazwanych przy deklarowaniu tablic. [1, 2]
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Odwołanie do elementów tablicy
Wartość pojedynczego elementu tablicy można uzyskać umieszczając indeks tego elementu w nawiasach kwadratowych, za nazwą tablicy. Przykładowo, jeśli chcemy wypisać na ekran wartość elementu tablicy o indeksie równym pięć, to napiszemy w programie następujący wiersz kodu:
writeln(tab[5]);. Należy pamiętać o tym, że wartość indeksu musi być prawidłowa, tj. element tablicy o takim indeksie musi istnieć!. Aby sprawnie
odwoływać się do większej liczby elementów możemy użyć pętli. Na przykład, jeśli chcemy wypisać na ekran elementy tablicy o indeksach od 2 do
5 możemy napisać następujący fragment kodu:
Indeksowanie elementów tablicy
for i := 2 to 5 do
write(tab[i]);
Zakładamy, że zmienna i ma odpowiedni typ porządkowy, w którym mieszczą się wartości 2, 3, 4 i 5 (np.: byte). [1, 2]
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Odwołanie do elementów tablicy
Jeśli wystąpi konieczność odwołania do wszystkich elementów tablicy, to
można użyć funkcji low i high do wyznaczenia indeksu odpowiednio pierwszego i ostatniego elementu tej tablicy.
Indeksowanie wszystkich elementów tablicy
for i := low(tab) to high(tab) do
write(tab[i]);
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Przekazywanie przez parametry do podprogramów
Jeśli zdefiniowaliśmy wcześniej typ tablicowy w sekcji type, to możemy
użyć go do zadeklarowania formalnego parametru tablicowego w nagłówku
procedury lub funkcji:
Przekazywanie przez parametry
procedure dane(t:tablica);
Można również w nagłówkach podprogramów deklarować otwarte parametry tablicowe.
Otwarty parametr tablicowy
procedure dane(t:array of byte);
Za pomocą takich parametrów można przekazywać dowolne tablice, których typ elementów jest zgodny z typem elementów w otwartym parametrze
tablicowym.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Przekazywanie przez parametry do podprogramów
Uwaga 1
Jeśli przekazujemy tablicę do podprogramu przez parametr otwarty, to jej
indeksy ulegją przeskalowaniu! Indeks pierwszego elementu wynosi zawsze
0, natomiast indeks ostatniego możemy wyznaczyć na podstawie jej rozmiaru i rozmiaru jej pojedynczego elementu, posługując się wyrażeniem:
sizeof(tab)/sizeof(tab[0]) - 1
Uwaga 2
Korzystając z kompilatora Turbo Pascal należy pamiętać, że nie pozwala on
przekazać za pomocą parametru o nazwanym typie tablicowym zmiennej
o anonimowym typie tablicowym, nawet jeśli liczba elementów i ich typ
w obu typach tablicowych się zgadzają. Inne kompilatory mogą nie posiadać
takiego ograniczenia.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Przekazywanie przez parametry do podprogramów
Uwaga 3
Jeśli używamy kompilatora Turbo Pascal, to nie powinniśmy tworzyć dużych tablic jako zmiennych lokalnych, a do procedur lub funkcji przekazywać tablice tylko przez stałą i zmienną (używać słów kluczowych const
i var z parametrami tablicowymi). W przypadku innych kompilatorów nie
musi to być prawdą.
Uwaga 4
Tablice nie mogą być wartościami zwracanymi przez funkcje, jako wynik ich
działania. Można obejść to ograniczenie przekazując tablie przez zmienną.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Tablice wielowymiarowe
Aby uzyskać wartość elementu w tablicy jednowymiarowej musimy podać
jedną współrzędną - jego indeks. W przypadku tablic wielowymiarowych
każdy element ma wiele indeksów (współrzędnych), które należy określić,
aby uzyskać wartość elementu. Najczęściej używa się tablic o niewielkiej
liczbie wymiarów. Zwykle są to tablice dwuwymiarowe, które wykorzystuje
się do reprezentowania macierzy.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Tablice dwuwymiarowe
Typ tablicy dwuwymiarowej można zdefiniować na wiele sposobów.
Definicje typów tablic dwuwymiarowych
type
macierz1
macierz2
wiersz =
macierz3
= a r r a y [ 0 . . 3 ] o f a r r a y [ 0 . . 3 ] o f word ;
= a r r a y [ 0 . . 3 , 0 . . 3 ] o f word ;
a r r a y [ 0 . . 3 ] o f word ;
= array [ 0 . . 3 ] of w i e r s z ;
Można również deklarować zmienne o anonimowych typach tablic dwuwymiarowych, ale w przypadku niektórych kompilatorów, takich jak Turbo
Pascal, występują problemy, kiedy próbujemy je przekazać przez parametry
do podprogramów.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Odwołanie do elementu tablicy dwuwymiarowej
Aby odwołać się do tablicy dwuwymiarowej należy podać dwie współrzędne (indeksy) elementu. Można to zrobić na dwa sposoby: tab[3,5]; lub
tab[3][5];. Ten drugi sposób jest obowiązuje również w wielu innych językach programowania (np. C,C++,Java). Jeśli odwołujemy się do większej
liczby elementów w tablicy dwuwymiarowej to możemy użyć pętli.
Tablica dwuwymiarowa i pętle
for i := 0 to 3 do
for j := 0 to 3 do
wirte(tab[i,j]);
Jeśli tablica dwuwymiarowa przedstawia macierz, to pierwsza współrzędna
jest indeksem wiersza, a druga indeksem kolumny. [1, 2]
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Sortowanie tablic
Jedną z najczęściej wykonywanych czynności na wartościach zgromadzonych w tablicy jednowymiarowej jest ich porządkowanie, które nazywa się
w informatyce sortowaniem. Istnieje wiele algorytmów sortowania, które
różnią się efektywnością. Jednym z najprostszych jest algorytm sortowania
przez wybór (ang. selection sort). Jego działanie można opisać następująco:
1
Znajdź najmniejszą wartość w tablicy i zapisz ją w jej pierwszym elemencie.
2
Znajdź ponownie wartość najmniejszą w tablicy, ale tym razem z poszukiwań wyłącz pierwszy element. Znalezioną wartość zapisz w drugim elemencie tablicy.
3
Podobnie postępuj z pozostałymi elementami, aż napotkasz na ostatni
element tablicy.
Następny slajd zawiera procedurę, która realizuje opisany algorytm.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Sortowanie tablic
Sortwanie przez wybór
procedure s e l e c t i o n s o r t ( var t : t a b l i c a ) ;
var
i , j , k , tmp : b y t e ;
begin
f o r i := l o w ( t ) t o h i g h ( t )−1 do
begin
k := i ;
f o r j := i +1 t o h i g h ( t ) do
i f t [ k ] > t [ j ] t h e n k := j ;
i f i <>k t h e n
begin
tmp:= t [ k ] ;
t [ k ]:= t [ i ] ;
t [ i ] : = tmp ;
end ;
end ;
end ;
Rekordy
Pliki
Zadania
Bibliografia
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Wyszukiwanie liniowe
Inną czynnością równie często wykonywaną na tablicach jednowymiarowych jest znajdywanie sprawdzanie, czy określona wartość się w nich znajduje. Również w tym przypadku istnieje wiele algorytmów, według których
może ona zostać wykonana. Jednym z najprostszych jest algorytm wyszukiwania liniowego. Polega on na sprawdzeniu wszystkich elementów tablicy. Jeśli podczas tego przeglądania zostanie znaleziony element zawierający daną wartość, to jest zwracany jego indeks. Jeśli zostaną odwiedzone
wszystkie elementy w tablicy, ale żaden z nich nie będzie zawierał szukanej wartości, to algorytm zasygnalizuje jej brak w tablicy, np. poprzez
zwrócenie nieistniejącego indeksu tablicy.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Wyszukiwanie liniowe
Wyszukiwanie liniowe
function wyszukiwanie liniowe ( var t : t a b l i c a ;
const v a l u e : byte ) : byte ;
{ Indeks 0 nie i s t n i e j e w t a b l i c y . }
var
i : byte ;
begin
w y s z u k i w a n i e l i n i o w e :=0;
i := l o w ( t ) ;
w h i l e i <=h i g h ( t ) do
begin
i f t [ i ]= v a l u e t h e n
begin
w y s z u k i w a n i e l i n i o w e := i ;
break ;
end ;
inc ( i );
end ;
end ;
Pliki
Zadania
Bibliografia
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Budowa
Definicja typu rekordowego
Definicja
Rekordy są strukturami danych, które mogą służyć do przechowywania
wartości różnych typów. [1, 2]
Typ rekordowy definiuje się w sekcji type programu lub podprogramu według następującego wzorca:
Budowa rekordu
nazwa typu rekordowego = record
nazwa pola 1: typ pola 1;
nazwa pola 2: typ pola 2;
..
.
nazwa pola n: typ pola n;
end;
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Budowa
Opis budowy rekordu
Poszczególne składowe rekordu nazywamy polami. Typ rekordowy nie może
określać zmiennej, której rozmiar jest większy niż 64 KB. Typy pól rekordu
mogą być dowolne. Jeśli któreś z pól rekordu jest rekordem, to mówimy,
że mamy do czynienia z rekordem zagnieżdżonym.
Jednym z najczęstszych przypadków użycia rekordu jest przechowywania
informacji o osobie. Typ rekordu, który przechowuje takie informacje może
być zdefiniowany następująco [1, 2]:
Rekord „Osoba”
type
osoba = record
imie:string[30];
nazwisko: string[50];
wiek:byte;
end;
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Budowa
Rekordy z wariantami
Rekordy z wariantami pozwalają na pewne sparametryzowanie tego typu
danych. [1, 2]
Polem wariantowym zawsze jest ostatnie pole w rekordzie.
Oto wzorzec takiego typu rekordowego:
Rekord z wariantami
nazwa typu rekordowego = record
nazwa pola 1: typ pola 1;
nazwa pola 2: typ pola 2;
..
.
case selektor: typ selektora of
wartość selektora 1 : (pole 1: typ
pole 2: typ
wartość selektora 2 : (pole 1 : typ
pole 2 : typ
pole 3 : typ
end;
pola
pola
pola
pola
pola
1;
2);
1;
2;
3);
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Budowa
Przykład rekordu z wariantem
Załóżmy, że potrzebujemy opisać rekordem dwie postacie z gry komputerowej: maga i wojownika. Będą one miały oczywiście wspólne cechy, jak
położenie w przestrzeni i nazwę, ale również będą miały cechy indywidualne, jak miara siły lub mocy magicznej. Moglibyśmy te postacie opisać
jednym typem (nie licząc pomocniczego typu wyliczeniowego):
Typ rekordu z wariantem
type
rodzaj = (mag, wojownik);
postac = record
x,y:real;
nazwa:string[40];
case r:rodzaj of
wojownik: (sila: byte);
mag:(moc magiczna:word);
end;
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Użycie typu rekordowego
Deklaracja i użycie zmiennych rekordowych
Zmienne typów rekordowych (inaczej zmienne rekordowe lub krótko: rekordy) deklarujemy tak samo, jak zmienne innych zdefiniowanych przez nas
typów.
Do pola zmiennej rekordowej możemy odwołać się na dwa sposoby:
1
za pomocą operatora kropki:
nazwa rekordu.nazwa pola;
2
za pomocą konstrukcji with:
with nazwa rekordu do nazwa pola;
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Przykład
Przykład programu „Dane osoby”
Na kilku poniższych slajdach będzie przedstawiony kod źródłowy programu, który umożliwi wypełnienie i wyświetlenie danych z tablicy rekordów
przechowujących dane osobowe:
Cz.1 - deklaracje typów
program t a b l i c a r e k o r d o w ;
uses
crt ;
type
osoba = record
imie : s t r i n g ;
nazwisko : s t r i n g ;
wiek : byte ;
end ;
t a b l i c a = a r r a y [ 1 . . 5 ] of osoba ;
var
tab : t a b l i c a ;
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Przykład
Przykład programu „Dane osoby” c.d.
Cz.2 - procedura do wprowadzania danych
procedure w y p e l n i j ( var t : t a b l i c a ) ;
var
i : byte ;
begin
f o r i := l o w ( t ) t o h i g h ( t ) do
w i t h t [ i ] do
begin
w r i t e ( ’ Podaj i m i e ’ , i , ’ : ’ ) ;
readln ( imie ) ;
w r i t e ( ’ Podaj nazwisko ’ , i , ’ :
readln ( nazwisko ) ;
w r i t e ( ’ Podaj wiek ’ , i , ’ : ’ ) ;
readln ( wiek ) ;
end ;
end ;
’ );
Rekordy
Pliki
Zadania
Bibliografia
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Przykład
Przykład programu „Dane osoby” c.d.
Cz.3 - procedura do wypisywania danych i program główny
procedure wypisz ( const t : t a b l i c a ) ;
var
i : byte ;
begin
f o r i := l o w ( t ) t o h i g h ( t ) do
begin
writeln ( ’ Imie : ’ , t [ i ] . imie ) ;
w r i t e l n ( ’ Nazwisko : ’ , t [ i ] . nazwisko ) ;
w r i t e l n ( ’ Wiek : ’ , t [ i ] . w i e k ) ;
readln ;
end ;
end ;
{ program g l o w n y }
begin
clrscr ;
w y p e l n i j ( tab ) ;
wypisz ( tab ) ;
end .
Zadania
Bibliografia
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Wprowadzenie
Jak przechowujemy dane?
Jeśli dane, które przetwarza lub produkuje program komputerowy mają być
dostępne po zakończeniu jego pracy, to muszą one zostać przechowane w
pamięci masowej komputera. Pamięć tego typu jest urządzeniem pozwalającym zachować zapisane w niej informacje w sposób trwały. Takimi
urządzeniami są np.:
dyski twarde,
płyty CD, DVD, Blue-Ray
pamięci typu Flash (np.: pen-drive)
Każde z tych urządzeń przechowuje dane w inny sposób. Aby ujednolicić sposób korzystania ze zgromadzonych na nich informacji wprowadzono
specjalną strukturę danych nazywaną plikiem.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Wprowadzenie
Rodzaje plików
Pliki gwarantują ten sam sposób korzystania z informacji niezależnie od
tego, czy znajdują się one na dysku twardym, w pamięci operacyjnej, czy
innym nośniku.
Język Turbo Pascal pozwala korzystać z trzech rodzajów plików [1, 2]:
1
plików tekstowych,
2
plików binarnych,
3
plików amorficznych (binarnych niezdefiniowanych)
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Wprowadzenie
Elementy plików
Pliki, niezależnie do którego rodzaju należą, składają się zawsze z pewnych
elementów.
W przypadku plików tekstowych tymi elementami są wiersze, czyli
ciągi znaków zakończone znakami końca wiersza (w przypadku
Turbo Pascala są to znaki #13 #10). Wynika stąd, że wiersze te
mogą mieć różny rozmiar.
Elementami plików binarnych są wartości określonego przez nas
typu. Mogą to być wartości typu byte, integer, real, a nawet typu
rekordowego.
W plikach amorficznych wartości,które są przechowywane nie mają
określonego typu. Cały plik jest podzielony na porcje o ustalonej
wielkości, zwane blokami.
Dla wszystkich typów plików możemy stosować dostęp sekwencyjny, tzn. taki,
w którym aby przeczytać lub zapisać element znajdujący się w dowolnym miejscu pliku musimy przeczytać wszystkie elementy znajdujące się przed nim. W
przypadku plików binarnych możemy mieć również swobodny dostęp.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Definiowanie plików
Definicja plików w Pascalu
W Turbo Pascalu jedynym typem plików, który powinniśmy zdefiniować jest
typ pliku binarnego zdefiniowanego. Określamy go w sekcji type programu
lub podprogramu według wzorca:
Tworzenie typu plikowego
nazwa typu pliku = file of nazwa typu elementu pliku;
Przykładowo, plik binarny, którego elementy byłyby typu integer miałby
następujący typ:
Typ pliku binarnego integer
type
plik = file of integer;
Pliki amorficzne, jak również tekstowe mają już zdefiniowane typy, które
są częścią języka i nie musimy im nadawać nowej nazwy. Typem pliku
amorficznego jest po prostu file, a tekstowego jest text.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Operacje na plikach
Schemat korzystania z pliku
Zanim będziemy mogli zapisać lub odczytać informacje z pliku musimy
wykonać dodatkowe czynności. Oto one:
1
skojarzenie zmiennej z plikiem,
2
otwarcie pliku,
3
przetwarzanie informacji zawartych w pliku,
4
zamknięcie pliku.
Należy zaznaczyć, że przy wykonywaniu każdej z tych operacji mogą pojawić się wyjątki, które należy obsłużyć. Powyższe operacje są realizowane
za pomocą różnych funkcji i procedur. Zostaną one opisane na kolejnych
slajdach.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Operacje na plikach
Opis procedur i funkcji operujących na plikach
Procedury do otwierania i zamykania plików
assign - działa w ten sam sposób dla wszystkich typów plików.
Wiąże ona zmienną plikową z nazwą pliku. Pierwszym parametrem
jej wywołania jest nazwa zmiennej plikowej, a drugim ciąg znaków
będący nazwą pliku.
close - Operacja zamykania pliku (dla wszystkich rodzajów)
rewrite - dla plików tekstowych procedura ta tworzy nowy plik, który
można wyłącznie zapisywać. Przy plikach binarnych, również
tworzony jest nowy plik, ale można zarówno odczytywać, jak i
zapisywać dane.
reset - dla plików tekstowych procedura ta otwiera już istniejący plik
w trybie tylko do odczytu. Przy pracy z plikami binarnymi, procedura
otwiera istniejący plik z prawami do odczytu i zapisu. Przy próbie
otwarcia pliku, który nie istnieje, zostanie zgłoszony wyjątek.
append - tryb występujący tylko w plikach tekstowych. Służy do
otwarcia istniejącego pliku do dopisania treści do już istniejącej.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Operacje na plikach
Opis procedur i funkcji operujących na plikach c.d.
Procedury do odczytu i zapisu
read/readln - jako pierwszy parametr wywołania podajemy nazwę
zmiennej plikowej, a następnie zmienną do której będą wczytane
informacje z pliku. Różnica między readln i read polega na tym, że
pierwsza odczytuje cały wiersz znaków, zakończony znakami końca
wiersza, natomiast druga czyta tyle informacji, ile wynika z liczby i
typu zmiennych do których one będą zapisywane. W przypadku
plików binarnych odczyt możliwy jest wyłącznie za pomocą
procedury read.
write/writeln - procedury służą do zapisywania danych do pliku, jeśli
jako pierwszy parametr podamy zmienną plikową. Sposób działania
jest analogiczny do procedur służących do odczytu.
readblock/writeblock - procedury służące do odczytu/zapisu danych
z/do plików amorficznych. Podajemy jej 3 parametry. Pierwsze dwa
są analogiczne do procedur write/read. Trzeci parametr to liczba
typu word określająca liczbę bloków do odczytu/zapisu.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Operacje na plikach
Pozostałe procedury i funkcje operujące na plikach
Procedury do odczytu i zapisu
eof - zwraca wartość true, jeśli został osiągnięty koniec pliku. Działa dla
wszystkich typów plików.
seekeof - działa podobnie, ale tylko dla plików tekstowych i ignoruje znaki białe
eoln - działa jedynie dla plików tekstowych i zwraca true, jeśli został osiągnięty
koniec wiersza
seekeoln - działa podobnie, ale ignoruje znaki spacji i tabulacji, jest przeznaczona
wyłącznie dla plików tekstowych
filesize - zwraca liczbę elementów pliku binarnego lub liczbę bloków pliku
amorficznego
filepos - działa dla plików binarnych i amorficznych, zwraca wartość typu longint,
która oznacza pozycję wskaźnika pliku
seek - ustawia pozycję wskaźnika pliku. Pierwszym argumentem jej wywołania
jest nazwa zmiennej plikowej, drugim wartość nowej pozycji wskaźnika pliku,
wartość ta jest typu longint, procedura ta jest przeznaczona dla plików binarnych
i amorficznych
truncat - „ucina” plik począwszy od bieżącej pozycji wskaźnika pliku, działa dla
plików binarnych i amorficznych
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Przykłady
Przykład 1 – pliki tekstowe
Cz.1
program p l i k i t e k s t o w e ;
uses crt ;
var T: text ;
procedure z a p i s z ( var F : text ) ;
{ Z a p i s u j e do p l i k u t e k s t o w e g o w i e r s z p o b r a n y od u z y t k o w n i k a . }
var
a: string [80];
i : byte ;
begin
rewrite (F ) ;
readln (a );
w r i t e l n (F , a ) ;
end ;
close ( f );
end ;
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Przykłady
Przykład 1 – pliki tekstowe c.d.
Cz.2
procedure odczytaj ( var F : text ) ;
{ Odczytuje z p l i k u tekstowego wiersz . }
var a : s t r i n g [ 8 0 ] ;
begin
reset (F ) ;
repeat
readln ( f , a );
writeln (a );
u n t i l eof ( f );
close ( f );
end ;
begin
{ Program g l o w n y }
clrscr ;
a s s i g n (T , ’ dane . t x t ’ ) ;
z a p i s z (T ) ;
clrscr ;
o d c z y t a j (T ) ;
readln ;
end .
Pliki
Zadania
Bibliografia
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Przykłady
Przykład 1 – pliki tekstowe – Opis
Zmienna plikowa, typu text jest kojarzona z plikiem o nazwie dane.txt w
bloku głównym programu. Plik ten tworzony jest w procedurze zapisz, w
wyniku wywołania procedury rewrite.
W tej też procedurze do pliku zapisywany jest wiersz zawierających ciągi
znaków podane przez użytkownika (o wielkości maksymalnie 80 znaków).
Procedura odczyt odczytuje dane z tego samego pliku. Odczytanie i wyświetlenie na ekran odbywa się wewnątrz pętli repeat. W obydwu procedurach ostatnią wykonywaną instrukcją jest zamknięcie pliku.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Przykłady
Przykład 2 – pliki binarne
Cz.1
program p l i k b i n a r n y ;
uses
crt ;
type
rec = record
x , y : integer ;
end ;
p l r e c = f i l e of rec ;
var
plik : pl rec ;
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Przykłady
Przykład 2 – pliki binarne c.d.
Cz.2
procedure z a p i s z ( var f : p l r e c ) ;
var
r : rec ;
i : byte ;
begin
rewrite ( f );
f o r i :=1 t o 5 do
begin
w i t h r do
begin
w r i t e l n ( ’ Podaj x ’ ) ;
readln (x );
w r i t e l n ( ’ Podaj y ’ ) ;
readln (y );
end ;
write ( f , r );
end ;
close ( f );
end ;
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Przykłady
Przykład 2 – pliki binarne c.d.
Cz.3
procedure wypisz ( var f : p l r e c ) ;
var
r : rec ;
begin
reset ( f );
w h i l e n ot e o f ( f ) do
begin
read ( f , r ) ;
write ( r . x , ’ ’ );
writeln ( r . y );
end ;
close ( f );
end ;
begin
a s s i g n ( p l i k , ’ dane . d a t ’ ) ;
zapisz ( plik );
clrscr ;
wypisz ( p l i k ) ;
end .
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Przykłady
Przykład 2 – pliki binarne – Opis
Powyższy program przetwarza informacje zawarte w pliku binarnym zdefiniowanym, którego elementami są rekordy. Taki rodzaj pliku nazywa się
krótko plikiem rekordowym. Każdy rekord zawiera dwa pola x i y, które
przechowują liczby całkowite.
Zadaniem programu jest utworzenie pliku o nazwie dane.dat, zapisanie
do niego pięciu rekordów zawierających dane pobrane od użytkownika, zamknięcie go, następnie ponowne otwarcie i wypisanie zawartości wszystkich
rekordów z pliku na ekran.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Zadania
Zadanie 1
Napisz podprogram odwracający porządek elementów w tablicy i wyświetlający tablicę przed i po operacji odwracania. Przed wywołaniem podprogramu użytkownik określa, ile elementów wprowadzi do tablicy. Zwróć
uwagę, że odwrócenie porządku elementów to nie to samo co wyświetlenie
tablicy od końca!
Przykład wydruku z programu:
Tablica WEJŚCIOWA:
12345
Tablica WYJŚCIOWA:
54321
Wykonaj powyższe zadanie z wykorzystaniem tablicy znaków (zmienna typu String[n]). Pamiętaj, że pod indeksem 0 kryje się informacja o rozmiarze
łańcucha a nie żaden ze znaków!
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Zadania
Zadanie 2
Napisz podprogram, który przyjmuje jako parametr tablicę elementów typu String, gdzie pojedynczy element tablicy (pojedyncza zmienna typu
String) przechowuje jeden wyraz. Procedura/funkcja przepisuje do drugiej, nowej tablicy tylko wyrazy będące palindromami (mają „oś symetrii”,
np. kajak, anna, abcba, itp.).
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Zadania
Zadanie 3
W tablicy elementów typu String w pojedynczym elemencie (pojedyncza
zmienna typu String) przechowywane jest imię i wiek rozdzielone dowolną liczbą spacji. Napisz podprogram, który podaną jako parametr, wyżej
wymienioną tablicę przepisuje do tablicy rekordów w ten sposób, że imię
trafia do pola imie (typu String), zaś wiek do pola wiek (typu Byte).
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Zadania
Zadanie 4
Napisz program, który zapisuje informacje o osobach do pliku rekordowego
(imię, nazwisko, wiek - ilość rekordów podaje użytkownik). Następnie program dla co drugiej osoby (pierwszej, trzeciej, piątej, itp.) sprawdza pole
wiek i jeżeli jest mniejsze od 10 to zwiększa jego wartość o 5 uaktualniając plik. Program musi wyświetlić poprawioną bazę osób (imię, nazwisko,
wiek, płeć).
Wskazówka: pamiętaj, że każda operacja odczytu/zapisu z/do pliku przesuwa wskaźnik położenia w pliku - w tym zadaniu przydatna okaże się
procedura Seek do cofania wskaźnika położenia po odczycie/zapisie.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Zadania
Zadanie 4
W pliku tekstowym we.txt zapisane są linie składające się z poprawnie zapisanych liczb całkowitych (typu Word) oraz mieszaniny liter i cyfr. Napisz
program, który do pliku wy.txt zapisze tylko cyfry (jeśli w danej linii nie ma
żadnej poprawnie zapisanej cyfry to nic nie przepisujemy, pomijamy taką
linię).
Przykład: a3sfs 5dfg 45 044 f45 → 45 044
Wskazówki: do przetwarzania kolejnych elementów w linii tekstu przydatne będą funkcje/procedury Pos, Copy i Delete. Sprawdzenia, czy dany
łańcuch znaków (String) jest liczbą można dokonać procedurą Val.
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Bibliografia
Andrzej Marciniak.
Borland Pascal 7.0.
Wydawnictwo Nakom, Poznań, 1994.
Keith Weiskamp.
Borland Pascal 7.0.
WNT, Warszawa, 1996.
Rekordy
Pliki
Zadania
Bibliografia
Wprowadzenie
Tablica jednowymiarowa
Tablice wielowymiarowe
Algorytmy
Rekordy
Pliki
Zadania
Bibliografia
Program Rozwojowy Potencjału Dydaktycznego Politechniki Świętokrzyskiej w Kielcach: kształcenie na miarę sukcesu.
Priorytet IV
Szkolnictwo wyższe i nauka.
Działanie 4.1
Wzmocnienie i rozwój potencjału dydaktycznego uczelni oraz zwiększenie liczby absolwentów kierunków o kluczowym znaczeniu dla gospodarki opartej na wiedzy.
Poddziałanie 4.1.1
Wzmocnienie potencjału dydaktycznego uczelni.
Umowa: uda-pokl.040.01.01-00-175/08-00
Materiały dydaktyczne „Programowanie w języku wysokiego poziomu na przykładzie języka Pascal
- część 2” (Moduł nr 12) zrealizowane do Zadania 9
Autorzy: mgr inż. Arkadiusz Chrobot, mgr inż. Karol Wieczorek, mgr inż. Robert Tomaszewski

Podobne dokumenty