You are on page 1of 16

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK

Delphi. Szybki start


Autor: Maciej Szmit
ISBN: 83-246-0226-7
Format: B5, stron: 224

KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Jzyk Pascal, kojarzcy si gwnie z nauk programowania, sta si podstaw jednego


z najpopularniejszych obecnie rodowisk programistycznych Delphi firmy Borland.
To graficzne rodowisko, pozwalajce na szybkie tworzenie aplikacji dziki moliwoci
skadania ich z klockw zwanych komponentami, byskawicznie zyskao uznanie
programistw na caym wiecie. Kolejne wersje Delphi oferoway coraz wiksze
moliwoci. Jego najnowsza wersja pozwala na tworzenie programw dla platformy
.NET i korzystanie nie tylko z jzyka Pascal, ale rwnie z coraz popularniejszego C#.
Ksika Delphi. Szybki start to doskonay przewodnik po Delphi dla pocztkujcych
uytkownikw. Dziki niemu poznasz jzyk Object Pascal i zasady programowania
obiektowego. Nauczysz si wykorzystywa komponenty do tworzenia aplikacji
i od zera napiszesz wasne programy. Dowiesz si, czym si rni Delphi 7
od Delphi 2005, i wykorzystasz moliwoci obu tych rodowisk.
Interfejs uytkownika rodowiska Delphi
Elementy jzyka Object Pascal
Programowanie obiektowe
Obsuga wyjtkw
Tworzenie okien dialogowych
Projektowanie interfejsw uytkownika
Korzystanie z komponentw
Poznaj moliwoci rodowiska Delphi

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

Spis treci

Wprowadzenie

Zaczynamy
13
Interfejs uytkownika ...............................................................................13
Pierwszy program w Delphi .....................................................................17
Aplikacje konsolowe ................................................................................18
Diagramy skadniowe ...............................................................................25

Rozdzia 2.

Nieobiektowe elementy jzyka Object Pascal


27
Stae, identyfikatory i wyraenia ..............................................................27
Typy danych, zmienne, instrukcja przypisania,
rzutowanie typw, funkcje ord, pred i succ ...........................................29
Zmienne z wartoci pocztkow .............................................................37
Operatory ..................................................................................................38
Operacje wejcia-wyjcia, procedury write/writeln i read/readln ............42
Typy acuchowe i operator konkatenacji ................................................43
Instrukcja pusta i instrukcja zoona ........................................................44
Instrukcja warunkowa ..............................................................................45
Instrukcja wyboru .....................................................................................49
Definiowanie wasnych typw, typy wyliczeniowe i okrojone,
zgodno typw, zgodno w sensie przypisania .....................................50
Typ wariantowy ........................................................................................54
Definicja statycznego typu tablicowego ...................................................55
Instrukcja iteracyjna, procedury break i continue ....................................56
Instrukcja iteracyjna z warunkiem na kocu ............................................59
Instrukcja iteracyjna z warunkiem na pocztku .......................................60
Typ rekordowy (bez wariantw),
nazwy kwalifikowane i instrukcja wica ...........................................62
Rekordy z wariantami ..............................................................................66

Spis treci

Rozdzia 1.

Spis treci

Spis treci

Podprogramy pojcia podstawowe: funkcje, procedury,


zmienne lokalne, parametry formalne i aktualne, dyrektywy jzyka,
parametry o domylnej wartoci, procedury inc i dec ...........................69
Podprogramy efekty uboczne ..............................................................76
Podprogramy rekurencja .....................................................................77
Podprogramy przecianie ..................................................................78
Podprogramy konwencje wywoania i dyrektywa forward .................79
ledzenie dziaania programu ..................................................................81
Typ zbiorowy, operator in ........................................................................83
Typy wskanikowe i zmienne dynamiczne ..............................................85
Dynamiczny typ tablicowy .......................................................................91
Tablice otwarte i wariantowe tablice otwarte ...........................................92
Moduy i przestrzenie nazw .....................................................................95
Typ plikowy .............................................................................................98
Typ proceduralny ...................................................................................103
Etykiety i instrukcja skoku .....................................................................104
Procedury kierujce dziaaniem programu:
exit, halt, runerror, sleep, abort ............................................................105
Operator @ i funkcja addr ......................................................................106
Rozdzia 3.

