PROGRAMOWANIE STRUKTURALNE Wprowadzenie do programowania w TP. część 3
Temat: Tablice.
Tablica Tablica to struktura będąca uporządkowanym zbiorem elementów. Każdy element posiada własny niepowtarzalny numer pozwalający go szybko odnaleźć. Tablicę można porównać do ponumerowanych wieszaków w szatni: każdemu numerowi odpowiada dokładnie jedna zawieszona kurtka lub płaszcz - okrycie, aby odnaleźć kurtkę wystarczy znać przypisany jej numer.
Tablica jednowymiarowa Deklaracja tablicy var tablica = array[1..N] of typ; gdzie tablica – nazwa tablicy [1..N] - rozmiar tablicy od 1 do N typ - typ tablicy (np. integer)
Temat Zbiory
Zbiory (sets) Zbiory wykorzystuje się do przechowywania kolekcji elementów porządkowych. TYPE zbior = SET OF typ_podstawowy; (w Pascalu liczba elementów do 256)
Przykłady TYPE tydzien = (po, wt, sr, cz, pi, so, ni); zbiorliczb = SET OF 0..47; zbiorliter = SET OF 'A'..'Z'; dni_wolne = SET OF pi..ni; Tznakow = SET OF char; Tliczb = SET OF byte;
Przykłady var zbiorA, zbiorB, zbiorC: SET OF byte; begin zbiorA := [1,2,5,7]; zbiorB := [3,4,5,6]; zbiorC := zbiorA + zbiorB - [5]; if 5 in zbiorC then writeln (‘OK’); if 1 in zbiorC then writeln (‘Jest 1’); end.
Temat Rekordy
Rekordy – własne typy danych Czasami zachodzi potrzeba utworzenia własnego typu - rekordu, który będzie przechowywał wymyślone przez nas dane. Przypuśćmy że chciałbyś zbudować prostą bazę danych zawierającą imiona, nazwiska i inne dane swoich klientów. Zamiast przechowywać wszelkie dane w różnych osobnych tablicach, to tworzymy rekord.
Przykład type ksiazka=record autor:string[40]; nazwa:string[80]; rokwyd:integer; end; var biblioteka:array[1..50] of ksiazka; // … odwołanie do zawartości rekordu writeln(‘Autor: ’,biblioteka[2].autor);
Temat Wskaźniki
Wskaźniki Wskaźniki to adresy pamięci, które pokazują komputerowi miejsce gdzie znajdują się jakieś dane. Pamięć do której odnoszą się wskaźniki można w każdej chwili zwalniać, deklarować i zmieniać.
Wskaźniki – uwagi praktyczne Bez wskaźników nie byłoby możliwe nieograniczone tworzenie nowych danych, np. w słowniku. Gdyby nie wskaźniki mielibyśmy z góry określoną liczbę słów, które słownik byłby w stanie zapamiętać, oraz nie moglibyśmy w systemie uruchomić większej liczby programów niż w nim zaplanowano.
Przykład var wsk_na_liczbe:^integer; begin clrscr; new(wsk_na_liczbe); writeln('liczba=',wsk_na_liczbe^); dispose(wsk_na_liczbe); end.
Typ pointer Typ wskaźników nazywa się pointer. Gdy jakąś zmienną zadeklarujesz jako poiner, będzie ona wskaźnikiem. Wskaźniki mogą adresować różne typy zmiennych. Mogą adresować liczby, napisy, tablice, itd. Znacznik @ oznacza pobranie adresu zmiennej. Typ pointer należy rzutować (unikniemy błędu kompilacji) w określony typ.
Przykład var wskaznik:pointer; //tworzenie wskaźnika tekst:string; begin clrscr; tekst:=‘Zwykły tekst'; wskaznik:=@tekst; //pobranie adresu writeln(string(wskaznik^)); //rzutowanie end.
Posługiwanie się wskaźnikami i zmiennymi dynamicznymi Temat Posługiwanie się wskaźnikami i zmiennymi dynamicznymi
Ćwiczenia praktyczne
Funkcje i procedury dynamicznego przydziału pamięci Temat Funkcje i procedury dynamicznego przydziału pamięci
Wprowadzenie Dynamiczne struktury danych to takie, w których pamięć może być przydzielana w trakcie wykonywania programu, do tej operacji służą zmienne typu wskaźnikowego i zmienne wskazywane.
Wprowadzenie Struktury te mogą być proste i złożone. Za ich pomocą można tworzyć np. dynamiczne struktury listowe, tj. uporządkowane zbiory składników, niekoniecznie o jednakowych typach. Składniki te mogą być elementami prostymi (liczbami, czy pojedynczymi znakami) lub elementami złożonymi (tabliczmi, rkordami, obiektami, listami).
Typy struktur listowych stosy kolejki listy jednokierunkowe dwukierunkowe cykliczne drzewa
Tworzenie i przetwarzanie dynamicznych struktur danych- stos Temat Tworzenie i przetwarzanie dynamicznych struktur danych- stos
Stos Stos (stack) jest to struktura danych składająca się z liniowo uporządkowanych zbiorów składników, z których tylko „najwyższy” jest niejako dostępny. Miejsce dostępu to wierzchołek stosu. Jest to jedyne miejsce, do którego można dołączyć lub z którego można usunąć elementy.
wierzchołek Stos DANE wskaźnik Każdy składnik stosu posiada wyróżniony element (wskaźnik), który wskazuje na następujący po nim (aders) składnik Wskaźnik ostatniego składnika stosu wskazuje na pusty adres nil. Wierzchołek stosu to miejsce wstawiania i usuwania danych. DANE wskaźnik DANE wskaźnik DANE wskaźnik nil
Tworzenie i przetwarzanie dynamicznych struktur danych- kolejka Temat Tworzenie i przetwarzanie dynamicznych struktur danych- kolejka
Kolejki Kolejka (queue) jest strukturą składającą się z liniowo uporządkowanych zbiorów składników, do której można dołączyć składnik tylko w jednym końcu (na końcu kolejki), a usunąć tylko na drugim końcu (na początku).
Kolejki Powiązanie między składnikami kolejki jest podobne do powiązań między składnikami stosu. Natomiast usuwamy składniki tylko na początku kolejki, zaś dodajemy na końcu kolejki. wierzchołek DANE wskaźnik DANE wskaźnik DANE wskaźnik DANE wskaźnik początek kolejki koniec kolejki nil
Tworzenie i przetwarzanie dynamicznych struktur danych- listy Temat Tworzenie i przetwarzanie dynamicznych struktur danych- listy
Listy Listą (liniową) nazywamy liniowo uporządkowany zbiór składników, z którego w dowolnym miejscu można usunąć składnik, jak również dodać. Wyróżniamy: listy jednokierunkowe, listy dwukierunkowe, listy cykliczne.
Listy jednokierunkowe Organizacja listy jednokierunkowej jest podobna do organizacji stosu bądź kolejki.
Listy dwukierunkowe Listą dwukierunkową nazywamy liniowo uporządkowany zbiór składników, w którym dla każdego składnika, poza pierwszym i ostatnim, jest określony składnik poprzedni i następny. wierzchołek wskaźnik 1 DANE wskaźnik 2 wskaźnik 1 DANE wskaźnik 2 wskaźnik 1 DANE wskaźnik 2 wskaźnik 1 DANE wskaźnik 2 nil
Listy cykliczne Lista cykliczna powstaje z listy jedno- lub dwukierunkowej przez powiązanie ostatniego składnika listy z jej pierwszym składnikiem. W wyniku takiego powiązania wyróżnione składniki (pierwszy i ostatni) przestają pełnić swoje funkcje. W liście cyklicznej żaden ze składników nie jest wyróżniony.
Listy cykliczne wskaźnik 1 DANE wskaźnik 2 wskaźnik 1 DANE wskaźnik 2
Tworzenie i przetwarzanie dynamicznych struktur danych- drzewa Temat Tworzenie i przetwarzanie dynamicznych struktur danych- drzewa
Drzewo binarne korzeń DANE wskaźnik 0 wskaźnik 1 DANE wskaźnik 0 liść nil DANE wskaźnik 0 wskaźnik 1 DANE wskaźnik 0 wskaźnik 1 DANE wskaźnik 0 wskaźnik 1 nil nil nil nil DANE wskaźnik 0 wskaźnik 1 DANE wskaźnik 0 wskaźnik 1