ZSI.Techniki Programowania Wykład 8
Transkrypt
ZSI.Techniki Programowania Wykład 8
ZSI.Techniki Programowania Wykład 8 Janusz Jabłonowski Moduły w Pascalu Cz sto zdarza si , e tworzymy zestaw procedur (funkcji, stałych, typów i zmiennych) realizuj cych powi zane ze sob operacje (zwykle dotycz ce jednego typu danych, np. operacje na wektorach). Poniewa taki zestaw mo na potem wykorzysta w wielu programach, byłoby wygodnie nie musie kopiowa go tekstowo za ka dym razem, gdy chcemy go u y , lecz móc tyko wskaza , e dany zestaw ma by teraz u yty. (Podobnie jak z procedur , raz j definiujemy, a potem wielokrotnie u ywamy podaj c tylko jej nazw ). Taki zestaw nazywamy modułem. Zwykle moduł zawiera deklaracje potrzebne lokalnie (na potrzeby modułu) oraz deklaracje eksportowane, czyli takie, które b dzie wida poza modułem. Moduły mo na bardzo łatwo tworzy w Pascalu (precyzyjniej: w ró nych implementacjach Pascala, jak np. Free Pascal, Delphi, Turbo Pascal). Moduł zapisujemy w pliku z rozszerzeniem .pas. W samym module trzeba dopisa kilka specjalnych klauzul i informacj o eksportowanych deklaracjach (opisane poni ej). Po skompilowaniu otrzymujemy plik o takiej nazwie jak plik .pas ale o innym rozszerzeniu (.ppw we Free Pascalu, .dcu w Delphi, .tpu w Turbo Pascalu). Ten plik zawiera skompilowane tre ci procedur i funkcji modułu (oraz informacje o innych deklaracjach z modułu). Je li kto chce skorzysta z tego modułu, to potrzebuje TYLKO pliku skompilowanego, plik ródłowy (.pas) nie jest ju potrzebny! • Struktura modułu Moduł ma nast puj c struktur : unit <nazwa>; interface <lista eksportowanych deklaracji> implementation <lista deklaracji lokalnych i definicje eksportowanych procedur> begin <inicjalizacja> end. Uwagi: 1) <nazwa> musi by taka jak nazwa pliku. 2) W <li cie eksportowanych deklaracji> podajemy same nagłówki eksportowanych procedur, ich tre ci (wraz z powtórzonymi nagłówkami) musz si znajdowa w cz ci implementation. 3) <inicjalizacja> wykonuje si tylko raz, przed rozpocz ciem wykonywania głównego programu. 4) Je li inicjalizacja jest zb dna, to mo na j pomin wraz ze słowem begin. 5) Zamiast słowa kluczowego begin mo na u y słowa initialization. W takim przypadku mo na te umie ci w module cz rozpoczynaj c si słowem finalization, opisuj c operacje, które maj si wykona , podczas ko czenia pracy programu. • Korzystanie z modułów Korzystanie z modułów jest bardzo proste: na pocz tku korzystaj cego z nich programu (lub modułu) umieszczamy klauzul uses <nazwa>; i od tej pory wszystkie deklaracje z importowanego modułu s widoczne w programie tak, jakby były w nim zadeklarowane. • Struktura programu korzystaj cego z modułów (rysunek) • Zalety stosowania modułów • • • lepsza strukturalizacja programu, ukrywanie implementacji, szybsza kompilacja. Kolejki i stosy W bardzo wielu algorytmach pojawia si potrzeba wykorzystania struktury danych, umo liwiaj cej wstawianie i pobieranie danych. Dwiema najprostszymi taki strukturami s stos i kolejka. • Stos Umo liwia wstawianie elementów i ich pobieranie z pocz tku (wierzchołka) stosu. Czasami mówi si , e stos realizuje strategi wstawiania/pobierania LIFO (Last In, First Out; ostatni wszedł, pierwszy wyjdzie). Stos odwraca kolejno wstawianych elementów. Operacje: procedure wstaw(var s: TStosu; elt: TDanych); procedure pobierz(var s: TStosu; var elt: TDanych); function pusty(s: TStosu): boolean; ----------------------------------------------procedure pierwszy(s: TStosu; var elt: TDanych); procedure ini(var s: TStosu); procedure usu _wszystko(var s: TStosu); Uwagi implementacyjne: • • • • co to jest TDanych, jak reprezentowa stos, czyli co to jest TStosu (tablica, lista), czemu pierwszy i pobierz nie s funkcjami, czy parametr funkcji pusty powinien by przekazywany przez zmienn , czy przez warto , • • • • • czasami definiuje si troch inne operacje (pobierz tylko usuwa element ze struktury danych), cz sto spotykane nazwy angielskie (wstaw - push; pobierz - pop; pusta - empty; pierwszy - top), czym si ró ni ini od usu _wszystko, czy warto wprowadza usu _wszystko. Kolejka Umo liwia wstawianie nowych elementów na koniec i pobieranie elementów z pocz tku. Czasami mówi si , e kolejka realizuje strategi wstawiania/pobierania FIFO (Firsty In, First Out; pierwszy wszedł, pierwszy wyjdzie). Kolejka zachowuje kolejno wstawianych elementów. Operacje: procedure wstaw(var k: TKolejki; elt: TDanych); procedure pobierz(var k: TKolejki; var elt: TDanych); function pusta(k: TKolejki): boolean; ----------------------------------------------procedure pierwszy(k: TKolejki; var elt: TDanych); procedure ini(var k: TKolejki); procedure usu _wszystko(var k: TKolejki); Uwagi implementacyjne: • • • • • • • • co to jest TDanych, jak reprezentowa kolejk , czyli co to jest TKolejki (tablica, lista), czemu pierwszy i pobierz nie s funkcjami, czy parametr funkcji pusta powinien by przekazywany przez zmienn , czy przez warto , czasami definiuje si troch inne operacje (pobierz tylko usuwa element ze struktury danych), cz sto spotykane nazwy angielskie (wstaw - enqueue, put; pobierz - dequeue, get; pusta - empty; pierwszy - first), czym si ró ni ini od usu _wszystko, czy warto wprowadza usu _wszystko. • Przykłady zastosowa : Algorytmy grafowe (stos, kolejka), realizacja rekursji (stos), ONP i wyliczanie warto ci wyra e (stos). • Realizacja stosu i kolejki za pomoc modułów • podział na cz publiczn i prywatn • decyzja czy operacje maj mie struktur danych (stos, kolejk ) jako pierwszy parametr Struktury listowe Typy wska nikowe s niezwykle elastyczne i pozwalaj budowa praktycznie dowolnie wymy lne struktury danych. Oprócz pojedynczych list mo na definiowa tablice list, listy tablic, listy list itp. Przykłady zastosowa bardziej rozbudowanych struktur listowych: • rzadkie macierze (skrypt) • sortowanie topologiczne (skrypt) Du o informacji o strukturach listowych mo na znale w skrypcie (dost pnym w naszej bibliotece) "Pracownia Programowania I" pod redakcj M. Cichego i S. Szpakowicza.