Wprowadzenie do technik obiektowych.


Wybrane obiektowe elementy jzyka Object Pascal
109
Klasy, obiekty, metaklasy, generalizacja ...............................................110
Polimorfizm, metody dynamiczne i wirtualne .......................................115
Abstrakcja ...............................................................................................119
Hermetyzacja ..........................................................................................122
Agregacja ...............................................................................................125
Asocjacja i porozumiewanie si za pomoc komunikatw ....................125
Operatory is i as ......................................................................................126
Interfejsy (typ interface) .........................................................................129
Podstawy obsugi sytuacji wyjtkowych ................................................132
Programowanie z uyciem wtkw ........................................................139
Przecianie operatorw w Delphi 2005 dla .NET ................................143

Spis treci

Rozdzia 4.

Programowanie wizualno-obiektowe
145
Pierwsza aplikacja okienkowa ................................................................145
Implementacja prostych operacji wejcia i wyjcia
w programie okienkowym. Komponent TEdit, typ Pchar,
modalne i niemodalne okna dialogowe ...............................................154
Tworzenie dodatkowych okien w programie .........................................161
Przetwarzanie komunikatw Windows.
Metoda ProcessMessages obiektu Application ....................................163
Dynamiczne tworzenie komponentw ...................................................165
Biblioteki DLL w Windows. Dyrektywa external .................................169
Pakiety ....................................................................................................173
Instalacja i deinstalacja dodatkowych komponentw ............................175
Tworzenie wasnych komponentw .......................................................181
191

Dodatek A

Bibliografia

193

Dodatek B

Identyczno typw, zgodno


i zgodno w sensie przypisania

195

Dodatek C

Sowa kluczowe i symbole specjalne

197

Dodatek D

Dyrektywy jzyka w Delphi 2005

199

Dodatek E

Spis rysunkw

201

Dodatek F

Spis tabel

205

Dodatek G

Spis listingw

207

Skorowidz

213

Spis treci

Zakoczenie

Nieobiektowe elementy jzyka Object Pascal

Rozdzia 2. Nieobiektowe elementy jzyka Object Pascal

Stae, identyfikatory
i wyraenia

Wyraenie jest zbiorem wartoci staych,


zmiennych i czcych je operatorw (czyli
symboli oznaczajcych operacje, na przykad
operacje dodawania oznaczamy operatorem +).
W obrbie wyrae moesz rwnie uywa
nawiasw okrgych. Na przykad wyraeniem
jest 22+432+232098 albo 88+(2323).
Do wywietlania na ekranie wartoci wyrae,
staych i zmiennych su w jzyku Pascal
(i w Delphi) wspomniane wczeniej procedury:
write, wywietlajca wyraenie podane jako
parametr, i writeln, ktra wywietla wyraenie
podane jako parametr i przesuwa kursor
do nastpnej linii.

27

Stae, identyfikatory i wyraenia

Jzyk Delphi operuje pojciami wyrae


i zmiennych w sposb podobny do innych
jzykw programowania. Pojcie staej
jest uywane w znaczeniu matematycznym
(na przykad staa e podstawa logarytmw
naturalnych odpowiadajca liczbie rwnej
w przyblieniu 2,718281828). W programie staa
bdzie po prostu wartoci reprezentowan przez
jaki symbol (nazw staej). Ilekro w programie
(w kodzie rdowym) wystpi nazwa staej,
Delphi podstawi w tym miejscu odpowiedni
warto. Nazwa staej nazywana jest jej
identyfikatorem. Oczywicie musisz poinformowa
Delphi, e pod dan nazw bdzie krya si jaka
warto. Sam z siebie program nie bdzie
wiedzia, czy symbol X oznacza warto pi,
czy moe osiem. Definicje staych zapisujemy
rwnie w czci biernej programu, poprzedzajc
je sowem const (ang. constant staa).

