PODSTAWY INFORMATYKI - Strona główna AGHhome.agh.edu.pl/~horzyk/lectures/pi/2009-10-26...

33
PODSTAWY INFORMATYKI PODSTAWY INFORMATYKI PODSTAWY INFORMATYKI PODSTAWY INFORMATYKI PODSTAWY INFORMATYKI PODSTAWY INFORMATYKI PODSTAWY INFORMATYKI PODSTAWY INFORMATYKI wykład 4. wykład 4. wykład 4. wykład 4. wykład 4. wykład 4. wykład 4. wykład 4. Adrian Adrian Horzyk Horzyk Web: Web: http://home.agh.edu.pl/~horzyk/ http://home.agh.edu.pl/~horzyk/ E-mail: mail: [email protected] [email protected] E-mail: mail: [email protected] [email protected] Google: Adrian Google: Adrian Horzyk Horzyk Gabinet: paw. D13 p. 325 Gabinet: paw. D13 p. 325 Akademia Górniczo Akademia Górniczo-Hutnicza w Krakowie Hutnicza w Krakowie WEAIiE WEAIiE, Katedra Automatyki , Katedra Automatyki http://www.agh.edu.pl http://www.agh.edu.pl Mickiewicza Av. 30, 30 Mickiewicza Av. 30, 30-059 059 Cracow Cracow, Poland , Poland

Transcript of PODSTAWY INFORMATYKI - Strona główna AGHhome.agh.edu.pl/~horzyk/lectures/pi/2009-10-26...

PODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIwykład 4.wykład 4.wykład 4.wykład 4.wykład 4.wykład 4.wykład 4.wykład 4.

Adrian Adrian HorzykHorzykWeb: Web: http://home.agh.edu.pl/~horzyk/http://home.agh.edu.pl/~horzyk/

EE--mail: mail: [email protected]@agh.edu.plEE--mail: mail: [email protected]@agh.edu.pl

Google: Adrian Google: Adrian HorzykHorzyk

Gabinet: paw. D13 p. 325Gabinet: paw. D13 p. 325

Akademia GórniczoAkademia Górniczo--Hutnicza w KrakowieHutnicza w Krakowie

WEAIiEWEAIiE, Katedra Automatyki, Katedra Automatyki

http://www.agh.edu.plhttp://www.agh.edu.pl

Mickiewicza Av. 30, 30Mickiewicza Av. 30, 30--059 059 CracowCracow, Poland, Poland

Struktury danychStruktury danychStruktury danychStruktury danychStruktury danychStruktury danychStruktury danychStruktury danych

Przy rozwiązywaniu problemu (za pomocą komputera, czy też bez niego)

trzeba dokonać wyboru pewnego abstrakcyjnego modelu rzeczywistości,

czyli zdefiniować zbiór danych mających reprezentować rzeczywistą sytuację.

W tym celu wykorzystujemy pewne specyficzne zbiory danych, które

charakteryzują się różną strukturą wewnętrzną ułożenia tych danych oraz

różnym sposobem zapisu i dostępu do tych danych. Dostęp do odpowiednich

składowych takiego zbioru może w dużym stopniu wpłynąć na złożoność

obliczeniową całego algorytmu – więc wybór odpowiednich struktur danych

jest sprawą kluczową decydującą o efektywności działania programów.

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 2222....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

jest sprawą kluczową decydującą o efektywności działania programów.

Wybór odpowiednich struktur danych podyktowany jest poprzez

rozwiązywany problem oraz możliwości obliczeniowe komputera.

Wybór reprezentacji danych zależny jest nie tylko od możliwości komputera,

lecz również zależny jest od przewidywanych operacji, jakie na danych będą

wykonywane.

Rodzaje podstawowych struktur danychRodzaje podstawowych struktur danychRodzaje podstawowych struktur danychRodzaje podstawowych struktur danychRodzaje podstawowych struktur danychRodzaje podstawowych struktur danychRodzaje podstawowych struktur danychRodzaje podstawowych struktur danych

Tablica – składa się z wielu elementów tego samego typu ułożonych jedna po drugiej z

możliwością odwoływania się do nich za pomocą indeksów.

Rekord – składa się z wielu elementów różnego typu, do których odwołujemy się za

pomocą ich nazwy.

Zbiór – składa się z wielu elementów tego samego typu.

Plik sekwencyjny – składa się z sekwencji elementów różnego typu.

Ciąg znaków – składa się z sekwencji elementów typu znakowego.

Kolejki FIFO (first in first out) – składa się z ciągu elementów tego samego typu z

możliwością wkładania elementów na jej końcu i wyciągania elementów z jej początku.

Stos FILO (first in last out) – składa się z ciągu elementów tego samego typu z

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 3333....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Stos FILO (first in last out) – składa się z ciągu elementów tego samego typu z

możliwością wkładania i wyciągania elementów tylko z jego końca.

Lista (pojedynczo lub podwójnie wiązane) – składa się z elementów tego samego typu

tak, że elementy są wzajemnie ze sobą powiązane tak, że każdy element zna tylko

swojego następnika (ew. również poprzednika).

Drzewo (binarne, rozpinające, pozycyjne, turniejowe) – składa się z elementów tego

