Académique Documents
Professionnel Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
Praktyczny
kurs Delphi
Autor: Tomasz M. Sadowski
ISBN: 83-7361-013-8
Format: B5, stron: 396
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
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
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
[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.:
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 :
131
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:
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
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
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
133
134
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:
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
W powyszym zapisie posugujemy si dwoma indeksami wiersza i kolumny rozdzielonymi przecinkiem. W oglnym przypadku tablicy N-wymiarowej nasz zapis miaby
posta:
#
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.
135
136
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
137
Zapamitaj
Typy zoone z danych innych typw nosz nazw typw strukturalnych.
Pomyl
1. Napisz procedur wyszukujc i zwracajc najmniejsz i najwiksz warto