Rozdzia 2.
Wskazwki
n Parametry procedur podajemy w Delphi

w nawiasach okrgych.
n Procedura writeln wywietla obliczon

uprzednio warto podanego jako parametr


wyraenia.

Stae, identyfikatory i wyraenia

Na listingu 2.1 przedstawiony zosta przykad


programu wykorzystujcego procedur writeln.
Na listingu 2.2 przedstawiono program,
w ktrym uyto staej o nazwie dwa,
zdefiniowanej w sekcji definicji staych
(linijki 3 i 4). Jak widzisz, do poinformowania
programu o wartoci staej uyto znaku
rwnoci. Efektem dziaania programu jest
wywietlenie na ekranie liczby 5, ktra jest
wynikiem obliczenia wartoci wyraenia bdcego
parametrem wywoania procedury writeln.

Listing 2.1. Program obliczajcy warto


wyraenia 2+2 i wywietlajcy wynik
{1}
{2}
{3}
{4}
{5}
{6}

program Project1;
{$APPTYPE CONSOLE}
begin
writeln(2+2);
readln;
end.

Listing 2.2. Przykad uycia staej


{1} program Project1;
{2} {$APPTYPE CONSOLE}
{3} Const //tu zaczyna sie sekcja definicji staych
{4}
dwa=2; //definicja stalej o nazwie dwa
rownej 2
{5} begin
{6}
writeln(dwa+3);
{7} readln;
{8} end.

Wskazwka
n Zwr uwag, e po sowie kluczowym
const nie ma rednika. Podobnie rednika

nie uywamy po innych sowach kluczowych


oznaczajcych pocztki sekcji.

Rysunek 2.1. Diagram skadniowy pojcia


definicja staej (wersja uproszczona)

Moemy w tym miejscu wyjani pojcie definicji


staej, posugujc si poznanymi uprzednio
diagramami skadniowymi (rysunek 2.1).
W definicji staych moliwe jest dodatkowo
uycie niektrych funkcji wbudowanych1,
tak aby staa (lub zmienna inicjowana)
przyjmowaa warto wyraenia zbudowanego
za ich pomoc, na przykad:
{1} const
{2}
L:longint=trunc(9.3212);
{3}
M =trunc(9.3212);

Mona rwnie uy rzutowania typw (pojcie


to zostanie wyjanione w kolejnym podrozdziale).

Wskazwka
n Pamitaj: jeli chcielibymy, eby nasz

program wywietli na ekranie nie liczb,


a napis (cig znakw), powinnimy jako
parametru wywoania procedury writeln
uy tego cigu ujtego w apostrofy.

Funkcje: abs, chr, hi, high, length, lo, low, odd, ord, pred, round, sizeof, succ, swap oraz trunc.
Pojcie funkcji zostanie wyjanione w dalszej czci ksiki.

28

Nieobiektowe elementy jzyka Object Pascal

Rysunek 2.2. Diagram skadniowy pojcia


deklaracja zmiennych

Typy danych, zmienne,


instrukcja przypisania,
rzutowanie typw,
funkcje ord, pred i succ

Kada zmienna musi nalee do okrelonego


typu, to znaczy decydujc si na uycie
w programie zmiennej, musimy zdecydowa,
czy bdzie ona na przykad liczb (i jakiego
rodzaju), czy napisem. W przeciwnym razie
wyniki dziaania naszego programu nie
byyby jednoznacznie okrelone. Na przykad
z poczenia napisw (znakw pisma) 1 i 0
otrzymamy napis 10, natomiast dodanie liczb
1 i 0 da w wyniku oczywicie jeden. Dlatego te
deklaracja zmiennej zawiera okrelenie typu,
do ktrego zmienna naley, przy czym przez
typ danych rozumie si zbir moliwych
wartoci wraz z okrelonym identyfikatorem
(rysunek 2.2).

