Prezentacja - podstawy programowania w Pascalu cz. 3.

Download Report

Transcript Prezentacja - podstawy programowania w Pascalu cz. 3.

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
zbiorliczb
zbiorliter
dni_wolne
Tznakow
Tliczb
=
=
=
=
(po, wt, sr, cz, pi, so, ni);
SET OF 0..47;
SET OF 'A'..'Z';
SET OF pi..ni;
= SET OF char;
= 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);
wsk_na_liczbe^:=5;
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.
Temat
Posługiwanie się wskaźnikami i
zmiennymi dynamicznymi
Ćwiczenia praktyczne
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
Temat
Tworzenie i przetwarzanie
dynamicznych struktur danychstos
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
DANE
Stos
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.
DANE
wskaźnik
DANE
wskaźnik
• Wierzchołek stosu to miejsce
wstawiania i usuwania danych.
DANE
nil
wskaźnik
Temat
Tworzenie i przetwarzanie
dynamicznych struktur danychkolejka
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
DANE
DANE
DANE
wskaźnik
wskaźnik
wskaźnik
wskaźnik
początek
kolejki
koniec
kolejki
nil
Temat
Tworzenie i przetwarzanie
dynamicznych struktur danychlisty
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
wierzchołek
• 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.
wskaźnik 1
wskaźnik 1
wskaźnik 1
wskaźnik 1
DANE
DANE
DANE
DANE
wskaźnik 2
wskaźnik 2
wskaźnik 2
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
wskaźnik 1
DANE
DANE
wskaźnik 2
wskaźnik 2
wskaźnik 1
DANE
wskaźnik 1
wskaźnik 2
wskaźnik 1
DANE
wskaźnik 2
DANE
wskaźnik 2
Temat
Tworzenie i przetwarzanie
dynamicznych struktur danychdrzewa
korzeń
Drzewo
binarne
DANE
wskaźnik 0
wskaźnik 1
liść DANE
DANE
nil
wskaźnik 0
wskaźnik 0
wskaźnik 1
wskaźnik 1
nil
DANE
DANE
DANE
wskaźnik 0
wskaźnik 0
wskaźnik 0
wskaźnik 1
wskaźnik 1
wskaźnik 1
nil
nil
DANE
DANE
wskaźnik 0
wskaźnik 0
nil