[ Pobierz całość w formacie PDF ]
większych struktur dynamicznych. Wreszcie instrukcja release zwalnia całą stertę
wzwyż począwszy od miejsca zarejestrowanego w zmiennej Sterta.
Na zakończenie tego rozdziału spróbujemy wykorzystać mechanizmy zmiennych dyna-
micznych do lepszego zagospodarowania pamięci w programie obsługi biblioteki.
Podane niżej informacje będą miały z konieczności charakter wskazówek, powinny
jednak umożliwić Ci skuteczne wprowadzenie zmian do programu. Przede wszystkim
należy zadeklarować odpowiednie struktury danych:
type
{ ... }
PKsiazka = ^Ksiazka;
var
Katalog : array[1..2000] of PKsiazka;
i usunąć zbędne już definicje stałych określających ograniczenia pamięciowe. Liczba
2000 w deklaracji tablicy Katalog została wybrana arbitralnie (2000 pozycji to około
170 kB). Kolejnym krokiem jest zmodyfikowanie wszystkich procedur korzystających
z parametrów typu Ksiazka przez zmianę typu parametru na PKsiazka, np.:
procedure WprowadzDane(var r : PKsiazka);
co umożliwi im operowanie na zmiennych wskazywanych parametrem. Oczywiście
w treści tak zmodyfikowanej procedury należy wszystkie odwołania do zwykłego
parametru zastąpić odwołaniami wykorzystującymi wskaznik, np.:
with r^ do {... }
Modyfikacja procedury sortującej jest zbędna, a nawet niepożądana. W nowym prog-
ramie zamiana rekordów przyjmie formę zamiany wskazników, co oczywiście będzie
szybsze i bardziej efektywne niż kopiowanie całych rekordów.
Wszelkie wywołania procedur pozostaną niezmienione, chociaż faktycznie zamiast
rekordu zawsze przekazywany będzie wskaznik do rekordu. Natomiast wszystkie
bezpośrednie odwołania do pól rekordów zapisanych w tablicy Katalog należy zas-
tąpić odwołaniami wykorzystującymi wskazniki:
Katalog[LbPoz]^.Licznik := 0;
Nie wolno również zapomnieć o uzupełnieniu procedur tworzących i usuwających
rekordy o wywołania procedur new i dispose, których brak spowoduje najpewniej
błyskawiczne zawieszenie komputera:
procedure DodajKsiazke;
{ ... }
writeln('Nowa pozycja w katalogu: ', Licznik);
new(Katalog[Licznik]); { utwórz nowy rekord w katalogu }
{ ... }
120 Turbo Pascal programowanie
procedure UsunKsiazke(Numer : integer);
begin
dispose(Katalog[Numer]);
{ ... }
Podobnie musisz postąpić z procedurą OdczytajZDysku (w procedurze zapisu usu-
wanie rekordów nie jest konieczne, ale przydzielona pamięć powinna zostać zwolniona
przed zakończeniem działania programu).
Powyższe wskazówki nie obejmują operacji pomocniczych, jak np. sprawdzanie możli-
wości utworzenia kolejnego rekordu. Powinny one jednak wystarczyć Ci do skutecz-
nego zmodyfikowania programu.
Zapamiętaj
" Do przechowywania większych ilości danych możesz w Pascalu wykorzystać
zmienne wskazywane (dynamiczne).
" Zmienne wskazywane są umieszczane na tzw. stercie (teoretycznie w dowolnym
miejscu pamięci). Mogą one być tworzone i niszczone dynamicznie, w zależ-
ności od potrzeb.
" Zmienna wskazywana lokalizowana jest za pomocą wskaznika, który zawiera jej
adres (miejsce w pamięci). Wskazniki mogą wskazywać na zmienne
konkretnego typu, mogą też być wskaznikami amorficznymi (pointer).
" Przed wykorzystaniem zmiennej dynamicznej należy ją utworzyć (procedurą
new), a po wykorzystaniu usunąć (procedurą dispose).
" Do przydzielania i zwalniania bloków pamięci na stercie służą również proce-
dury GetMem, FreeMem, mark i release.
Pozyteczne drobiazgi, czyli moduly biblioteczne 121
Pożyteczne drobiazgi,
czyli moduły
biblioteczne
Ile razy zastanawiałeś się, jak wyczyścić ekran, zmienić kolor tekstu czy wprowadzić
znak z klawiatury bez naciskania klawisza ENTER? Wykonanie tych czynności nie
wymaga zachodu: wystarczy wywołać odpowiednią procedurę biblioteczną. Jak sama
nazwa wskazuje, procedura taka nie jest na stałe wbudowana w język
programowania, lecz pobierana z oddzielnego pliku (biblioteki) i dołączana do
programu w trakcie tzw. konsolidacji (następującej po kompilacji).
Pascalowe pliki biblioteczne noszą nazwę modułów (ang. unit). Wersja 7.0 oferuje
programiście dziesięć modułów standardowych:
System wszystkie procedury standardowe;
Crt obsługa monitora, klawiatury i głośnika;
Dos obsługa funkcji systemowych (wywołania funkcji systemu MS-
DOS);
Graph obsługa grafiki;
Strings obsługa łańcuchów ASCIIZ;
WinDos odpowiednik modułu DOS wykorzystujący łańcuchy ASCIIZ;
Printer obsługa drukarki;
Overlay obsługa tzw. nakładek;
Turbo3 moduł uzgadniający z Turbo Pascalem 3.0;
Graph3 obsługa tzw. grafiki żółwia (używanej w Turbo Pascalu 3.0).
122 Turbo Pascal programowanie
Oddzielna, obszerna grupa modułów tworzy bibliotekę Turbo Vision, którą nie będzie-
my się tutaj zajmować.
Jak nietrudno zauważyć, każdy moduł specjalizuje się w określonych operacjach
(wyjątkiem jest moduł System, zawierający wszystkie procedury i funkcje standar-
dowe). Najczęściej używane moduły (System, Crt, Dos, Printer i Overlay)
umieszczono w specjalnym pliku TURBO.TPL, ładowanym do pamięci wraz z IDE Turbo
Pascala, dzięki czemu ich zawartość dostępna jest natychmiast. Kod pozostałych
[ Pobierz całość w formacie PDF ]