29

Typy danych

Jak zapewne si domylasz, oprcz staych


bardzo przydayby si w programie struktury
danych, ktrych wartoci zmieniayby si
w trakcie dziaania programu. Takimi strukturami
s zmienne. Zmienna to struktura danych
o okrelonej nazwie, suca do przechowywania
wartoci okrelonego typu, ktra to warto
moe zmienia si w trakcie dziaania programu.
Pojcie to jest uywane podobnie jak pojcie
zmiennej w matematyce. Jeli mwimy np.
o liczbie X, to przez ten symbol rozumiemy
jak dowoln ustalon liczb, na ktrej
bdziemy przeprowadza rozmaite operacje.
Deklaracje zmiennych zapisujemy w czci
biernej programu w sekcji deklaracji
zmiennych, poprzedzajc je sowem var
(ang. variables zmienne).

Rozdzia 2.
W Delphi istnieje rozbudowana hierarchia
typw, z ktrych najwaniejsze s typy proste
(rzeczywiste i porzdkowe), strukturalne
(tablicowe, rekordowe, zbiorowe, plikowe
i obiektowe), wskanikowe, wariantowe,
proceduralne oraz acuchowe. Najprostsze typy,
z ktrymi bdziesz si spotyka, to typ znakowy
deklarowany sowem char (ang. character
znak pisma), oznaczajcy pojedynczy znak
pisma (liter, cyfr, znaki przestankowe itd.),
typ acuchowy string (ang. string sznurek),
uywany do zapisu acucha znakw, typ
cakowitoliczbowy integer (ang. integer
cakowitoliczbowy), uywany do zapisu
liczb cakowitych (dodatnich i ujemnych)
dajcych si zapisa w dwch bajtach pamici
(wliczajc bit znaku), oraz typ rzeczywisty
real (ang. real rzeczywisty), uywany do
zapisu liczb posiadajcych cz uamkow.

Typy danych

Wskazwka
n Mwimy o sekcji definicji staych (gdy tam

definiujemy stae podajemy zarwno ich


identyfikatory, jak i wartoci) i o sekcji
deklaracji zmiennych (tam bowiem
deklarujemy jedynie, e w programie
bdziemy uywa zmiennych o okrelonych
nazwach nalecych do okrelonych typw).
Do nadania zmiennej okrelonej wartoci suy
instrukcja przypisania, zapisywana za pomoc
symbolu dwukropka i znaku rwnoci :=
(na przykad zapis X:=8 czytamy: niech
zmienna X przyjmie warto osiem).
W przykadzie przedstawionym na listingu 2.3
widzimy zadeklarowan (linia 4) zmienn
cakowitoliczbow o nazwie x, ktrej w czci
czynnej programu za pomoc instrukcji
przypisania (linia 6) przypisujemy warto
osiem, a nastpnie wywietlamy t warto
na ekranie (linia 8).
Formalna definicja pojcia instrukcja przypisania
przedstawiona jest na rysunku 2.3.

30

Listing 2.3. Wykorzystanie zmiennej


{1}
{2}
{3}
{4}
{5}
{6}
{7}

