You are on page 1of 12

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE

Praktyczny
kurs Delphi
Autor: Tomasz M. Sadowski
ISBN: 83-7361-013-8
Format: B5, stron: 396

ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Tomasz Sadowski, autor wielokrotnie wznawianego, podrcznika Praktyczny kurs


Turbo Pascala, zaprasza Ci tym razem do krainy Delphi. Delphi to system szybkiego
tworzenia aplikacji (RAD), w ktrym programy w duym stopniu buduje si z gotowych
komponentw. O ile Turbo Pascal uywany jest gwnie w dydaktyce informatyki,
o tyle Delphi jest stale rozwijanym i szeroko rozpowszechnionym rodowiskiem
programistycznym, czcym przejrzysto ObjectPascala z przyjaznym interfejsem
Windows. By moe niektre z programw uywanych przez Ciebie na co dzie zostay
napisane wanie w Delphi.
Ksika Praktyczny kurs Delphi napisana jest ywym, przystpnym jzykiem.
Pooono w niej nacisk raczej na praktyk ni teori, i dlatego to wspaniae
wprowadzenie w programowanie dla osb, ktre wczeniej nie zetkny si z t
tematyk. Ju po przeczytaniu kilku stron bdziesz mg napisa pierwszy program!
Dziki ksice poznasz:
rodowisko Delphi
Jzyk ObjectPascal: jego podstawowe konstrukcje i typy danych
Komponenty zawarte w Delphi
Sposoby pisania wasnych funkcji i procedur
Programowanie obiektowe
Programowanie grafiki
Po lekturze Praktycznego kursu Delphi przekonasz si, e pisanie profesjonalnych
aplikacji nie jest tak trudne, jak by si mogo wydawa. Przekonasz si rwnie,
e ksiki powicone programowaniu nie musz by nudn i przepenion
niezrozumia techniczn terminologi lektur. Ta ksika nauczy Ci programowa
w Delphi moesz by tego pewien.

Spis treci
Wstp ............................................................................................... 5
Rozdzia 1. Pierwszy krok .................................................................................. 11
Rozdzia 2. Narzdzie......................................................................................... 19
Dodatek IDE w piguce ................................................................ 30
Rozdzia 3. Pierwszy prawdziwy program ............................................................ 33
Rozdzia 4. Jak to byo dawniej....................................................................... 43
Rozdzia 5. Nieco elementarnej matematyki ....................................................... 51
Rozdzia 6. Gdzie przechowywa dane?.............................................................. 57
Dodatek Pozostae typy proste .................................................... 62
Rozdzia 7. Jak wprowadzi dane? ..................................................................... 65
Dodatek Formularz to te komponent........................................... 76
Rozdzia 8. Instrukcja warunkowa...................................................................... 79
Dodatek Kalkulator, wersja 2.0.................................................... 86
Rozdzia 9. Jak zrobi to samo kilka razy, czyli ptle .......................................... 91
Dodatek Puapki i niespodzianki................................................. 102
Rozdzia 10. Jak nie robi tego samego wicej ni raz,
czyli procedury i funkcje................................................................. 105
Rozdzia 11. Komunikacja z procedurami............................................................ 117
Dodatek Rekurencja.................................................................. 125
Rozdzia 12. Zapisujemy wicej danych, czyli tablice ......................................... 129
Rozdzia 13. Porzdki w danych......................................................................... 139
Rozdzia 14. Typy i argumenty strukturalne........................................................ 149
Rozdzia 15. Stae symboliczne.......................................................................... 157
Rozdzia 16. O ulotnoci danych i jak jej zaradzi ............................................... 163

Praktyczny kurs Delphi