samego typu ułożonych hierarchicznie w taki sposób, że każdy węzeł drzewa może być

rodzicem dla innych węzłów, a węzły mające swojego rodzica nazywamy dziećmi.

Graf (skierowane i nieskierowane, cykliczne, acykliczne, planarne) – składa się z

wierzchołków i krawędzi, które łączą ze sobą poszczególne wierzchołki w różny sposób.

TablicaTablicaTablicaTablicaTablicaTablicaTablicaTablica

Tablica – jest strukturą jednorodną, która składa się z elementów tego samego typu;

charakteryzuje się swobodnym dostępem do danych, zaś składowe tablicy są

indeksowane, co umożliwia łatwy i szybki dostęp do poszczególnych składowych

tablicy:

Definiujemy tablicy w Pascalu:

type T = array [ZAKRES] of TYP; np. type Wektor = array [1..50] of real;

Deklaracja tablicy w Pascalu:

var x: Wektor; var i: Integer;

Odwołanie do elementów tablicy poprzez odpowiedni indeks „i”, np.: x[i]

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 4444....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Odwołanie do elementów tablicy poprzez odpowiedni indeks „i”, np.: x[i]

Indeks tablicy może być stałą (np. x[3]), zmienną (np. x[i]), jak również wyrażeniem

indeksowym (np. x[2*i+1]).

Przykład 1. Poszukiwanie najmniejszego indeksu i składowej o wartości x

var A: array[1..G] of T {G>0}; var i : Integer;

i:=0;

repeat i:=i+1 until (A[i]=x) or (i=G);

if A[i] <> x then Writeln(‘Gie ma takiego elementu w tablicy A.’)

else Writeln (‘Znaleziono x na ’, i, ‘-tej pozycji w tablicy A.’);

Tablica uporządkowana i wielowymiarowaTablica uporządkowana i wielowymiarowaTablica uporządkowana i wielowymiarowaTablica uporządkowana i wielowymiarowaTablica uporządkowana i wielowymiarowaTablica uporządkowana i wielowymiarowaTablica uporządkowana i wielowymiarowaTablica uporządkowana i wielowymiarowa

Jeżeli elementy tablicy zostały wcześniej uporządkowane/posortowane przeszukiwanie

można znacznie przyspieszyć. W takim przypadku stosuje się metodę połowienia

przedziału, w którym może się znajdować poszukiwany element. Metodę tą nazywamy

metodą bisekcją lub przeszukiwaniem połówkowym:

i:=1; j:=G;

repeat k:=(i+j) div 2

if x>A[k] then i:=k+1 else j:=k-1

until (A[k]=x) or (i>j)

Górną granicą wymaganej liczby porównań jest log2 G

Macierz (tablica dwuwymiarowa) – to tablica, której składowe są również tablicami:

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 5555....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Macierz (tablica dwuwymiarowa) – to tablica, której składowe są również tablicami:

np. M: array [1..10] of Wektor jest tablicą o 10 składowych (wierszach), z których

każdy wiersz składa się z 50 składowych typu real i nazywa się macierzą 10x50

o składowych rzeczywistych lub też macierzą o 10 wierszach i 50 kolumnach.

Odwołujemy się do elementów macierzy poprzez odpowiednie indeksy:

M[i][j] lub M[i,j]

Deklarację macierzy można uprościć w następujący sposób w Pascalu:

M: array [1..10] of array [1..50] of real;

lub

M: array [1..10,1..50] of real;

RecordRecordRecordRecordRecordRecordRecordRecord

Rekord – jest najprostszym sposobem tworzenia typów złożonych, składających się z

elementów dowolnego typu.

Definicja typu record w Pascalu:

type LiczbaZespolona = record

re, im: real;

end

type Osoba = record

imie, nazwisko: alfa;

dataurodzenia: Data;

plec: (kobieta, mezczyzna);

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 6666....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

plec: (kobieta, mezczyzna);

stancywilny: (wolny, zonaty, owdowialy, rozwiedziony)

end

Deklaracja zmiennej typu rekord w Pascalu:

z: LiczbaZespolona;

p: Osoba;

Konstruujemy/inicjujemy rekord przez:

z = LiczbaZespolona (1.0, -2.0);

p = Osoba (‘Jan’, ‘Gowak’, Data(19,3,1976), mezczyzna, wolny);

ZbiórZbiórZbiórZbiórZbiórZbiórZbiórZbiór

Zbiór – odnosi się do elementów tego samego typu. Definiujemy go następująco:

type Z = set of TYP np. type zbiorznakow = set of char

Deklaracja zbioru:

zz := [‘+’,’-‘,’d’,’g’,’5’]

Ga wszystkich typach zbiorowych są określone następujące operatory elementarne,uszeregowane według priorytetów:

* - przecięcie (mnożenie) zbiorów

+ - suma (dodawanie) zbiorów

- - różnica zbiorów

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 7777....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

in - należenie do zbioru

r*s+t = (r*s) + t; r-s*t = r-(s*t); r-s+t = (r-s)+t; x in s+t = x in (s+t)

