Wykład 7
Przetwarzanie plików :
W języku Turbo Pascal wyróżniamy trzy klasy plików ( zdefiniowane, tekstowe i niezdefiniowane). Poza przypadkiem korzystania z predefiniowanych zmiennych plikowych tekstowych Input i Output w pozostałych przypadkach odpowiednia zmienna plikowa musi być zawsze opisana, a także skojarzona z własciwym fizycznym zbiorem danych. Przed przystąpieniem do przetwarzania tego zbioru należy jeszcze zmienną plikową 'otworzyć' a po zakończeniu przetwarzania - ' zamknąć'
Ogólny schemat przetwarzania pliku
1. Deklaracja zmiennych plikowych
2. Skojarzenie zmiennej plikowej z plikiem fizycznym
3. Otwarcie pliku
4. Operacje na zawartości pliku fizycznego
5. Zamknięcie pliku
Ad.1 Deklaracja typu plikowego :
TYPE id_typu_plikowego = FILE OF id_typu_plikowego
VAR zmienna : id_typu_plikowego
Ad.2 Skojarzenie zmiennych plikowych z plikami fizycznymi
ASSIGN(id_zmiennej_plikowej,nazwa_pliku_fizycznego);
Przykład :
1) var plik1 : Text;
.............
Assign (plik1,'LPT1');
2) var plik2 : file of Real;
..............
Assign (plik2,'A:\ZBIORY\ZBIOR2.DOC);
Ad.3 Otwarcie pliku
W zależności od kierunku przesyłania elementów do lub z pliku stosowane są trzy standardowe procedury jego otwarcia. Są to procedury : Rewrite, Reset i Apend.
Jeżeli tworzymy nowy fizyczny (zewnętrzny) zbiór danych to należy zastosować procedurę Rewrite, której wywołanie ma postać:
Rewrite (zmienna plikowa)
Wywołanie procedury Rewrite powoduje utworzenie nowego fizycznego zbioru danych o nazwie skojarzonej z podaną zmienną plikową (przedtem musi być wywołana procedura Assign). Jeżeli zewnętrzny zbiór danych o takiej nazwie już istnieje to zostanie on usunięty i w jego miejscu będzie utworzony nowy zbiór. W obu przypadkach na dysku lub dyskietce faktycznie zostanie utworzony zbiór pusty, którego aktualnym położeniem będzie jego początek.
Do otwarcia pliku skojarzonego ze zbiorem już istniejącym służą procedury Reset i Append. Wywołanie procedury Reset ma postać :
Reset(zmienna-plikowa)
Reset powoduje po otwarciu pliku ustawienie zewnętrznego zbioru w pozycji początkowej, tj. tuż przed jego pierwszym elementem.
Natomiast wywołanie procedury Append które ma postać :
Append(zmienna-plikowa)
dotyczy wyłącznie plików tekstowych (Text) i powoduje po otwarciu pliku ustawienie zbioru na jego końcu. Dzięki temu możliwe staje się bezpośrednie dopisywanie tekstów na końcu zbioru.
Przykłady :
1) Type complex = record
` re,im : Real
end;
var plik : file of complex;
......................
Assign (plik3,'A:ZBIOR3.OUT);
Rewrite (plik3);
Po skojarzeniu zmiennej plikowej plik3 (typu rekordowego complex) ze zbiorem ZBIOR.OUT, znajdującym się na dyskietce w napędzie A, nastąpi otwarcie pliku.
2) var plik5 : file of record
re,im : Real
.....................
Assign (plik5,'B:ZBIOR5.IN);
Reset (plik5);
3) var plik6 : Text;
.................
Assign (plik6,'C:\ZBIORY\ZBIOR6.TXT);
Append (plik6);
Po otwarciu pliku możliwe jest wykonanie na nim określonych operacji po których zakończeniu należy plik zamknąć . Operację zamknięcia pliku dokonuje się poprzez wywołanie procedury Close:
Close (zmienna-plikowa)
Ad. 4 (Operacje na zawartości pliku :)
- zakładanie, (tj. tworzenie, nowego fizycznego zbioru danych) pliku
- wprowadzanie do założonego pliku elementu,
- dodawanie nowych elementów do pliku juz istniejącego
- przeszukiwanie pliku - odnajdywanie w nim elementów
- wyprowadzanie elementów z pliku
- wymiana elementów pliku
Grafika komputerowa w Pascalu jest realizowana za pomocą funkcji i procedur zgrupowanych w obrębie modułu Graph. Procedury i funkcje tego modułu pozwalają rysować na ekranie pracując w trybie graficznym krzywe różnych kształtów i kolorów, wypełniać kontury określonym kolorem, a także wyświetlać na ekranie napisy (poziomo i pionowo) w różnych krojach pisma, z możliwością ich zmniejszania i powiększania.
Mikrokomputery typu PC mogą by_ wyposażone w różne karty graficzne np. CGA, EGA, HERCULES, VGA obsługujące ekrany monitorów o różnej rozdzielczości. Oczywiście rozdzielczość ekranu , czyli liczba wyświetlanych w poziomie i pionie punktów (pixels) jest ściśle związana z procedurami i funkcjami graficznymi . W celu uniezależnienia systemu Turbo Pascal od karty graficznej przewidziano dla najczęściej używanych kart sterowniki tj. programy obsługujące związek procedur i funkcji modułu Graph z tymi kartami
ELEMENTY GRAFIKI KOMPUTEROWEJ
Funkcje i procedury graficzne ð modu_ GRAPH
Możliwości :
- krzywe różnych kształtów i kolorów
- wypełnia_ kontury określonym kolorem
- wyprowadza_ napisy na ekran ( poziomo i pionowo)
- wybór kroju pisma i wielkości
Karty graficzne : CGA, EGA, HERCULES, VGA, SVGA
Rozdzieczość ekranu : Liczba wyświetlanych w poziomie i pionie punktów (pixels)
Sterowniki : programy obsługujące związek procedur i funkcji modułu GRAPH z pracującymi kartami.
W programie część graficzną można podzielić na trzy części
- inicjacjalizację trybu graficznego
- część wykonawczą części graficznej
- zamknięcie trybu graficznego
STRUKTURA PROGRAMU GRAFICZNEGO
Program nazwa;
uses Graph;
begin
............
InitGraph ( sterownik, tryb, skorowidz);
........
CloseGraph;
RestoreCrt
end.
Program do sprawdzenia sprzętu komputerowego
Program AM52;
var sterownik,tryb : Integer;
DetectGraph (sterownik,tryb);
Writeln ('sterownik = ',sterownik,' tryb = ',tryb)
1) Jeśli zmienne sterownik i tryb są zmiennymi typu Integer to wykonanie instrukcji :
sterownik := Detect;
InitGraph (sterownik,tryb,'C:\TP55');
spowoduje zainicjowanie trybu graficznego właściwego dla karty graficznej jaką posiada zestaw komputerowy
Procedury Modułu GRAPH
InitGraph (VAR Ster, tryb : Integer; sciezka : string) - inicjacja grafiki
CloseGraph - zamknięcie trybu graficznego
RestoreCrtGraph - chwilowe przejście do trybu tekstowego
SetGraphMode - powrót do trybu graficznego
DetectGraph - rozpoznanie karty graficznej
ClearDevice - czyszczenie ekranu
Procedury graficzne do rysowania
Move To(X,Y : Integer) - przemieszcza kursor graficzny do punktu X,Y
MoveRel(Dx,Dy : Integer) - przemieszcza kursor graficzny o Dx i Dy
Line(x1,y1,x2,y2) - rysuje linię o podanych współrzędnych ko_ca i pocz_tku
Line Rel(dx,dy) - rysuje linię zaczynającą się w punkcie wskazanym przez kursor i kończącą się w punkcie o współrzędnych określonych względem jego pozycji.
LineTo(x,y) - rysuje linię zaczynającą się w punkcie wskazanym przez kursor i kończącą się w punkcie o podanych współrzędnych
Procedury graficzne modułu GRAPH
Rectangle(x1,y1,x2,y2) - rysuje prostokąt
Circle(x,y,r) - rysuje okrąg
DrawPoly(n : word;var wierzcholki) - rysuje linię łamaną o zadanych wierzchołkach
SetColor(param) - ustala aktualny kolor kreślenia linii
SetBkColor(param) - ustala aktualny kolor tła
...
DWito