Rozdzia 17. Pliki tekstowe, czyli jak zapisa dane w czytelny sposb ................ 175
Dodatek Pliki jeszcze inaczej ..................................................... 182
Rozdzia 18. Czym naprawd zajmuj si komputery........................................... 185
Rozdzia 19. Konkurencja dla Microsoftu?.......................................................... 195
Rozdzia 20. Programowanie na powanie .......................................................... 205
Rozdzia 21. Jak uruchamia oporne programy ................................................... 219
Rozdzia 22. Dwa (i wicej) w jednym, czyli rekordy ........................................... 229
Rozdzia 23. Zmienne dynamiczne i wskaniki .................................................... 251
Rozdzia 24. Rekord + wskanik = lista .............................................................. 265
Rozdzia 25. O grafice sw kilka ....................................................................... 275
Rozdzia 26. Od programowania strukturalnego do obiektowego ......................... 289
Rozdzia 27. Dziedziczenie, polimorfizm i metody wirtualne ................................. 301
Rozdzia 28. Co jeszcze warto wiedzie o IDE..................................................... 317
Rozdzia 29. Kilka dobrych rad, czyli co czyni naley ..................................... 327
Rozdzia 30. a czego unika ........................................................................... 337
Dodatek A Instalacja wersji prbnej Delphi 7 Architect.................................... 343
Dodatek B Odpowiedzi do zada...................................................................... 347
Dodatek C Kilka przydatnych poj komputerowych......................................... 365
Dodatek D Mikrosownik angielsko-polski........................................................ 375
Skorowidz...................................................................................... 379

Rozdzia 12.

Zapisujemy
wicej danych,
czyli tablice
 Powtrka ze statystyki
 Typy strukturalne
 Tworzenie i wykorzystanie tablic
 Wektory i macierze

Jak powszechnie wiadomo, komputer jest narzdziem sucym do szybkiego przetwarzania duych iloci danych. Przedstawione do tej pory programy nie daway naszemu
wielkiemu kalkulatorowi specjalnego pola do popisu dane, na ktrych operowalimy, sprowadzay si zwykle do kilku liczb. Nikogo jednak nie trzeba przekonywa,
e wikszo zada, z ktrymi mierz si komputery w praktyce, wymaga wprowadzania, przechowywania i przetwarzania ogromnych iloci danych. Cel, ktry postawimy sobie na pocztku tego rozdziau, bdzie znacznie mniej ambitny sprbujemy mianowicie rozwiza prosty problem statystyczny, jakim jest obliczenie wartoci
redniej i miary rozrzutu w zadanej grupie pomiarw pewnej wielkoci. Obliczanie
redniej i odchylenia standardowego (ono wanie jest miar rozrzutu) jest rwnie
typowym zadaniem inynierskim, tote jego zaprogramowanie moe przyda si nam
w przyszoci.
Jak powszechnie wiadomo, warto rednia dla N liczb wyraa si wzorem:
x=

1
N

i =1

gdzie i jest numerem kolejnej wartoci w zestawie. Przeoenie tego zapisu na Pascal
jest na pierwszy rzut oka banalne, ale gdzie waciwie bd przechowywane kolejne

130

Praktyczny kurs Delphi

wartoci xi? Wykorzystanie do tego celu pojedynczych zmiennych typu prostego


(a tylko takie na razie znamy) jest praktycznie niemoliwe nawet gdybymy uparli
si przy zadeklarowaniu zmiennych , , , nie wiemy ile naleaoby ich zadeklarowa, nie mwic ju o problemach z odwoywaniem si do nich w ptli sumujcej. Zauwamy jednak, e nasze liczby tworz jednolity cig danych tego samego typu, w matematyce zapisywany w postaci tzw. wektora:

[x1 , x 2 , x 3 , K , x N ]
By moe kompilator potrafi posuy si podobn reprezentacj i zna jaki sposb na
poszufladkowanie danych w pamici tak, by dao si odwoywa do nich poprzez
kolejny numer w cigu?
Opisane powyej rozwizanie znane jest w programowaniu od kilkudziesiciu lat pod
nazw tablicy (ang. array). Jest ona zestawem danych tego samego typu, zajmujcym
pewien (na og cigy) obszar w pamici i pozwalajcym na odwoywanie si do poszczeglnych elementw poprzez podanie ich numeru, czyli tzw. indeksu. Mwic
oglniej, tablica jest struktur zoon z danych innego typu, dlatego te naley ona
do grupy tzw. strukturalnych typw danych. Zmienna typu strukturalnego skada si
z innych danych, zorganizowanych zgodnie z reguami obowizujcymi dla danego
typu (w przypadku tablic jednowymiarowych dane ustawiane s po prostu w pamici
jedna za drug). Poszczeglne elementy zmiennej strukturalnej mog by typu prostego (np. liczby cakowite) lub strukturalnego (np. tablice lub rekordy) innymi
sowy, moemy tworzy pitrowe dane strukturalne. Dwa najwaniejsze typy danych strukturalnych, ktrymi zajmiemy si w naszej ksice, to tablice (grupujce
elementy tego samego typu) oraz rekordy (grupujce elementy rnych typw).
Jak kada inna zmienna, tablica identyfikowana jest w programie poprzez nazw
(np. 
), natomiast dostp do jej poszczeglnych elementw odbywa si poprzez
podanie ich indeksu. Ten ostatni jest po prostu numerem danego elementu tablicy, zapisanym w nawiasach kwadratowych, np.:



 



Graficznie mona to przedstawi nastpujco:


indeks

warto

1,43

1,66

2,01

1,23

1,98

3,11

Jak mona si domyla, przed uyciem tablic naley zadeklarowa, do czego suy
sowo kluczowe :


  

Po sowie  nastpuje para nawiasw kwadratowych, w ktrych zapisujemy indeks


pierwszego i ostatniego elementu tablicy, rozdzielone dwiema kropkami (nie dwukropkiem!). Niezbdne jest rwnie poinformowanie kompilatora o typie poszczeglnych
elementw tablicy w naszym przypadku s to wartoci typu . Cay powyszy

Rozdzia 12. Zapisujemy wicej danych, czyli tablice

131

zapis mona przetumaczy na polski jako tablica o stu elementach, numerowanych


od 1 do 100, zoona z liczb rzeczywistych. Podobnie jak w przypadku zmiennych prostych, bezporednio po zadeklarowaniu elementy tablicy maj warto przypadkow1.
Deklarujc tablic naley pamita o dwch ograniczeniach:
 indeksy musz by staymi (innymi sowy, w Pascalu nie mona deklarowa

tzw. tablic dynamicznych w sensie znanym np. z BASIC-a),


 indeksy musz by typu porzdkowego (chocia nie musz by liczbami
mona np. zadeklarowa tablic indeksowan wartoci typu  ).

W wikszoci zastosowa tablice indeksowane s od jedynki, chocia Pascal tego nie


wymaga rwnie dobrze mona indeksowa tablic od zera (jak w jzyku C) lub tysica. Rzecz jasna, indeks kocowy musi by wikszy lub rwny pocztkowemu.
Niestandardowe indeksowanie tablic moe by rdem problemw, bowiem odwoanie do elementu spoza zadeklarowanego przedziau koczy si czsto trudnymi do wykrycia bdami wykonania. O ile nie ma naprawd wanego powodu,
najlepiej zawsze stosowa jednolity sposb indeksowania (zwykle od jedynki, chocia programici piszcy w jzyku C preferuj indeksowanie od zera).

Warto przy okazji wspomnie o funkcjach  i , ktre dla tablic zwracaj odpowiednio warto pierwszego i ostatniego indeksu. Pozwalaj one pomin przekazywanie
informacji o zakresie indeksw, o ile oczywicie mamy pewno, e obliczenia bd
zawsze dotyczyy caej tablicy.
Poszczeglne elementy tablicy mog by dowolnego typu (ale wszystkie tego samego),
przy czym niekoniecznie musi to by typ prosty, jak  czy   rwnie dobrze
mona zadeklarowa tablic zoon z elementw typu strukturalnego, np. innych tablic
lub rekordw. Przykadowa deklaracja:

    

utworzy dwuwymiarow tablic zoon z 50 wektorw (tablic jednowymiarowych),


z ktrych kady zawiera 50 liczb rzeczywistych. Skadnia Pascala pozwala na skrcenie
powyszego zapisu do postaci:

   