Zbiór S wygodnie jest reprezentować w pamięci komputera za pośrednictwem jegofunkcji charakterystycznej C(s). Jest to wektor wartości logicznych, którego i-taskładowa określa występowanie bądź brak wartości i w zbiorze, np. zbiór liczbcałkowitych:

S = [1,4,8,9] jest reprezentowany przez ciąg wartości logicznychF (fałsz) i T (prawda) następująco:

C(s) = (FTFFTFFFTT)

jeśli typem podstawowym zbioru S jest 0..9.

Zbiór i jego reprezentacja w pamięciZbiór i jego reprezentacja w pamięciZbiór i jego reprezentacja w pamięciZbiór i jego reprezentacja w pamięciZbiór i jego reprezentacja w pamięciZbiór i jego reprezentacja w pamięciZbiór i jego reprezentacja w pamięciZbiór i jego reprezentacja w pamięci

W pamięci komputera sekwencja wartości logicznych jest reprezentowana

przez ciąg bitów:

S: 0 1 0 0 1 0 0 0 1 1 - reprezentacja w pamięci

0 1 2 3 4 5 6 7 8 9 - kolejne bity

Reprezentacja zbioru przez jego funkcję charakterystyczną ma tę zaletę, że

operacje obliczania sumy, przecięcia i różnicy dwóch zbiorów można

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 8888....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

operacje obliczania sumy, przecięcia i różnicy dwóch zbiorów można

realizować w maszynie cyfrowej jako elementarne operacje logiczne.

Sprawdzanie czy element x należy do zbioru możemy wykonać poprzez

badanie warunku:

if x in [c1, c2, ..., cn] then …

Zamiast

if (x= c1) or (x= c2) or … or (x= cn) then …

Plik sekwencyjny (ciąg)Plik sekwencyjny (ciąg)Plik sekwencyjny (ciąg)Plik sekwencyjny (ciąg)Plik sekwencyjny (ciąg)Plik sekwencyjny (ciąg)Plik sekwencyjny (ciąg)Plik sekwencyjny (ciąg)

Plik sekwencyjny (ciąg) – należy do struktur danych o mocy nieskończonej:

type tekst = file of char {definicja typu pliku znakowego (tekstowego)}rewrite(x) {konstruowanie pliku/ciągu pustego}put(x) {wydłuża plik/ciąg x poprzez dołączenie na jego końcu elementu z bufora}reset(x) {zapoczątkowuje przeglądanie pliku/ciągu x}get(x) {przejście do następnej składowej, odczytanie jej i przypisanie do bufora}eof(x) {służy do badania, czy został osiągnięty koniec pliku x}read(x,v) {odczytanie elementu z ciągu x i zapisanie go do zmiennej v}write(x,v) {wydłuża plik/ciąg x poprzez dołączenie na jego końcu elementu v}

Przykłady:

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 9999....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Przykłady:rewrite (x);while p dobegin

Operacja(v); write (x,v)end;

reset (x);while not(eof(x)) dobegin

read(x,v); Operacja(v)end;

Teksty i pliki tekstoweTeksty i pliki tekstoweTeksty i pliki tekstoweTeksty i pliki tekstoweTeksty i pliki tekstoweTeksty i pliki tekstoweTeksty i pliki tekstoweTeksty i pliki tekstowe

Teksty – odgrywają szczególnie istotną rolę w przetwarzaniu danych, albowiem służądo komunikacji użytkownika z komputerem.type tekst = file of char;var input, output: tekst;writeln(f) {dołącz znak końca wiersza do pliku f}readln(f) {przeskocz ciąg znaków pliku f aż do znaku występującego

bezpośrednio po najbliższym znaczniku końca wiersza}eoln(f) {funkcja boolowska, która przyjmuje wartość true, jeśli aktualna

pozycja pliku wskazuje na separator wiersza,w przeciwnym przypadku przyjmuje wartość false}

rewrite(f);while not(q) do

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 10101010....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

while not(q) dobegin

while not(p) do begin Operacja(x); write (f,x) end;writeln(f)

endreset(f);while not eof(f) dobegin

Operacja1();while not eoln(f) do begin read(f,x); Operacja2(x); end;Operacja3();readln(f)

end

Dynamiczne struktury danychDynamiczne struktury danychDynamiczne struktury danychDynamiczne struktury danychDynamiczne struktury danychDynamiczne struktury danychDynamiczne struktury danychDynamiczne struktury danych

Dynamiczne struktury danych charakteryzują się zmiennością swoich strukturpodczas procesu obliczeniowego. Zmiany te dotyczą przede wszystkim ichrozmiarów (ilości zajętej pamięci). Ga dynamiczne struktury danych kompilatornie może „z góry” przydzielić określonej ilości pamięci podczas dokonywanejtranslacji kodu, gdyż jej ilość może się zmieniać. Mówimy więc o tzw. dynamicznymprzydzielaniu pamięci już podczas wykonywania programu. Oznacza toprzydzielanie pamięci każdej ze składowych w chwili powołania danego obiektu dożycia. Kompilator w procesie translacji przydziela więc tylko stałą ilość pamięci nazapamiętanie adresu składowej umieszczanej dynamicznie w pamięci zamiastsamej składowej.