program Project2;
{$APPTYPE CONSOLE}
var
x:integer;
begin
x:=8;
writeln('wartosc zmiennej i{s
wynosi:');
{8}
writeln(x);
{9}
readln;
{10} end.

Rysunek 2.3. Definicja instrukcji przypisania

Nieobiektowe elementy jzyka Object Pascal


Listing 2.4. Program obliczajcy objto kuli
o promieniu 2
{1}
{2}
{3}
{4}
{5}
{6}
{7}
{8}
{9}
{10}
{11}
{12}
{13}

program Project1;
{$APPTYPE CONSOLE}
{program oblicza objetosc kuli o promieniu
rownym 2}
var
promien, objetosc:real; {dwie zmienne
rzeczywiste}
begin
promien:=2; {przypisz zmiennej promien
wartosc dwa}
objetosc:=4*3.14*promien*
promien*promien/3;
writeln('Objetosc {uli o promieniu 2
wynosi');
writeln(objetosc);
writeln('Nacisnij ENTER');
readln;
end.

W kolejnym przykadzie (listing 2.4)


przedstawiono program obliczajcy objto
kuli o promieniu 2.
W sekcji deklaracji zmiennych zadeklarowano
dwie zmienne o nazwach promien i objetosc,
obie typu real (linia 5). W czci czynnej
programu (po sowie kluczowym begin)
zmiennej promien przypisano warto 2,
natomiast zmiennej objetosc warto
4
3
wyraenia p ( promien ) ktre wyraa wzr
3
na objto kuli.
Do oznaczenia operacji mnoenia suy

w Delphi znak gwiazdki *.

Podnoszenie do szecianu w przykadzie 2.4

zrealizowano jako trzykrotne mnoenie


przez siebie zmiennej promien, w jzyku
Pascal nie ma bowiem operatora
potgowania.

W jzyku Pascal separatorem czci uamkowej


jest kropka, natomiast zapis E+0001 znaczy
razy dziesi do potgi pierwszej (jest to tak
zwany zapis naukowy, litera E jest skrtem
angielskiego sowa exponent, czyli wykadnik).
Objto kuli wynosi zatem okoo 33,493
(sownie: trzydzieci trzy i czterysta
dziewidziesit trzy tysiczne).

31

Typy danych

Otrzymany na ekranie zapis wyniku:


3.34933333333333E+0001 oznacza liczb
3,34933333333333 101 .

Rozdzia 2.

Typy danych

Typy liczbowe (to jest typy cakowite oraz


rzeczywiste) rni si od siebie midzy innymi
rozmiarem pamici przeznaczonej na zapisanie
wartoci danej zmiennej oraz sposobem jej
reprezentacji. Jeeli zadeklarujesz dan zmienn
jako nalec na przykad do typu cakowitego
byte, oznacza to bdzie, e na przechowywanie
jej wartoci w pamici RAM komputera
zarezerwowano jeden bajt (osiem bitw), zatem
najwiksz wartoci, jak zmienna bdzie
moga przyj, jest 255 (dwjkowo 11111111),
a najmniejsz zero. Prba przypisania tej
zmiennej wikszej wartoci moe prowadzi
do nieoczekiwanych rezultatw dziaania
programu, poniewa wystpi tzw. bd
nadmiaru staoprzecinkowego (ang. Static
Point Overflow, SPO). Z tego te powodu
w trakcie tworzenia programu istotny jest
waciwy dobr typw dla kadej zmiennej.
Efektem dziaania programu z listingu 2.5.
bdzie wywietlenie liczby zero.
Bdzie si tak dziao dlatego, e reprezentacj
liczby typu byte jest po prostu warto zapisana
w kolejnych bitach jednego bajta. Dla liczby
255 jest to osiem jedynek:
1

Po zwikszeniu tej wartoci o jeden w pamici


zostanie zapisana liczba 256, czyli dwjkowo
10000000, przy czym najbardziej znaczcy bit
bdzie si ju znajdowa poza zakresem
komrki, w ktrej zapisana jest zmienna,
i zostanie pominity:
1

zatem program, wywietlajc jej warto,


uwzgldni jedynie osiem zer i wywietli
warto zero.

32

Listing 2.5. Przykad bdnego doboru typu zmiennej


{1}
{2}
{3}
{4}
{5}
{6}
{7}
{8}

program Project2;
{$APPTYPE CONSOLE}
var
x:byte;
begin
x:=255;
x:=x+1;
writeln('wartosc zmiennej i{s
wynosi:');
{9}
writeln(X);
{10}
readln;
{11} end.

Nieobiektowe elementy jzyka Object Pascal


Nazwy poszczeglnych typw liczbowych,
rozmiary pamici i zakresy, jakie mog
przyjmowa nalece do nich zmienne,
przedstawiono w tabelach 2.1 i 2.2.
Wskazwka
n Pamitaj, e wynikiem dzielenia dwch liczb

cakowitych jest czsto liczba niecakowita.


Operacja dzielenia dwch liczb w Pascalu
zwraca zawsze wynik typu rzeczywistego
(nawet jeeli dzielnik mieci si w dzielnej
cakowit ilo razy, to jest jeeli wynik ilorazu
jest cakowity), dlatego te jeeli chcemy wynik
dzielenia przypisa jakiej zmiennej, to musi
by to zmienna typu rzeczywistego.

Tabela 2.1. Typy rzeczywiste


Nazwa typu

Minimum

Maksimum

Liczba cyfr
znaczcych

Rozmiar
w bajtach

Real48

2,91039

1,71038

11 12

Single

45

1,510

3,41038

78

Double

5,010324

1,710308

15 16

Extended

3,6104951

1,1104932

19 20

10

Comp

(263)+1

(263)+1

19 20

Currency

922337203685477,5808

922337203685477,5807

19 20

Real

5,010324

1,710308

15 16

Tabela 2.2. Typy cakowite


Nazwa typu

Minimum

Maksimum

Rozmiar w bajtach

Integer

2147483648

2147483647

32 z bitem znaku

Cardinal

4294967295

32 bez bitu znaku

Shortint

128

127

8 bez bitu znaku

Smallint

32768

32767

16 z bitem znaku

Longint

2147483648

2147483647

32 z bitem znaku

Int64

(263)

2631

64 z bitem znaku

Byte

255

8 bez bitu znaku

Word

65535

16 bez bitu znaku

Longword

4294967295

32 bez bitu znaku

33

Typy danych

Przez typy porzdkowe rozumie si grup typw,


w ktrych okrelony jest pewien porzdek, to jest
pomidzy elementami nalecymi do tego typu
mona okreli relacje: wikszoci i nastpstwa.
Istnienie relacji nastpstwa oznacza, e dla elementu
takiego typu mona poda jego nastpnika lub
poprzednika. Na przykad jednobajtowa liczba
cakowita 2 jest wiksza od liczby cakowitej 0, jej
poprzednikiem jest liczba 1, a nastpnikiem liczba 3.

Rozdzia 2.
Aby przekona si, jaki jest numer porzdkowy
elementu w danym typie (listing 2.6),
posugujemy si funkcj ord(element),
poprzednika danego elementu zwraca funkcja
pred(element), a nastpnika succ(element).
Typw okrelajcych liczby rzeczywiste nie
zaliczamy do typw porzdkowych, poniewa
mimo e wrd liczb rzeczywistych mona
zdefiniowa relacj wikszoci nie mona
poda dokadnie okrelonego, jednego
bezporedniego nastpnika ani poprzednika
dowolnej liczby rzeczywistej.

Typy danych

Typami wyliczeniowymi nazywamy te typy


liczbowe, ktre s jednoczenie typami
porzdkowymi.
W typie znakowym (char) relacja wikszoci
okrelona jest w ten sposb, e kolejne znaki
uporzdkowane s wedug ich kodw ASCII,
w szczeglnoci cyfry (od zera do dziewiciu)
poprzedzaj wielkie litery (w kolejnoci
alfabetycznej), a te z kolei mae litery
(w kolejnoci alfabetycznej).
Ostatnimi z typw wyliczeniowych s typy
logiczne. Uywane s do oznaczenia stanw
logicznych: prawda (true) oraz fasz (false).
W standardowym Pascalu istnieje jeden typ
logiczny deklarowany za pomoc sowa
boolean, w Delphi istnieje kilka typw
logicznych, ktre rni si reprezentacj
(liczb i sposobem rozumienia bitw
przeznaczonych do przechowywania w pamici
wartoci typu logicznego). S to typy Boolean,
ByteBool, WordBool oraz LongBool. W klasycznym
typie Boolean do zapamitania wartoci
przeznaczony jest jeden bajt pamici i obowizuje
relacja False<True, przy czym nastpnikiem
False jest True, a True nie ma nastpnika.
W pozostaych typach logicznych nastpnikiem
True jest False, a nastpnikiem False jest True.
Stosowanie typu boolean jest zalecane wszdzie
tam, gdzie nie zachodzi konieczno zachowania
zgodnoci z uywanymi bibliotekami lub
wymogi programu nie nakazuj uycia innych
typw logicznych.

34

Listing 2.6. Uycie funkcji ord, pred i succ


{1} program Project1;
{2} {$APPTYPE CONSOLE}
{3}
{4} begin
{5}
writeln(succ('A')); //jaka litera
nastepuje po "A"
{6}
writeln(pred('C')); //jaka litera
poprzedza "C"
{7}
writeln(ord(12)); //numer porzadkowy
liczby 12 wsrod liczb typu byte
{8}
readln;
{9} end.

Nieobiektowe elementy jzyka Object Pascal


W standardzie jzyka Pascal kada zadeklarowana
zmienna ma nieustalon warto pocztkow,
dlatego te zanim zostanie do czegokolwiek
uyta, powinna mie przypisan jak warto
(w przeciwnym razie dziaanie programu moe
przynie nieoczekiwane efekty). Czsto
w pocztkowej czci programu programista
umieszcza polecenia zainicjowania zmiennych,
to jest przypisuje wszystkim zmiennym
wystpujcym w programie jak warto
pocztkow (na przykad zero dla zmiennych
liczbowych). Delphi standardowo powinno
inicjowa zadeklarowane zmienne typw prostych:
u liczby liczb zero,
u znaki znakiem o numerze porzdkowym

zero,
u zmienne typw logicznych wartoci
False.

Rysunek 2.4 przedstawia hierarchi typw


w Delphi.

Rysunek 2.4. Podstawowa hierarchia typw w Delphi

35

Typy danych

W praktyce jednak inicjowanie to nie zawsze


dziaa poprawnie, dlatego te bezpieczniej jest
przeprowadza je w programie samodzielnie.

Rozdzia 2.

Typy danych

Rzutowanie typw jest to wymuszenie


na programie interpretacji zawartoci danej
komrki pamici jako wartoci nalecej do
okrelonego typu. Jeli na przykad w komrce
pamici o dugoci jednego bajta zapisalimy
liczb 65, to jej zawarto bdzie w rzeczywistoci
zapisana w postaci liczby dwjkowej 01000001.
Ten sam zapis i ta sama liczba zinterpretowana
jako warto kodu ASCII odpowiada wielkiej
literze A. Jeli zatem wymusimy na programie
tak interpretacj, to powinien on potraktowa
t warto jako zakodowan liter A (listing
2.7). Rzutowanie typw mona w Pascalu
zrealizowa poprzez wywoanie nazwy typu
z parametrem (podanym w nawiasach) bdcym
wartoci lub zmienn, ktra ma by zamieniona
na zmienn innego typu.
Moesz rwnie rzutowa np. liczb zero
na warto typu logicznego boolean,
co da w wyniku warto False. Natomiast
w przypadku liczby jeden bdzie to warto
logiczna True (listing 2.8).
Wskazwki
n Decydujc si na uycie rzutowania, musisz

dokadnie wiedzie, w jaki sposb dana


warto jest reprezentowana w pamici,
w przeciwnym razie moe doj do
niespodziewanych efektw.
n Jak wspomniano w poprzednim podrozdziale,

dopuszczalne jest uycie rzutowania typw


w obrbie sekcji definicji staych,
na przykad prawidowy bdzie zapis
Const N=byte(false);.
n Oprcz rzutowania typw moesz posuy

si licznymi dostpnymi w standardowych


moduach funkcjami konwersji typw,
ktre zazwyczaj s bezpieczniejsze.

36

Listing 2.7. Rzutowanie typw interpretacja


liczby jako znaku
{1}
{2}
{3}
{4}
{5}
{6}

program Project2;
{$APPTYPE CONSOLE}
begin
writeln(char(65));
readln;
end.

Listing 2.8. Rzutowanie liczby zero na warto


typu Boolean
{1}
{2}
{3}
{4}
{5}
{6}

program Project2;
{$APPTYPE CONSOLE}
begin
writeln(boolean(0));
readln;
end.

Nieobiektowe elementy jzyka Object Pascal


Listing 2.9. Przykad uycia zmiennej inicjowanej
{1}
{2}
{3}
{4}
{5}
{6}
{7}
{8}
{9}
{10}

program Project2;
{$APPTYPE CONSOLE}
const
dziwna_stala:byte=3;
begin
writeln(dziwna_stala);
dziwna_stala:=15;
writeln(dziwna_stala);
readln;
end.

Zmienne z wartoci
pocztkow
Jak pamitasz, stae nie wymagaj deklarowania
typw, do ktrych nale. Kompilator, dobierajc
typ staej, wybiera typy o moliwie najmniejszej
liczebnoci. Programista moe umieci w definicji
staej jawn deklaracj typu (na przykad aby
wymusi inn jej reprezentacj). Na przykad:
const liczba_pi:double=3.14;

W kolejnym przykadzie (listing 2.9) w linii 4


w obrbie sekcji definicji staych zdefiniowano
zmienn, ktrej nastpnie w czci czynnej
programu (linia 7) przypisano warto inn
ni warto pocztkowa.

37

Zmienne z wartoci pocztkow

Tak zdefiniowane stae, zwane typed constants


staymi o jawnie zadeklarowanym typie,
w rzeczywistoci zachowuj si jak zmienne
(dlatego te nazywa si je czasem zmiennymi
inicjowanymi). Moliwe jest modyfikowanie
ich wartoci wewntrz czci czynnej programu.

Rozdzia 2.

Operatory

Tabela 2.3. Operatory arytmetyczne


dwuargumentowe w Delphi

Poznae ju operatory: + (plus), oznaczajcy


dodawanie, oraz * (razy), oznaczajcy mnoenie.
Wszystkie operatory liczbowe przedstawia
tabela 2.3.

Operator

Operacja

+ (plus)

Dodawanie

- (minus)

Odejmowanie

* (gwiazdka)

Mnoenie

Operator div suy do dzielenia bez reszty.


Wynikiem operacji jest wtedy liczba cakowita
(typu cakowitego). W takim przypadku zmienna,
w ktrej chcemy zapisa wynik, moe by
zadeklarowana jako zmienna cakowita,
jak pokazano w przykadzie (listing 2.10).

/ (ukonik)

Dzielenie

div

Dzielenie bez reszty

mod

Reszta z dzielenia

Listing 2.10. Uycie operatora div

Operatory

{1}
{2}
{3}
{4}
{5}
{6}
{7}
{8}
{9}
{10}
{11}
{12}
{13}
{14}
{15}
{16}
{17}
{18}
{19}
{20}
{21}

38

program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
a,b,c:byte;
r:real;
begin
a:=11;
b:=5;
c:=a div b;
r:=a div b;
writeln('zapisany w postaci liczby
cal{owitej');
writeln('wyni{ dzielenia cal{owitego
11 div 5 wynosi ',c);
writeln('a zapisany w postaci liczby
rzeczywistej');
writeln('wyni{ tego samego dzielenia
wynosi ',r);
writeln('Nacisnij ENTER');
readln;
end.

You might also like