ktra lepiej odzwierciedla struktur tablicy dwuwymiarowej, a przy okazji jest prostsza
w zapisie. Moliwe jest take tworzenie tablic trj- i wicejwymiarowych (Pascal nie
narzuca ogranicze na liczb wymiarw tablicy ani wartoci indeksw), jednak stosowane s one rzadko.

cilej rzecz biorc, tablice deklarowane globalnie inicjalizowane s zerami, jednak lepiej wyrobi sobie
nawyk dmuchania na zimne i nie zakada, e wieo zadeklarowana tablica zawiera sensowne wartoci.

132

Praktyczny kurs Delphi

Zanim zabierzemy si do pracy, jeszcze jedna uwaga praktyczna. W porwnaniu


do starych aplikacji 16-bitowych, Delphi umoliwia tworzenie znacznie wikszych
struktur danych (maksymalny rozmiar tablicy w Turbo Pascalu wynosi okoo 64 kB,
w Delphi ograniczony jest w zasadzie wielkoci dostpnej pamici). Deklarujc
tablice wewntrz procedur naley jednak pamita, e s one tworzone na stosie,
ktrego pojemno jest ograniczona (domylnie do 1 megabajta). O ile Pascal nie
narzuca formalnych ogranicze na liczb wymiarw i elementw tablicy, musimy
pamita o ograniczeniu praktycznym, wynikajcym z rozmiarw dostpnej pamici.
Dodatkowym haczykiem jest fakt, i wszystkie zmienne lokalne tworzone s dopiero w momencie wywoania funkcji, a zatem do przepenienia stosu (i krytycznego
bdu wykonania) dochodzi w do nieprzewidzianym momencie podczas pracy
programu. W przeciwiestwie do lokalnych, tablice deklarowane globalnie maj do
dyspozycji ca pami dostpn dla programu (znacznie wicej, ni zajmuje stos),
za zadeklarowanie zbyt duej struktury powoduje bd bezporednio po uruchomieniu. Innymi sowy, deklaracja:


   
!
"

ma szans przej w przypadku umieszczenia jej w sekcji globalnej programu


lub moduu, natomiast raczej na pewno spowoduje bd wykonania (nie kompilacji!),
jeli umiecimy j wewntrz procedury. Nie znaczy to oczywicie, e tablice najlepiej deklarowa jako globalne pamitajmy, e zmienna globalna istnieje (i zajmuje
pami) przez cay czas dziaania programu, natomiast zmienna lokalna znika po
wykonaniu swojego zadania, zwalniajc zajt przez siebie pami.

Pora na czyny. Nasz program powinien umoliwi wprowadzenie cigu liczb o dowolnej
dugoci, zapamita go, a nastpnie wyliczy i wywietli warto redni i odchylenie
standardowe, dane wzorem:
s=

1
N 1