Zmienna statyczna powiązana jest z konkretnym miejscem i rozmiarem pamięci

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 11111111....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Zmienna statyczna powiązana jest z konkretnym miejscem i rozmiarem pamięcijuż w momencie kompilacji programu.

Zmienna dynamiczna jest tworzona i usuwana podczas wykonywania programu.Tak więc pamięć potrzebna do zapamiętania zmiennej dynamicznej może byćprzydzielana (w miarę dostępnych zasobów), zwalniana i znowu przydzielanainnej zmiennej.

W Pascalu można tworzyć proste zmienne dynamiczne oraz dynamiczne strukturydanych, np. listy.

Dynamiczne struktury danych mogą się rozszerzać lub kurczyć w miarę potrzeb wtrakcie wykonywania programu.

Wskaźniki i przykład ich zastosowaniaWskaźniki i przykład ich zastosowaniaWskaźniki i przykład ich zastosowaniaWskaźniki i przykład ich zastosowaniaWskaźniki i przykład ich zastosowaniaWskaźniki i przykład ich zastosowaniaWskaźniki i przykład ich zastosowaniaWskaźniki i przykład ich zastosowania

Dynamiczny przydział pamięci jest realizowany za pomocą wskaźników, które

są specjalnym typem zmiennej, która nie przechowuje żadnych danych, lecz

adres ich położenia w pamięci.

W programie można zmienić wartość wskaźnika, tak aby wskazywał na inne

miejsce pamięci lub żeby nie wskazywał żadnego miejsca (GIL). Można też

zwolnić miejsce związane z określonym wskaźnikiem i przydzielić je innym

zmiennym.

Listy są przydatne w sytuacjach, gdy nie można przewidzieć zapotrzebowania

na pamięć. Wskaźniki służą do powiązania poszczególnych elementów listy ze

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 12121212....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

na pamięć. Wskaźniki służą do powiązania poszczególnych elementów listy ze

sobą. Każdy element listy zawiera minimalnie jeden wskaźnik, który wskazuje

następny element listy (lista pojedynczo wiązana). Można też zastosować dwa

wskaźniki, wtedy wskazywany jest również element poprzedni listy.

Tablice można traktować jako przeciwieństwo list, gdyż te wymagają

określenia wielkości w momencie ich tworzenia bez dalszej możliwości ich

zwiększania czy zmniejszania. Wadą tablic jest więc konieczność przydzielania

takiej ilości pamięci, ile wymaga maksymalna przewidziana liczba danych.

Takie postępowanie może być dużym marnotrawstwem pamięci.

Definiowanie wskaźników i operacje na wskaźnikachDefiniowanie wskaźników i operacje na wskaźnikachDefiniowanie wskaźników i operacje na wskaźnikachDefiniowanie wskaźników i operacje na wskaźnikachDefiniowanie wskaźników i operacje na wskaźnikachDefiniowanie wskaźników i operacje na wskaźnikachDefiniowanie wskaźników i operacje na wskaźnikachDefiniowanie wskaźników i operacje na wskaźnikach

Wskaźniki mogą odwoływać się do danych dowolnego typu. W Pascalu chcąc odnieśćsię do obiektu wskazywanego przez wskaźnik dodajemy daszek „^”.

Deklaracja wskaźnika wskazującego na zmienną typu „integer”:

var Wsk_Int : ^integer;

Gastępnie trzeba przydzielić pamięć dla danej typu „integer” wskazywanej przez tenwskaźnik:

new (Wsk_Int);

Przypisanie:

Wsk_Int^ := 500;

Zmienna = Wsk_Int^;

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 13131313....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Zmienna = Wsk_Int^;

Działania na wskaźnikach ograniczają się do porównania, np.:

if Wsk1 = Wsk2 then...;

i do przypisania wartości, np.:

Wsk1 := Wsk2;

W wyniku takiego działania zmienia się miejsce odwołania wskaźnika Wsk1 na takiesamo, jakie ma wskaźnik Wsk2. Miejsce pamięci wskazywane wcześniej prze Wsk1 jestpo wykonaniu działania niedostępne (o ile nie wskazywał na nie inny wskaźnik).

Zwalnianie miejsca pamięci wskazywanego przez wskaźnik:

dispose (Wsk_Int);

Funkcje i procedury na wskaźnikachFunkcje i procedury na wskaźnikachFunkcje i procedury na wskaźnikachFunkcje i procedury na wskaźnikachFunkcje i procedury na wskaźnikachFunkcje i procedury na wskaźnikachFunkcje i procedury na wskaźnikachFunkcje i procedury na wskaźnikach

Gew – tworzy nową dynamiczną zmienną i przypisuje jej adres zmiennej:

procedure Gew(var P: Pointer);

Dispose – zwalnia pamięć przydzieloną dynamicznej zmiennej:

procedure Dispose(var P: Pointer);

Przykłady:

type

Str18 = string[18];

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 14141414....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Str18 = string[18];

var

P: ^Str18;

begin

Gew(P);

P^ := 'Gow you see it...';