(x

i =1

Bardziej spostrzegawczy Czytelnicy by moe zauwayli, e wyliczenie redniej wcale


nie wymaga tablicowania danych, bowiem sumowanie mona prowadzi na bieco,
w miar wprowadzania kolejnych liczb. Niestety obliczenie odchylenia standardowego
wymaga z jednej strony wczeniejszego ustalenia wartoci redniej, z drugiej za
ponownego dostpu do poszczeglnych liczb. Innymi sowy, wprowadzone wartoci
trzeba gdzie zapamita, przynajmniej na chwil2.
2

cilej rzecz biorc, wcale nie trzeba kilka przeksztace pozwala zapisa ostatni wzr w postaci

i=1

xi

i =1
xi2
N

N 1

ktra, jak wida, nie zawiera odwoa do poszczeglnych liczb, a jedynie do ich sumy i sumy kwadratw.
Metoda ta wykorzystywana jest powszechnie np. w kalkulatorach, jednak jej zastosowanie odebraoby
nam pretekst do wprowadzenia pojcia tablicy

Rozdzia 12. Zapisujemy wicej danych, czyli tablice

133

Jako podstaw do budowy naszego programu moemy wykorzysta projekt Sumowanie


z rozdziau 9. Po dokonaniu kilku modyfikacji (zmiana nazw komponentw wyjciowych i etykiet) powinien on prezentowa si nastpujco:

Co prawda potrafimy ju korzysta z procedur i funkcji (a obliczenia statystyczne


a prosz si o ich zastosowanie), ale na razie pjdziemy po linii najmniejszego oporu
i cao kodu upakujemy w procedurze obsugi przycisku Oblicz:

 #$%&'()*#+ ,

-&!.- /

  01
2 -! 34
4&!!
!& !&5 !&

! "*!
!
(

!&&!&
6 78
!&5
2 (9
747

40
40- 


:2
2!'&3
4;4!
!("!"
:2
2!  <=>> 0!01
 
?)2 ,

2 *#$):2
2!  ,4  /
 

 0.
2 

!&!&@
 !&&

!!&A2  !
!
(/
 "
!
2 

!&5!&5@!B)
 3!,!&&(
"
C
"*!B)!&5A)2 3,, !
!
(/
:
*&#$#*$)!& DD$  ,
4;!&

:
*#$#*$)! DD$  ,
:
+"*#$#*$)"* DD$  ,



Same obliczenia nie wymagaj chyba komentarza. Deklaracja tablicy 


umoliwia obsuenie do tysica wartoci, co na potrzeby tego eksperymentu chyba wystarczy. Warto zauway, e na si moglibymy si obej bez tablicy, bowiem nasze
liczby cay czas przechowywane s w komponencie  
(skd notabene pobieramy je za pomoc operatora indeksowania, tak samo jak z tablic). Nikogo jednak nie

134

Praktyczny kurs Delphi

trzeba przekonywa, e pole tekstowe nie jest najlepszym narzdziem do przechowywania liczb rzeczywistych, a poza tym narzut zwizany z pobieraniem poszczeglnych
wierszy i przeksztacaniem ich na wartoci typu  jest zbyt duy, by rozwizanie
takie miao sens. Na koniec zwrmy uwag na intensywne wykorzystanie w programie ptli  obsuga tablic i dostpu indeksowanego to jej ulubione zastosowania.
Jak wida, wykorzystanie tablic jednowymiarowych (a takich w programach spotyka si
najwicej) nie jest specjalnie skomplikowane. Przejdmy zatem na kolejny poziom
i powiedzmy kilka sw na temat tablic dwuwymiarowych. Wspomniana ju deklaracja:

   

tworzy dwuwymiarow tablic zoon o wymiarach 50 na 50 elementw, zawierajc


liczby rzeczywiste. W matematyce tablica taka nosi nazw macierzy i moe by zapisana
symbolicznie jako:
x1,1

x 2,1
M

x 50,1

x1,2
x 2, 2
M
x 50,2

x1,50

x 2,50
M
M

L x 50 ,50

Zarwno wektory (tablice jednowymiarowe), jak i macierze stosowane s szeroko


w obliczeniach naukowych i inynierskich, tote umiejtno posugiwania si nimi
moe okaza si bardzo istotna. Skoro tak, przedstawimy obecnie kilka podstawowych technik obsugi tablic dwuwymiarowych.
Dostp do pojedynczego elementu tablicy    mona zapisa nastpujco:
 E 

W powyszym zapisie posugujemy si dwoma indeksami wiersza i kolumny rozdzielonymi przecinkiem. W oglnym przypadku tablicy N-wymiarowej nasz zapis miaby
posta:
#      

Odwoania do pojedynczych elementw macierzy spotykane s do rzadko; na og


obliczenia dotycz caych wierszy lub kolumn, a indeksy przybieraj kolejno wartoci
od pierwszego do ostatniego elementu wiersza lub kolumny. Poniewa do indeksowania w pojedynczym wymiarze najlepiej nadaje si ptla , a wymiary s dwa,
musimy wykorzysta dwie ptle. Przykadowa konstrukcja tworzca tzw. macierz
jednostkow (zawiera ona same zera za wyjtkiem gwnej przektnej3, na ktrej
znajduj si jedynki) ma posta:




    
     
3

Przektn gwn macierzy kwadratowej tworz elementy, dla ktrych indeks wiersza jest rwny
indeksowi kolumny. Jak atwo si przekona, s one uoone wzdu przektnej biegncej od lewego
grnego do prawego dolnego wierzchoka macierzy.

Rozdzia 12. Zapisujemy wicej danych, czyli tablice

135

Jak wida, w ptli zewntrznej, indeksujcej wiersze (licznik ) znajduje si ptla


wewntrzna, indeksujca kolumny (licznik ). W niej z kolei umieszczono instrukcj
warunkow, wstawiajc do danego elementu warto 0 lub 1. Konstrukcja taka nosi
nazw ptli zagniedonych i jest powszechnie stosowana w przetwarzaniu tablic
dwuwymiarowych. Oczywicie obie ptle sterowane s rnymi licznikami, co zreszt
jest do naturalne. Nie do tego, prba uycia tej samej zmiennej jako licznika obu
ptli (co zdarzao si roztargnionym programistom piszcym np. w Turbo Pascalu)
jest w Delphi nielegalna zapis:





zostanie przez kompilator potraktowany jako prba zmodyfikowania wartoci licznika


zewntrznej ptli w jej treci, co doprowadzi do bdu kompilacji.
Przy okazji indeksowania warto wspomnie o jeszcze jednej interesujcej kwestii.
Na pozr wydawaoby si, e kolejno ptli w powyszym zapisie nie ma znaczenia
innymi sowy obojtne jest, czy licznik ptli zewntrznej indeksuje wiersze a wewntrznej kolumny, czy odwrotnie. Okazuje si jednak, e zamiana licznikw ptli
miejscami:





ma powany wpyw na czas wykonania programu! Aby to zaobserwowa, naley


oczywicie powikszy rozmiary macierzy (by moe trzeba bdzie zadeklarowa j
jako globaln) i uy precyzyjnego narzdzia do pomiaru czasu (w naszym przykadzie wykorzystalimy klas  , ktr przedstawimy szczegowo w czci
ksiki powiconej programowaniu obiektowemu). Czas wypenienia tablicy o rozmiarach 1000 na 1000 elementw, zmierzony na komputerze z procesorem AMD
Athlon 1.2 GHz, wynis 20 milisekund w przypadku indeksowania wzdu wierszy
i 37 milisekund (czyli prawie dwa razy duej!) w przypadku indeksowania wzdu
kolumn. Dlaczego?
Kluczem do rozwizania zagadki jest sposb przechowywania zawartoci tablicy
w pamici. W Pascalu, podobnie jak w jzyku C, tablice dwuwymiarowe zapisywane s
w pamici kolejno wierszami 4. Oznacza to, e nastpujce po sobie odwoania do
kolejnych elementw wiersza bd trafiay pod kolejne adresy pamici, podczas gdy
odwoania wzdu kolumny bd kierowane pod adresy oddalone od siebie o liczb
bajtw odpowiadajc dugoci pojedynczego wiersza. Dziaanie mechanizmw dostpu do pamici (w tym take stosowane w nowoczesnych komputerach tzw. pamici podrczne) powoduje, e odwoania do adresw lecych blisko siebie s znacznie szybsze, ni odwoania do adresw rozproszonych w wikszym obszarze pamici.
A zatem zapisanie w ptli kolejnych elementw wiersza (pooonych jeden za drugim)
odbdzie si znacznie szybciej ni zapisanie kolejnych elementw kolumny (oddalonych od siebie o wiele bajtw). Oczywicie na cay proces maj wpyw inne czynniki,
jak choby rozmiar tablicy, jednak oglna regua jest zawsze ta sama indeksujc
tablic dwuwymiarow naley robi to odpowiednio do sposobu jej przechowywania
w pamici.
4

Nie jest to bynajmniej powszechna regua w Fortranie tablice zapisywane s kolumnami.

136

Praktyczny kurs Delphi

Wrmy teraz do zagadnie bardziej przyziemnych i zastanwmy si, w jaki sposb


obliczy sum elementw lecych w grnym trjkcie macierzy, tj. na jej przektnej
i ponad ni:
x1,1

x1, 2
x 2 ,2
M

x1,50
x 2 ,50
M
M

L x 50 ,50

Jak atwo sprawdzi, dla kadego sumowanego elementu speniony jest warunek:
i j
gdzie  jest indeksem wiersza, za  indeksem kolumny. Wykorzystujc t regu,
moemy zapisa sumowanie jako:
!&




< !&!&@   

Jak nietrudno wyliczy, cakowita liczba przebiegw obu ptli wynosi 2500 (50 razy 50),
przy czym tylko cz z nich (dokadnie 1275) bdzie penych w pozostaych
przypadkach instrukcja warunkowa nie wykona si. Jeli podejrzewasz, e powyszy
zapis da si ulepszy, masz racj. Zauwamy, e w kadym wierszu sumowaniu podlegaj tylko te elementy, dla ktrych numer kolumny () jest wikszy lub rwny numerowi danego wiersza (). Dlaczego zatem nie zapisa:
!&




!&!&@   

Nikt przecie nie powiedzia, e ptla musi rozpoczyna si od jedynki, ani e do inicjalizacji licznika nie mona wykorzysta innej zmiennej (np. licznika ptli zewntrznej)!
W ten sposb obcilimy prawie poow przebiegw, co prawda pustych, ale jednak
zajmujcych jaki czas pomiary wykonane przez autora wykazay przyrost prdkoci
o ponad 20 procent, co jest zyskiem niebagatelnym.
Opisane tu zabiegi to nic innego, jak optymalizacja programu poprawienie jego
wydajnoci poprzez odpowiedni modyfikacj kodu rdowego. W przypadku sumowania elementw ponad przektniowych optymalizacja polegaa na zmianie struktury
ptli, co wyeliminowao cz niepotrzebnych oblicze. Usprawnienie ma w tym przypadku natur ogln jest niezalene od uywanego jzyka programowania, kompilatora czy te sprztu. Z kolei technika zademonstrowana przy okazji tworzenia macierzy jednostkowej jest specyficzna, wykorzystuje bowiem charakterystyczn dla
Pascala organizacj danych w pamici oraz mechanizmy sprztowe, ktre w innych
komputerach mog by niedostpne lub dziaa inaczej5.
5

Przemilczmy dyskretnie fakt, i w zasadzie nie dokonalimy tu adnej optymalizacji kod by


optymalny w swojej pierwotnej wersji, my za z premedytacj popsulimy go, aby zademonstrowa
efekt zamiany indeksw.

Rozdzia 12. Zapisujemy wicej danych, czyli tablice

137

Zapamitaj
 Typy zoone z danych innych typw nosz nazw typw strukturalnych.

Nale do nich tablice i rekordy.


 Tablice umoliwiaj przechowywanie wikszych iloci danych tego samego typu.
 Tablice mog by jedno-lub wielowymiarowe. Tablice jednowymiarowe

zwane s wektorami, za wielowymiarowe macierzami.


 Dostp do elementw tablicy realizuje si poprzez indeksowanie. Indeksy

tablicy s wartociami cakowitymi; Pascal nie narzuca ogranicze na zakres


i liczb indeksw.
 Do indeksowania tablic wykorzystuje si najczciej ptle .
 Operacje na tablicach czsto mona zoptymalizowa, bd to poprzez zmian

ukadu kodu rdowego, bd te poprzez wykorzystanie specyficznych cech


samego komputera.

Pomyl
1. Napisz procedur wyszukujc i zwracajc najmniejsz i najwiksz warto

w jednowymiarowej tablicy liczb rzeczywistych.


2. Transpozycj macierzy nazywamy zamian miejscami jej kolumn i wierszy.
Napisz procedur  , dokonujc transpozycji macierzy kwadratowej 

(macierz kwadratowa ma tyle samo wierszy, ile kolumn).

You might also like