Dispose(P); { Gow you don't... }

end.

Dynamiczny przydział pamięciDynamiczny przydział pamięciDynamiczny przydział pamięciDynamiczny przydział pamięciDynamiczny przydział pamięciDynamiczny przydział pamięciDynamiczny przydział pamięciDynamiczny przydział pamięci

GetMem – tworzy dynamiczną zmienną o podanej wielkości i przypisuje adres tegobloku do wyspecyfikowanego wskaźnika:

procedure GetMem(var P: Pointer; Size: Word);

FreeMem – zwalnia pamięć zajmowaną przez dynamiczną zmienną o określonejwielkości:

procedure FreeMem(var P: Pointer; Size: Word);

Przykłady:type TFriendRec = record

Game: string[30]; Age : Byte;end;

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 15151515....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

end;var p: pointer;begin

if MaxAvail < SizeOf(TFriendRec) thenWriteln('Got enough memory')

elsebegin

GetMem(p, SizeOf(TFriendRec)); { Allocate memory on heap }{ ...Use the memory... }FreeMem(p, SizeOf(TFriendRec)); { Then free it when done }

end;end.

Stos (FILO Stos (FILO Stos (FILO Stos (FILO Stos (FILO Stos (FILO Stos (FILO Stos (FILO –––––––– First In First In First In First In First In First In First In First In LastLastLastLastLastLastLastLast Out)Out)Out)Out)Out)Out)Out)Out)

STOS – FILO DODAWAGIE USUWAGIE

G.G.wskwsk

zawartośćzawartość

GG--1.1.

góragóra

G.G.wskwsk

zawartośćzawartość

GG--1.1.

góragóra

G+1.G+1.wskwsk

zawartośćzawartość

G.G.wskwsk

zawartośćzawartość

GG--1.1.

góragóra

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 16161616....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

GG--1.1.wskwsk

zawartośćzawartość

GG--2.2.wskwsk

zawartośćzawartość

1.1.GILGIL

zawartośćzawartość

GG--1.1.wskwsk

zawartośćzawartość

GG--2.2.wskwsk

zawartośćzawartość

1.1.GILGIL

zawartośćzawartość

GG--1.1.wskwsk

zawartośćzawartość

GG--2.2.wskwsk

zawartośćzawartość

1.1.GILGIL

zawartośćzawartość

Definicja i deklaracja stosu w PascaluDefinicja i deklaracja stosu w PascaluDefinicja i deklaracja stosu w PascaluDefinicja i deklaracja stosu w PascaluDefinicja i deklaracja stosu w PascaluDefinicja i deklaracja stosu w PascaluDefinicja i deklaracja stosu w PascaluDefinicja i deklaracja stosu w Pascalu

Deklaracja dynamicznej struktury stosu:

TYPE StosPtr = ^Stos;

Stos = record

dolny : StosPtr;

zawartosc: integer

end

Tworzenie pustego stosu:

VAR wierzch : StosPtr;

wierzch := GIL;

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 17171717....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Wstawianie nowego elementu (recordu) na górę stosu:

VAR nowy : StosPtr;

Gew (nowy);

nowy^.dolny := wierzch;

wierzch := nowy;

Usuwanie górnego elementu (recordu) ze stosu:

if (wierzch^.dolny)

then begin usuwany := wierzch; wierzch := wierzch^.dolny; Dispose (usuwany) end

else begin Dispose (wierzch); wierzch := GIL end;

Kolejki (FIFO Kolejki (FIFO Kolejki (FIFO Kolejki (FIFO Kolejki (FIFO Kolejki (FIFO Kolejki (FIFO Kolejki (FIFO –––––––– First In First Out)First In First Out)First In First Out)First In First Out)First In First Out)First In First Out)First In First Out)First In First Out)

Dynamiczna struktura kolejki:

Usuwanie elementu (rekordu) z początku kolejki:

G.G.GILGIL

zawartośćzawartość

GG--1.1.wskwsk

zawartośćzawartość

GG--2.2.wskwsk

zawartośćzawartość

1.1.wskwsk

zawartośćzawartośćkonieckoniec początekpoczątek

G.G.GILGIL

zawartośćzawartość

GG--1.1.wskwsk

zawartośćzawartość

1.1.wskwsk

zawartośćzawartośćkonieckoniec początekpoczątek

2.2.wskwsk

zawartośćzawartość

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 18181818....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Dodawanie nowego elementu (rekordu) na koniec kolejki:

G.G.wskwsk

zawartośćzawartość

GG--1.1.wskwsk

zawartośćzawartość

GG--2.2.wskwsk

zawartośćzawartość

1.1.wskwsk

zawartośćzawartośćkonieckoniec początekpoczątek

G+1.G+1.GILGIL

zawartośćzawartość

Definicja i deklaracja kolejki w PascaluDefinicja i deklaracja kolejki w PascaluDefinicja i deklaracja kolejki w PascaluDefinicja i deklaracja kolejki w PascaluDefinicja i deklaracja kolejki w PascaluDefinicja i deklaracja kolejki w PascaluDefinicja i deklaracja kolejki w PascaluDefinicja i deklaracja kolejki w Pascalu

Deklaracja dynamicznej struktury kolejki:TYPE KolejkaPtr = ^Kolejka;

Kolejka = recordnastepny : KolejkaPtr ;zawartosc: integer

end

Pusta kolejka:VAR poczatek, koniec : KolejkaPtr ;poczatek := GIL;koniec := GIL;

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 19191919....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Wstawianie nowego elementu (recordu) na koniec kolejki:VAR nowy : KolejkaPtr ;Gew (nowy);koniec^.nastepny := nowy;nowy^.nastepny := GIL;koniec := nowy;

Usuwanie elementu (recordu) z przodu kolejki:if (poczatek) thenbegin usuwany := poczatek; poczatek := poczatek^.nastepny; Dispose (usuwany) end

Listy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązane

Przykład listy pojedynczo wiązanej:

Wklejanie elementu (rekordu) na początek listy:

1.1.wskwsk

zawartośćzawartość

2.2.wskwsk

zawartośćzawartość

3.3.wskwsk

zawartośćzawartość

G.G.GILGIL

zawartośćzawartośćpoczątekpoczątek

GOWYGOWYwskwsk

zawartośćzawartość

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 20202020....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Wklejanie elementu (rekordu) do środka listy:

1.1.wskwsk

zawartośćzawartość

2.2.wskwsk

zawartośćzawartość

3.3.wskwsk

zawartośćzawartość

G.G.GILGIL

zawartośćzawartośćpoczątekpoczątek

1.1.wskwsk

zawartośćzawartość

2.2.wskwsk

zawartośćzawartość

3.3.wskwsk

zawartośćzawartość

G.G.GILGIL

zawartośćzawartośćpoczątekpoczątek

GOWYGOWYwskwsk

zawartośćzawartość

Listy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązaneListy pojedynczo wiązane

Przykład listy pojedynczo wiązanej:

Usuwanie elementu (rekordu) z początku listy:

1.1.wskwsk

zawartośćzawartość

2.2.wskwsk

zawartośćzawartość

3.3.wskwsk

zawartośćzawartość

G.G.GILGIL

zawartośćzawartośćpoczątekpoczątek

1.1.wskwsk

2.2.wskwsk

3.3.wskwsk

G.G.GILGILpoczątekpoczątek

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 21212121....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Usuwanie elementu (rekordu) ze środka listy:

wskwsk

zawartośćzawartośćwskwsk

zawartośćzawartośćwskwsk

zawartośćzawartośćGILGIL

zawartośćzawartośćpoczątekpoczątek

1.1.wskwsk

zawartośćzawartość

2.2.wskwsk

zawartośćzawartość

3.3.wskwsk

zawartośćzawartość

G.G.GILGIL

zawartośćzawartośćpoczątekpoczątek

Listy podwójnie wiązaneListy podwójnie wiązaneListy podwójnie wiązaneListy podwójnie wiązaneListy podwójnie wiązaneListy podwójnie wiązaneListy podwójnie wiązaneListy podwójnie wiązane

Przykład listy pojedynczo wiązanej:

Wklejanie elementu (rekordu) do środka listy:

1.następny

zawartość

2.następny

zawartość

3.następny

zawartość

G.GIL

zawartość

początek

GIL poprzed. poprzed. poprzed.

koniec

GOWYnastępny

zawartośćpoprzed.

koniec

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 22222222....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Usuwanie elementu (rekordu) ze środka listy:

1.następny

zawartość

2.następny

zawartość

3.następny

zawartość

G.GIL

zawartość

początek

GIL poprzed. poprzed. poprzed.

koniec

1.następny

zawartość

2.następny

zawartość

3.następny

zawartość

G.GIL

zawartość

początek

GIL poprzed. poprzed. poprzed.

koniec

Implementacja listy z wykorzystaniem tablicyImplementacja listy z wykorzystaniem tablicyImplementacja listy z wykorzystaniem tablicyImplementacja listy z wykorzystaniem tablicyImplementacja listy z wykorzystaniem tablicyImplementacja listy z wykorzystaniem tablicyImplementacja listy z wykorzystaniem tablicyImplementacja listy z wykorzystaniem tablicy

INDEKSY TABLICY:

NASTĘPNIKI ELEMENTÓW LISTY PODWÓJNIE WIĄZANEJ:

5.8

6.5

6 7

7.4

4.7

8 3

11.0

10

9.10

10.11

4 9

3.6

8.9

2 5

1.2

2.3

0 1

7. 8.5. 6. 11.9. 10.3. 4.1. 2.

Wykład 8. Strona Wykład 8. Strona Wykład 8. Strona Wykład 8. Strona 23232323....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

POPRZEDNIKI ELEMENTÓW LISTY PODWÓJNIE WIĄZANEJ :

Listę wobec tego możemy zaimplementować również z wykorzystaniem tablicy.Mankamentem takiej implementacji jest niemożliwość rozszerzenia listy pozawyznaczony rozmiar tablicy oraz ew. nieoszczędność takiej implementacji, jeślilista jest mała, a zadeklarowania tablica bardzo duża.

zawartość zawartośćzawartość zawartość zawartośćzawartość zawartośćzawartość zawartośćzawartość zawartość

Definicja i deklaracja listy w PascaluDefinicja i deklaracja listy w PascaluDefinicja i deklaracja listy w PascaluDefinicja i deklaracja listy w PascaluDefinicja i deklaracja listy w PascaluDefinicja i deklaracja listy w PascaluDefinicja i deklaracja listy w PascaluDefinicja i deklaracja listy w Pascalu

Definicja i deklaracja dynamicznej struktury listy podwójnie wiązanej:TYPE ListPtr = ^List;

List = recordnastepny, poprzedni : ListPtr;zawartosc: integer

end

Tworzenie pustej listy dwukierunkowej:VAR poczatek, koniec : ListPtr;poczatek := GIL; koniec := GIL;

Wstawianie nowego elementu (recordu) po aktualnym wskaźniku do listy:VAR nowy : ListPtr;Gew (nowy);

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 24242424....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Gew (nowy);nowy^.nastepny := aktualny^.nastepny;nowy^.poprzedni := aktualny;nowy^.nastepny^.poprzedni := nowy;aktualny^.nastepny := nowy;

Usuwanie wskazywanego elementu (recordu) z listy:aktualny^.następny^.poprzedni := aktualny^.poprzedni;aktualny^.poprzedni^.nastepny := aktualny^.nastepny;if (aktualny^.poprzedni) begin

aktualny := aktualny^.poprzedni; Dispose (aktualny^.nastepny) endelse if (aktualny^.nastepny) begin

aktualny := aktualny^.nastepny; Dispose (aktualny^.poprzedni) endelse begin Dispose (aktualny); aktualny := GIL end;

Edycja kodu źródłowego w PascaluEdycja kodu źródłowego w PascaluEdycja kodu źródłowego w PascaluEdycja kodu źródłowego w PascaluEdycja kodu źródłowego w PascaluEdycja kodu źródłowego w PascaluEdycja kodu źródłowego w PascaluEdycja kodu źródłowego w Pascalu

PROGRAM Nazwa;PROGRAM Nazwa;

USES USES NazwaBibliotekiNazwaBiblioteki;;

CONST CONST NazwaStalejNazwaStalej = = WartoscStalejWartoscStalej;;

TYPE TYPE NazwaTypuNazwaTypu = = DefinicjaTypuDefinicjaTypu;;

VAR VAR NazwaZmiennejGlobalnejNazwaZmiennejGlobalnej : : TypZmiennejGlobalnejTypZmiennejGlobalnej;;

BEGINBEGIN {wielkość liter w nazwach instrukcji nie ma znaczenia}{wielkość liter w nazwach instrukcji nie ma znaczenia}

ReadlnReadln (a);(a);

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 25252525....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

ReadlnReadln (a);(a);

FOR i=1 TO a DOFOR i=1 TO a DO

BEGINBEGIN

IF i<10 THEN IF i<10 THEN WritelnWriteln (‘Mała liczba’) {brak średnika przed ELSE}(‘Mała liczba’) {brak średnika przed ELSE}

ELSE ELSE WritelnWriteln (‘Duża liczba’)(‘Duża liczba’) {brak średnika przed END}{brak średnika przed END}

ENDEND

WritelnWriteln (‘Wcięcia w programie powinny odwzorowywać strukturę!’);(‘Wcięcia w programie powinny odwzorowywać strukturę!’);

REPEAT UNTIL REPEAT UNTIL KeypressedKeypressed {brak średnika przed END}{brak średnika przed END}

END. {program główny w Pascalu kończy się kropką}END. {program główny w Pascalu kończy się kropką}

{Wcięcia ułatwiają orientację w programie i jego czytelność.}{Wcięcia ułatwiają orientację w programie i jego czytelność.}

Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD -------- klasycznyklasycznyklasycznyklasycznyklasycznyklasycznyklasycznyklasyczny

Klasyczny szkolny algorytm charakteryzuje się dużą złożonością obliczeniową.Klasyczny szkolny algorytm charakteryzuje się dużą złożonością obliczeniową.

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 26262626....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD Algorytm obliczania NWD –––––––– poszukiwanie efektywnego alg.poszukiwanie efektywnego alg.poszukiwanie efektywnego alg.poszukiwanie efektywnego alg.poszukiwanie efektywnego alg.poszukiwanie efektywnego alg.poszukiwanie efektywnego alg.poszukiwanie efektywnego alg.

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 27272727....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Dążenie do efektywności i optymalizacji Dążenie do efektywności i optymalizacji ––

to cecha dobrych informatyków!to cecha dobrych informatyków!

Wyszukiwanie z wykorzystaniem wartownikaWyszukiwanie z wykorzystaniem wartownikaWyszukiwanie z wykorzystaniem wartownikaWyszukiwanie z wykorzystaniem wartownikaWyszukiwanie z wykorzystaniem wartownikaWyszukiwanie z wykorzystaniem wartownikaWyszukiwanie z wykorzystaniem wartownikaWyszukiwanie z wykorzystaniem wartownika

Zadanie wyszukania słowa w słowniku uporządkowanych słów.Zadanie wyszukania słowa w słowniku uporządkowanych słów.

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 28282828....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Wyszukiwanie połówkowe Wyszukiwanie połówkowe Wyszukiwanie połówkowe Wyszukiwanie połówkowe Wyszukiwanie połówkowe Wyszukiwanie połówkowe Wyszukiwanie połówkowe Wyszukiwanie połówkowe –––––––– „Dziel i zwycięŜaj!”„Dziel i zwycięŜaj!”„Dziel i zwycięŜaj!”„Dziel i zwycięŜaj!”„Dziel i zwycięŜaj!”„Dziel i zwycięŜaj!”„Dziel i zwycięŜaj!”„Dziel i zwycięŜaj!”

Zasada wyszukiwania połówkowego polega na podzieleniu posortowanego Zasada wyszukiwania połówkowego polega na podzieleniu posortowanego

ciągu elementów na 2 części, zbadanie, w której z nich leży poszukiwany ciągu elementów na 2 części, zbadanie, w której z nich leży poszukiwany

element i powtórzeniu tego algorytmu tylko dla tej części, w której on leży.element i powtórzeniu tego algorytmu tylko dla tej części, w której on leży.

Dzięki takiemu podziałowi uzyskujemy złożoność obliczeniową wyszukiwania Dzięki takiemu podziałowi uzyskujemy złożoność obliczeniową wyszukiwania

O(log n), gdzie n O(log n), gdzie n –– ilość elementów ciągu.ilość elementów ciągu.

Zasadę tą stosujemy we wielu bardziej skomplikowanych algorytmach, np. Zasadę tą stosujemy we wielu bardziej skomplikowanych algorytmach, np.

podczas sortowania.podczas sortowania.

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 29292929....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Potęgowanie o wykładniku naturalnymPotęgowanie o wykładniku naturalnymPotęgowanie o wykładniku naturalnymPotęgowanie o wykładniku naturalnymPotęgowanie o wykładniku naturalnymPotęgowanie o wykładniku naturalnymPotęgowanie o wykładniku naturalnymPotęgowanie o wykładniku naturalnym

Można zauważyć, iż w przypadku wykładników o Można zauważyć, iż w przypadku wykładników o

większych potęgach można wykorzystać wcześniejsze większych potęgach można wykorzystać wcześniejsze

wyniki mnożenia zamiast mnożenia podstawy nwyniki mnożenia zamiast mnożenia podstawy n--1 razy:1 razy:

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 30303030....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Obliczanie dnia tygodniaObliczanie dnia tygodniaObliczanie dnia tygodniaObliczanie dnia tygodniaObliczanie dnia tygodniaObliczanie dnia tygodniaObliczanie dnia tygodniaObliczanie dnia tygodnia

Dzień tygodnia może być obliczony bardzo efektywnie zastępując intuicyjne Dzień tygodnia może być obliczony bardzo efektywnie zastępując intuicyjne

dodawanie od wybranej daty wzorami matematycznymi, które bez dodawanie od wybranej daty wzorami matematycznymi, które bez

wykorzystania pętli obliczą stosowny dzień tygodnia z uwzględnieniem lat wykorzystania pętli obliczą stosowny dzień tygodnia z uwzględnieniem lat

przestępnych, różnej ilości dni w poszczególnych miesiącach itp.przestępnych, różnej ilości dni w poszczególnych miesiącach itp.

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 31313131....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Obliczanie wartości wielomianuObliczanie wartości wielomianuObliczanie wartości wielomianuObliczanie wartości wielomianuObliczanie wartości wielomianuObliczanie wartości wielomianuObliczanie wartości wielomianuObliczanie wartości wielomianu

Często prosta zamiana kolejności operacji i umiejętne wykorzystanie wspólnych Często prosta zamiana kolejności operacji i umiejętne wykorzystanie wspólnych

wyników cząstkowych umożliwia zmniejszenie złożoności obliczeń.wyników cząstkowych umożliwia zmniejszenie złożoności obliczeń.

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 32323232....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:

� L. Banachowski, K. Diks, W. Rytter: „Algorytmy i struktury danych”, WNT, Warszawa, 2001

� Z. Fortuna, B. Macukow, J. Wąsowski, „Metody numeryczne”, WNT, Warszawa, 1993.

� K. Jakubczyk, „Turbo Pascal i Borland C++”, Wydanie II, Helion, 2006.

� J. i M. Jankowscy, „Przegląd metod i algorytmów numerycznych”, WNT, Warszawa, 1988.

� A. Kiełbasiński, H. Schwetlick, „Numeryczna algebra liniowa”, WNT, Warszawa 1992.

� A. Kierzkowski, „Turbo Pascal. Ćwiczenia praktyczne.”, Helion 2006.

� K. Koleśnik, „Wstęp do programowania z przykładami w Turbo Pascalu”, Helion,

� M. Sysło: „Elementy Informatyki”.

� A. Szepietowski: „Podstawy Informatyki”.

Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona Wykład 4. Strona 33333333....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk

� R. Tadeusiewicz, P. Moszner, A. Szydełko: „Teoretyczne podstawy informatyki”.

� W. M. Turski: „Propedeutyka informatyki”.

� N. Wirth: „Wstęp do programowania systematycznego”.

� N. Wirth: „ALGORYTMY + STRUKTURY DANYCH = PROGRAMY”.