SlideShare a Scribd company logo
1 of 16
Download to read offline
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TREŒCI
                                         Delphi. Szybki start
                                         Autor: Maciej Szmit
           KATALOG KSI¥¯EK               ISBN: 83-246-0226-7
                                         Format: B5, stron: 224
                      KATALOG ONLINE

       ZAMÓW DRUKOWANY KATALOG


              TWÓJ KOSZYK                Jêzyk Pascal, kojarz¹cy siê g³ównie z nauk¹ programowania, sta³ siê podstaw¹ jednego
                                         z najpopularniejszych obecnie œrodowisk programistycznych — Delphi firmy Borland.
                    DODAJ DO KOSZYKA     To graficzne œrodowisko, pozwalaj¹ce na szybkie tworzenie aplikacji dziêki mo¿liwoœci
                                         sk³adania ich z „klocków” zwanych komponentami, b³yskawicznie zyska³o uznanie
                                         programistów na ca³ym œwiecie. Kolejne wersje Delphi oferowa³y coraz wiêksze
         CENNIK I INFORMACJE             mo¿liwoœci. Jego najnowsza wersja pozwala na tworzenie programów dla platformy
                                         .NET i korzystanie nie tylko z jêzyka Pascal, ale równie¿ z coraz popularniejszego C#.
                   ZAMÓW INFORMACJE      Ksi¹¿ka „Delphi. Szybki start” to doskona³y przewodnik po Delphi dla pocz¹tkuj¹cych
                     O NOWOŒCIACH        u¿ytkowników. Dziêki niemu poznasz jêzyk Object Pascal i zasady programowania
                                         obiektowego. Nauczysz siê wykorzystywaæ komponenty do tworzenia aplikacji
                       ZAMÓW CENNIK      i od zera napiszesz w³asne programy. Dowiesz siê, czym siê ró¿ni Delphi 7
                                         od Delphi 2005, i wykorzystasz mo¿liwoœci obu tych œrodowisk.
                                             • Interfejs u¿ytkownika œrodowiska Delphi
                 CZYTELNIA                   • Elementy jêzyka Object Pascal
                                             • Programowanie obiektowe
          FRAGMENTY KSI¥¯EK ONLINE
                                             • Obs³uga wyj¹tków
                                             • Tworzenie okien dialogowych
                                             • Projektowanie interfejsów u¿ytkownika
                                             • Korzystanie z komponentów
                                                                  Poznaj mo¿liwoœci œrodowiska Delphi




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




              Wprowadzenie                                                                                               7
Rozdział 1.   Zaczynamy                                                                                            13
              Interfejs użytkownika ...............................................................................13
              Pierwszy program w Delphi .....................................................................17
              Aplikacje konsolowe ................................................................................18
              Diagramy składniowe ...............................................................................25
Rozdział 2.   Nieobiektowe elementy języka Object Pascal                                                                  27
              Stałe, identyfikatory i wyrażenia ..............................................................27
              Typy danych, zmienne, instrukcja przypisania,




                                                                                                                               Spis treści
                rzutowanie typów, funkcje ord, pred i succ ...........................................29
              Zmienne z wartością początkową .............................................................37
              Operatory ..................................................................................................38
              Operacje wejścia-wyjścia, procedury write/writeln i read/readln ............42
              Typy łańcuchowe i operator konkatenacji ................................................43
              Instrukcja pusta i instrukcja złożona ........................................................44
              Instrukcja warunkowa ..............................................................................45
              Instrukcja wyboru .....................................................................................49
              Definiowanie własnych typów, typy wyliczeniowe i okrojone,
                zgodność typów, 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 końcu ............................................59
              Instrukcja iteracyjna z warunkiem na początku .......................................60
              Typ rekordowy (bez wariantów),
                nazwy kwalifikowane i instrukcja wiążąca ...........................................62
              Rekordy z wariantami ..............................................................................66



                                                                                                                          3
Spis treści

                            Podprogramy — pojęcia podstawowe: funkcje, procedury,
                             zmienne lokalne, parametry formalne i aktualne, dyrektywy języka,
                             parametry o domyślnej wartości, procedury inc i dec ...........................69
                            Podprogramy — efekty uboczne ..............................................................76
                            Podprogramy — rekurencja .....................................................................77
                            Podprogramy — przeciążanie ..................................................................78
                            Podprogramy — konwencje wywołania i dyrektywa forward .................79
                            Śledzenie działania programu ..................................................................81
                            Typ zbiorowy, operator in ........................................................................83
                            Typy wskaźnikowe i zmienne dynamiczne ..............................................85
                            Dynamiczny typ tablicowy .......................................................................91
                            Tablice otwarte i wariantowe tablice otwarte ...........................................92
                            Moduły i przestrzenie nazw .....................................................................95
                            Typ plikowy .............................................................................................98
                            Typ proceduralny ...................................................................................103
                            Etykiety i instrukcja skoku .....................................................................104
                            Procedury kierujące działaniem programu:
Spis treści




                             exit, halt, runerror, sleep, abort ............................................................105
                            Operator @ i funkcja addr ......................................................................106
              Rozdział 3.   Wprowadzenie do technik obiektowych.
                            Wybrane obiektowe elementy języka 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ą komunikatów ....................125
                            Operatory is i as ......................................................................................126
                            Interfejsy (typ interface) .........................................................................129
                            Podstawy obsługi sytuacji wyjątkowych ................................................132
                            Programowanie z użyciem wątków ........................................................139
                            Przeciążanie operatorów w Delphi 2005 dla .NET ................................143




              4
Spis treści

Rozdział 4.   Programowanie wizualno-obiektowe                                                                           145
              Pierwsza aplikacja okienkowa ................................................................145
              Implementacja prostych operacji wejścia i wyjścia
                w programie okienkowym. Komponent TEdit, typ Pchar,
                modalne i niemodalne okna dialogowe ...............................................154
              Tworzenie dodatkowych okien w programie .........................................161
              Przetwarzanie komunikatów Windows.
                Metoda ProcessMessages obiektu Application ....................................163
              Dynamiczne tworzenie komponentów ...................................................165
              Biblioteki DLL w Windows. Dyrektywa external .................................169
              Pakiety ....................................................................................................173
              Instalacja i deinstalacja dodatkowych komponentów ............................175
              Tworzenie własnych komponentów .......................................................181
              Zakończenie                                                                                             191
Dodatek A     Bibliografia                                                                                            193
Dodatek B     Identyczność typów, zgodność




                                                                                                                                Spis treści
              i zgodność w sensie przypisania                                                                         195
Dodatek C     Słowa kluczowe i symbole specjalne                                                                      197
Dodatek D     Dyrektywy języka w Delphi 2005                                                                          199
Dodatek E     Spis rysunków                                                                                           201
Dodatek F     Spis tabel                                                                                              205
Dodatek G     Spis listingów                                                                                          207
              Skorowidz                                                                                               213




                                                                                                                          5
Nieobiektowe elementy języka Object Pascal




Rozdział 2. Nieobiektowe elementy języka Object Pascal




                                                         Stałe, identyfikatory
                                                         i wyrażenia
                                                         Język Delphi operuje pojęciami wyrażeń
                                                         i zmiennych w sposób podobny do innych
                                                         języków programowania. Pojęcie stałej
                                                         jest używane w znaczeniu matematycznym
                                                         (na przykład stała e — podstawa logarytmów
                                                         naturalnych odpowiadająca liczbie równej




                                                                                                            Stałe, identyfikatory i wyrażenia
                                                         w przybliżeniu 2,718281828). W programie stała
                                                         będzie po prostu wartością reprezentowaną przez
                                                         jakiś symbol (nazwę stałej). Ilekroć w programie
                                                         (w kodzie źródłowym) wystąpi nazwa stałej,
                                                         Delphi podstawi w tym miejscu odpowiednią
                                                         wartość. Nazwa stałej nazywana jest jej
                                                         identyfikatorem. Oczywiście musisz poinformować
                                                         Delphi, że pod daną nazwą będzie kryła się jakaś
                                                         wartość. Sam z siebie program nie będzie
                                                         wiedział, czy symbol „X” oznacza wartość pięć,
                                                         czy może osiem. Definicje stałych zapisujemy
                                                         również w części biernej programu, poprzedzając
                                                         je słowem const (ang. constant — stała).
                                                         Wyrażenie jest zbiorem wartości stałych,
                                                         zmiennych i łączących je operatorów (czyli
                                                         symboli oznaczających operacje, na przykład
                                                         operacje dodawania oznaczamy operatorem „+”).
                                                         W obrębie wyrażeń możesz również używać
                                                         nawiasów okrągłych. Na przykład wyrażeniem
                                                         jest 22+432+23–2098 albo 88+(23–23).
                                                         Do wyświetlania na ekranie wartości wyrażeń,
                                                         stałych i zmiennych służą w języku Pascal
                                                         (i w Delphi) wspomniane wcześniej procedury:
                                                         write, wyświetlająca wyrażenie podane jako
                                                         parametr, i writeln, która wyświetla wyrażenie
                                                         podane jako parametr i przesuwa kursor
                                                         do następnej linii.




                                                                                                      27
Rozdział 2.

                                    Wskazówki                                                     Listing 2.1. Program obliczający wartość
                                                                                                  wyrażenia 2+2 i wyświetlający wynik
                                    n Parametry procedur podajemy w Delphi
                                          w nawiasach okrągłych.
                                                                                                     {1}   program Project1;
                                    n Procedura writeln wyświetla obliczoną                          {2}   {$APPTYPE CONSOLE}
                                          uprzednio wartość podanego jako parametr                   {3}   begin
                                          wyrażenia.                                                 {4}     writeln(2+2);
                                                                                                     {5}     readln;
                                    Na listingu 2.1 przedstawiony został przykład                    {6}   end.
                                    programu wykorzystującego procedurę writeln.
                                                                                                  Listing 2.2. Przykład użycia stałej
                                    Na listingu 2.2 przedstawiono program,
                                    w którym użyto stałej o nazwie „dwa”,
                                    zdefiniowanej w sekcji definicji stałych                         {1} program Project1;
                                    (linijki 3 i 4). Jak widzisz, do poinformowania                  {2} {$APPTYPE CONSOLE}
                                    programu o wartości stałej użyto znaku                           {3} Const //tu zaczyna sie sekcja definicji stałych
                                                                                                     {4}   dwa=2; //definicja stalej o nazwie „dwa”
                                    równości. Efektem działania programu jest                               rownej 2
                                    wyświetlenie na ekranie liczby 5, która jest
Stałe, identyfikatory i wyrażenia




                                                                                                     {5} begin
                                    wynikiem obliczenia wartości wyrażenia będącego                  {6}   writeln(dwa+3);
                                    parametrem wywołania procedury writeln.                          {7} readln;
                                                                                                     {8} end.
                                    Wskazówka
                                    n Zwróć uwagę, że po słowie kluczowym
                                      const nie ma średnika. Podobnie średnika
                                          nie używamy po innych słowach kluczowych
                                          oznaczających początki sekcji.                          Rysunek 2.1. Diagram składniowy pojęcia
                                                                                                  „definicja stałej” (wersja uproszczona)
                                    Możemy w tym miejscu wyjaśnić pojęcie definicji
                                    stałej, posługując się poznanymi uprzednio
                                    diagramami składniowymi (rysunek 2.1).
                                    W definicji stałych możliwe jest dodatkowo
                                    użycie niektórych funkcji wbudowanych1,
                                    tak aby stała (lub zmienna inicjowana)
                                    przyjmowała wartość wyrażenia zbudowanego
                                    za ich pomocą, na przykład:                                   Wskazówka
                                        {1} const                                                  n Pamiętaj: jeśli chcielibyśmy, żeby nasz
                                        {2}   L:longint=trunc(9.3212);
                                                                                                      program wyświetlił na ekranie nie liczbę,
                                        {3}   M =trunc(9.3212);
                                                                                                      a napis (ciąg znaków), powinniśmy jako
                                    Można również użyć rzutowania typów (pojęcie                      parametru wywołania procedury writeln
                                    to zostanie wyjaśnione w kolejnym podrozdziale).                  użyć tego ciągu ujętego w apostrofy.




                                    1
                                        Funkcje: abs, chr, hi, high, length, lo, low, odd, ord, pred, round, sizeof, succ, swap oraz trunc.
                                        Pojęcie funkcji zostanie wyjaśnione w dalszej części książki.

                                    28
Nieobiektowe elementy języka Object Pascal


                                          Typy danych, zmienne,
                                          instrukcja przypisania,
                                          rzutowanie typów,
Rysunek 2.2. Diagram składniowy pojęcia   funkcje ord, pred i succ
„deklaracja zmiennych”
                                          Jak zapewne się domyślasz, oprócz stałych
                                          bardzo przydałyby się w programie struktury
                                          danych, których wartości zmieniałyby się
                                          w trakcie działania programu. Takimi strukturami
                                          są zmienne. Zmienna to struktura danych
                                          o określonej nazwie, służąca do przechowywania
                                          wartości określonego typu, która to wartość
                                          może zmieniać się w trakcie działania programu.
                                          Pojęcie to jest używane podobnie jak pojęcie
                                          zmiennej w matematyce. Jeśli mówimy np.
                                          o liczbie X, to przez ten symbol rozumiemy
                                          jakąś dowolną ustaloną liczbę, na której
                                          będziemy przeprowadzać rozmaite operacje.
                                          Deklaracje zmiennych zapisujemy w części
                                          biernej programu w sekcji deklaracji




                                                                                             Typy danych
                                          zmiennych, poprzedzając je słowem var
                                          (ang. variables — zmienne).
                                          Każda zmienna musi należeć do określonego
                                          typu, to znaczy decydując się na użycie
                                          w programie zmiennej, musimy zdecydować,
                                          czy będzie ona na przykład liczbą (i jakiego
                                          rodzaju), czy napisem. W przeciwnym razie
                                          wyniki działania naszego programu nie
                                          byłyby jednoznacznie określone. Na przykład
                                          z połączenia napisów (znaków pisma) „1” i „0”
                                          otrzymamy napis „10”, natomiast dodanie liczb
                                          1 i 0 da w wyniku oczywiście jeden. Dlatego też
                                          deklaracja zmiennej zawiera określenie typu,
                                          do którego zmienna należy, przy czym przez
                                          typ danych rozumie się zbiór możliwych
                                          wartości wraz z określonym identyfikatorem
                                          (rysunek 2.2).




                                                                                       29
Rozdział 2.

              W Delphi istnieje rozbudowana hierarchia              Listing 2.3. Wykorzystanie zmiennej
              typów, z których najważniejsze są typy proste
              (rzeczywiste i porządkowe), strukturalne                {1}  program Project2;
              (tablicowe, rekordowe, zbiorowe, plikowe                {2}  {$APPTYPE CONSOLE}
              i obiektowe), wskaźnikowe, wariantowe,                  {3}  var
              proceduralne oraz łańcuchowe. Najprostsze typy,         {4}    x:integer;
              z którymi będziesz się spotykać, to typ znakowy         {5}  begin
                                                                      {6}    x:=8;
              deklarowany słowem char (ang. character
                                                                      {7}    writeln('wartosc zmiennej i{s
              — znak pisma), oznaczający pojedynczy znak                     wynosi:');
              pisma (literę, cyfrę, znaki przestankowe itd.),         {8}    writeln(x);
              typ łańcuchowy string (ang. string — sznurek),          {9}    readln;
              używany do zapisu łańcucha znaków, typ                  {10} end.
              całkowitoliczbowy integer (ang. integer
              — całkowitoliczbowy), używany do zapisu
              liczb całkowitych (dodatnich i ujemnych)
              dających się zapisać w dwóch bajtach pamięci
              (wliczając bit znaku), oraz typ rzeczywisty
                                                                    Rysunek 2.3. Definicja instrukcji przypisania
              real (ang. real — rzeczywisty), używany do
              zapisu liczb posiadających część ułamkową.

              Wskazówka
Typy danych




              n Mówimy o sekcji definicji stałych (gdyż tam
                   definiujemy stałe — podajemy zarówno ich
                   identyfikatory, jak i wartości) i o sekcji
                   deklaracji zmiennych (tam bowiem
                   deklarujemy jedynie, że w programie
                   będziemy używać zmiennych o określonych
                   nazwach należących do określonych typów).
              Do nadania zmiennej określonej wartości służy
              instrukcja przypisania, zapisywana za pomocą
              symbolu dwukropka i znaku równości :=
              (na przykład zapis X:=8 czytamy: „niech
              zmienna X przyjmie wartość osiem”).
              W przykładzie przedstawionym na listingu 2.3
              widzimy zadeklarowaną (linia 4) zmienną
              całkowitoliczbową o nazwie x, której w części
              czynnej programu za pomocą instrukcji
              przypisania (linia 6) przypisujemy wartość
              osiem, a następnie wyświetlamy tę wartość
              na ekranie (linia 8).
              Formalna definicja pojęcia „instrukcja przypisania”
              przedstawiona jest na rysunku 2.3.




              30
Nieobiektowe elementy języka Object Pascal

Listing 2.4. Program obliczający objętość kuli        W kolejnym przykładzie (listing 2.4)
o promieniu 2                                         przedstawiono program obliczający objętość
                                                      kuli o promieniu 2.
  {1}    program Project1;                            W sekcji deklaracji zmiennych zadeklarowano
  {2}    {$APPTYPE CONSOLE}
                                                      dwie zmienne o nazwach promien i objetosc,
  {3}    {program oblicza objetosc kuli o promieniu
          rownym 2}                                   obie typu real (linia 5). W części czynnej
  {4}    var                                          programu (po słowie kluczowym begin)
  {5}       promien, objetosc:real; {dwie zmienne     zmiennej promien przypisano wartość 2,
             rzeczywiste}                             natomiast zmiennej objetosc wartość
  {6}    begin
                                                                 4
                                                      wyrażenia p × ( promien ) które wyraża wzór
                                                                                 3
  {7}       promien:=2; {przypisz zmiennej promien
             wartosc dwa}                                        3
  {8}       objetosc:=4*3.14*promien*                 na objętość kuli.
            åpromien*promien/3;
  {9}       writeln('Objetosc {uli o promieniu 2      Ø Do oznaczenia operacji mnożenia służy
            wynosi');                                    w Delphi znak gwiazdki *.
  {10}      writeln(objetosc);
  {11}      writeln('Nacisnij ENTER');                Ø Podnoszenie do sześcianu w przykładzie 2.4
  {12}      readln;                                      zrealizowano jako trzykrotne mnożenie
  {13}   end.                                            przez siebie zmiennej promien, w języku
                                                         Pascal nie ma bowiem operatora
                                                         potęgowania.




                                                                                                         Typy danych
                                                      Otrzymany na ekranie zapis wyniku:
                                                      3.34933333333333E+0001 oznacza liczbę
                                                      3,34933333333333 × 101 .
                                                      W języku Pascal separatorem części ułamkowej
                                                      jest kropka, natomiast zapis E+0001 znaczy
                                                      „razy dziesięć do potęgi pierwszej” (jest to tak
                                                      zwany zapis naukowy, litera E jest skrótem
                                                      angielskiego słowa exponent, czyli wykładnik).
                                                      Objętość kuli wynosi zatem około 33,493
                                                      (słownie: trzydzieści trzy i czterysta
                                                      dziewięćdziesiąt trzy tysięczne).




                                                                                                   31
Rozdział 2.

              Typy liczbowe (to jest typy całkowite oraz         Listing 2.5. Przykład błędnego doboru typu zmiennej
              rzeczywiste) różnią się od siebie między innymi
              rozmiarem pamięci przeznaczonej na zapisanie         {1}  program Project2;
              wartości danej zmiennej oraz sposobem jej            {2}  {$APPTYPE CONSOLE}
              reprezentacji. Jeżeli zadeklarujesz daną zmienną     {3}  var
              jako należącą na przykład do typu całkowitego        {4}    x:byte;
              byte, oznaczać to będzie, że na przechowywanie       {5}  begin
                                                                   {6}    x:=255;
              jej wartości w pamięci RAM komputera
                                                                   {7}    x:=x+1;
              zarezerwowano jeden bajt (osiem bitów), zatem        {8}    writeln('wartosc zmiennej i{s
              największą wartością, jaką zmienna będzie                   wynosi:');
              mogła przyjąć, jest 255 (dwójkowo 11111111),         {9}    writeln(X);
              a najmniejszą — zero. Próba przypisania tej          {10}   readln;
              zmiennej większej wartości może prowadzić            {11} end.
              do nieoczekiwanych rezultatów działania
              programu, ponieważ wystąpi tzw. błąd
              nadmiaru stałoprzecinkowego (ang. Static
              Point Overflow, SPO). Z tego też powodu
              w trakcie tworzenia programu istotny jest
              właściwy dobór typów dla każdej zmiennej.
              Efektem działania programu z listingu 2.5.
              będzie wyświetlenie liczby zero.
Typy danych




              Będzie się tak działo dlatego, że reprezentacją
              liczby typu byte jest po prostu wartość zapisana
              w kolejnych bitach jednego bajta. Dla liczby
              255 jest to osiem jedynek:
               1    1   1    1   1    1   1    1

              Po zwiększeniu tej wartości o jeden w pamięci
              zostanie zapisana liczba 256, czyli dwójkowo
              10000000, przy czym najbardziej znaczący bit
              będzie się już znajdował poza zakresem
              komórki, w której zapisana jest zmienna,
              i zostanie pominięty:
               1    0   0    0   0    0   0    0   0

              zatem program, wyświetlając jej wartość,
              uwzględni jedynie osiem zer i wyświetli
              wartość zero.




              32
Nieobiektowe elementy języka Object Pascal

                                              Nazwy poszczególnych typów liczbowych,
                                              rozmiary pamięci i zakresy, jakie mogą
                                              przyjmować należące do nich zmienne,
                                              przedstawiono w tabelach 2.1 i 2.2.
                                              Wskazówka
                                               n Pamiętaj, że wynikiem dzielenia dwóch liczb
                                                   całkowitych jest często liczba niecałkowita.
                                                   Operacja dzielenia dwóch liczb w Pascalu
                                                   zwraca zawsze wynik typu rzeczywistego
                                                   (nawet jeżeli dzielnik mieści się w dzielnej
                                                   całkowitą ilość razy, to jest jeżeli wynik ilorazu
                                                   jest całkowity), dlatego też jeżeli chcemy wynik
                                                   dzielenia przypisać jakiejś zmiennej, to musi
                                                   być to zmienna typu rzeczywistego.
                                              Przez typy porządkowe rozumie się grupę typów,
                                              w których określony jest pewien porządek, to jest
                                              pomiędzy elementami należącymi do tego typu
                                              można określić relacje: większości i następstwa.
                                              Istnienie relacji następstwa oznacza, że dla elementu
                                              takiego typu można podać jego następnika lub
                                              poprzednika. Na przykład jednobajtowa liczba




                                                                                                          Typy danych
                                              całkowita 2 jest większa od liczby całkowitej 0, jej
                                              poprzednikiem jest liczba 1, a następnikiem liczba 3.
Tabela 2.1. Typy rzeczywiste
                                                                     Liczba cyfr         Rozmiar
Nazwa typu         Minimum                  Maksimum
                                                                     znaczących          w bajtach
Real48             –2,9×1039                1,7×1038                 11 – 12             6
                          45
Single             –1,5×10                  3,4×1038                 7–8                 4
Double             –5,0×10324               1,7×10308                15 – 16             8
Extended           –3,6×104951              1,1×104932               19 – 20             10
Comp               –(263)+1                 (263)+1                  19 – 20             8
Currency           –922337203685477,5808    922337203685477,5807     19 – 20             8
Real               –5,0×10324               1,7×10308                15 – 16             8

Tabela 2.2. Typy całkowite
Nazwa typu                    Minimum              Maksimum                    Rozmiar w bajtach
Integer                       –2147483648          2147483647                  32 z bitem znaku
Cardinal                      0                    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)               263–1                       64 z bitem znaku
Byte                          0                    255                         8 bez bitu znaku
Word                          0                    65535                       16 bez bitu znaku
Longword                      0                    4294967295                  32 bez bitu znaku


                                                                                                     33
Rozdział 2.

              Aby przekonać się, jaki jest numer porządkowy       Listing 2.6. Użycie funkcji ord, pred i succ
              elementu w danym typie (listing 2.6),
              posługujemy się funkcją ord(element),                 {1} program Project1;
              poprzednika danego elementu zwraca funkcja            {2} {$APPTYPE CONSOLE}
              pred(element), a następnika — succ(element).          {3}
                                                                    {4} begin
              Typów określających liczby rzeczywiste nie            {5}   writeln(succ('A')); //jaka litera
              zaliczamy do typów porządkowych, ponieważ                    nastepuje po "A"
              — mimo że wśród liczb rzeczywistych można             {6}   writeln(pred('C')); //jaka litera
              zdefiniować relację większości — nie można                   poprzedza "C"
                                                                    {7}   writeln(ord(12)); //numer porzadkowy
              podać dokładnie określonego, jednego                         liczby 12 wsrod liczb typu byte
              bezpośredniego następnika ani poprzednika             {8}   readln;
              dowolnej liczby rzeczywistej.                         {9} end.

              Typami wyliczeniowymi nazywamy te typy
              liczbowe, które są jednocześnie typami
              porządkowymi.
              W typie znakowym (char) relacja większości
              określona jest w ten sposób, że kolejne znaki
              uporządkowane są według ich kodów ASCII,
              w szczególności cyfry (od zera do dziewięciu)
              poprzedzają wielkie litery (w kolejności
Typy danych




              alfabetycznej), a te z kolei małe litery
              (w kolejności alfabetycznej).
              Ostatnimi z typów wyliczeniowych są typy
              logiczne. Używane są do oznaczenia stanów
              logicznych: prawda (true) oraz fałsz (false).
              W standardowym Pascalu istnieje jeden typ
              logiczny deklarowany za pomocą słowa
              boolean, w Delphi istnieje kilka typów
              logicznych, które różnią się reprezentacją
              (liczbą i sposobem rozumienia bitów
              przeznaczonych do przechowywania w pamięci
              wartości typu logicznego). Są to typy Boolean,
              ByteBool, WordBool oraz LongBool. W klasycznym
              typie Boolean do zapamiętania wartości
              przeznaczony jest jeden bajt pamięci i obowiązuje
              relacja False<True, przy czym następnikiem
              False jest True, a True nie ma następnika.
              W pozostałych typach logicznych następnikiem
              True jest False, a następnikiem False jest True.
              Stosowanie typu boolean jest zalecane wszędzie
              tam, gdzie nie zachodzi konieczność zachowania
              zgodności z używanymi bibliotekami lub
              wymogi programu nie nakazują użycia innych
              typów logicznych.



              34
Nieobiektowe elementy języka Object Pascal

                                                    W standardzie języka Pascal każda zadeklarowana
                                                    zmienna ma nieustaloną wartość początkową,
                                                    dlatego też zanim zostanie do czegokolwiek
                                                    użyta, powinna mieć przypisaną jakąś wartość
                                                    (w przeciwnym razie działanie programu może
                                                    przynieść nieoczekiwane efekty). Często
                                                    w początkowej części programu programista
                                                    umieszcza polecenia zainicjowania zmiennych,
                                                    to jest przypisuje wszystkim zmiennym
                                                    występującym w programie jakąś wartość
                                                    początkową (na przykład zero dla zmiennych
                                                    liczbowych). Delphi standardowo powinno
                                                    inicjować zadeklarowane zmienne typów prostych:
                                                    u liczby — liczbą zero,
                                                    u znaki — znakiem o numerze porządkowym
                                                       zero,
                                                    u zmienne typów logicznych — wartością
                                                      False.
                                                    W praktyce jednak inicjowanie to nie zawsze
                                                    działa poprawnie, dlatego też bezpieczniej jest




                                                                                                       Typy danych
                                                    przeprowadzać je w programie samodzielnie.
                                                    Rysunek 2.4 przedstawia hierarchię typów
                                                    w Delphi.




Rysunek 2.4. Podstawowa hierarchia typów w Delphi




                                                                                                  35
Rozdział 2.

              Rzutowanie typów jest to wymuszenie                   Listing 2.7. Rzutowanie typów — interpretacja
              na programie interpretacji zawartości danej           liczby jako znaku
              komórki pamięci jako wartości należącej do
              określonego typu. Jeśli na przykład w komórce           {1}   program Project2;
              pamięci o długości jednego bajta zapisaliśmy            {2}   {$APPTYPE CONSOLE}
              liczbę 65, to jej zawartość będzie w rzeczywistości     {3}   begin
              zapisana w postaci liczby dwójkowej 01000001.           {4}     writeln(char(65));
              Ten sam zapis i ta sama liczba zinterpretowana          {5}     readln;
                                                                      {6}   end.
              jako wartość kodu ASCII odpowiada wielkiej
              literze A. Jeśli zatem wymusimy na programie          Listing 2.8. Rzutowanie liczby zero na wartość
              taką interpretację, to powinien on potraktować        typu Boolean
              tę wartość jako zakodowaną literę A (listing
              2.7). Rzutowanie typów można w Pascalu
              zrealizować poprzez wywołanie nazwy typu                {1}   program Project2;
                                                                      {2}   {$APPTYPE CONSOLE}
              z parametrem (podanym w nawiasach) będącym
                                                                      {3}   begin
              wartością lub zmienną, która ma być zamieniona          {4}     writeln(boolean(0));
              na zmienną innego typu.                                 {5}     readln;
                                                                      {6}   end.
              Możesz również rzutować np. liczbę zero
              na wartość typu logicznego boolean,
              co da w wyniku wartość False. Natomiast
              w przypadku liczby jeden będzie to wartość
Typy danych




              logiczna True (listing 2.8).

              Wskazówki
              n Decydując się na użycie rzutowania, musisz
                   dokładnie wiedzieć, w jaki sposób dana
                   wartość jest reprezentowana w pamięci,
                   w przeciwnym razie może dojść do
                   niespodziewanych efektów.
              n Jak wspomniano w poprzednim podrozdziale,
                   dopuszczalne jest użycie rzutowania typów
                   w obrębie sekcji definicji stałych,
                   na przykład prawidłowy będzie zapis
                   Const N=byte(false);.
              n Oprócz rzutowania typów możesz posłużyć
                   się licznymi dostępnymi w standardowych
                   modułach funkcjami konwersji typów,
                   które zazwyczaj są bezpieczniejsze.




              36
Nieobiektowe elementy języka Object Pascal

Listing 2.9. Przykład użycia zmiennej inicjowanej
                                                    Zmienne z wartością
  {1}    program Project2;
                                                    początkową
  {2}    {$APPTYPE CONSOLE}
  {3}    const
                                                    Jak pamiętasz, stałe nie wymagają deklarowania
  {4}      dziwna_stala:byte=3;                     typów, do których należą. Kompilator, dobierając
  {5}    begin                                      typ stałej, wybiera typy o możliwie najmniejszej
  {6}      writeln(dziwna_stala);                   liczebności. Programista może umieścić w definicji
  {7}      dziwna_stala:=15;                        stałej jawną deklarację typu (na przykład aby
  {8}      writeln(dziwna_stala);                   wymusić inną jej reprezentację). Na przykład:
  {9}      readln;
  {10}   end.                                         const liczba_pi:double=3.14;

                                                    Tak zdefiniowane stałe, zwane typed constants
                                                    — stałymi o jawnie zadeklarowanym typie,
                                                    w rzeczywistości zachowują się jak zmienne
                                                    (dlatego też nazywa się je czasem zmiennymi
                                                    inicjowanymi). Możliwe jest modyfikowanie




                                                                                                         Zmienne z wartością początkową
                                                    ich wartości wewnątrz części czynnej programu.
                                                    W kolejnym przykładzie (listing 2.9) w linii 4
                                                    w obrębie sekcji definicji stałych zdefiniowano
                                                    zmienną, której następnie w części czynnej
                                                    programu (linia 7) przypisano wartość inną
                                                    niż wartość początkowa.




                                                                                                   37
Rozdział 2.

                                                              Tabela 2.3. Operatory arytmetyczne
            Operatory                                         dwuargumentowe w Delphi
            Poznałeś już operatory: + (plus), oznaczający     Operator                  Operacja
            dodawanie, oraz * (razy), oznaczający mnożenie.   + (plus)                  Dodawanie
            Wszystkie operatory liczbowe przedstawia          - (minus)                 Odejmowanie
            tabela 2.3.
                                                              * (gwiazdka)              Mnożenie
            Operator div służy do dzielenia bez reszty.       / (ukośnik)               Dzielenie
            Wynikiem operacji jest wtedy liczba całkowita     div                       Dzielenie bez reszty
            (typu całkowitego). W takim przypadku zmienna,    mod                       Reszta z dzielenia
            w której chcemy zapisać wynik, może być
            zadeklarowana jako zmienna całkowita,
            jak pokazano w przykładzie (listing 2.10).        Listing 2.10. Użycie operatora div


                                                                 {1}      program Project1;
                                                                 {2}      {$APPTYPE CONSOLE}
                                                                 {3}
                                                                 {4}     uses
                                                                 {5}      SysUtils;
                                                                 {6}
                                                                 {7}     var
                                                                 {8}      a,b,c:byte;
                                                                 {9}      r:real;
                                                                 {10}    begin
Operatory




                                                                 {11}     a:=11;
                                                                 {12}     b:=5;
                                                                 {13}     c:=a div b;
                                                                 {14}     r:=a div b;
                                                                 {15}     writeln('zapisany w postaci liczby
                                                                          cal{owitej');
                                                                 {16}     writeln('wyni{ dzielenia cal{owitego
                                                                          11 div 5 wynosi ',c);
                                                                 {17}     writeln('a zapisany w postaci liczby
                                                                          rzeczywistej');
                                                                 {18}     writeln('wyni{ tego samego dzielenia
                                                                          wynosi ',r);
                                                                 {19}     writeln('Nacisnij ENTER');
                                                                 {20}     readln;
                                                                 {21}    end.




            38

More Related Content

What's hot

Asembler. Podręcznik programisty
Asembler. Podręcznik programistyAsembler. Podręcznik programisty
Asembler. Podręcznik programistyWydawnictwo Helion
 
Delphi 7. Ćwiczenia zaawansowane
Delphi 7. Ćwiczenia zaawansowaneDelphi 7. Ćwiczenia zaawansowane
Delphi 7. Ćwiczenia zaawansowaneWydawnictwo Helion
 
Znajdź błąd. Sztuka analizowania kodu
Znajdź błąd. Sztuka analizowania koduZnajdź błąd. Sztuka analizowania kodu
Znajdź błąd. Sztuka analizowania koduWydawnictwo Helion
 
mod_perl. Podręcznik programisty
mod_perl. Podręcznik programistymod_perl. Podręcznik programisty
mod_perl. Podręcznik programistyWydawnictwo Helion
 
Adobe Premiere Pro. Szybki start
Adobe Premiere Pro. Szybki startAdobe Premiere Pro. Szybki start
Adobe Premiere Pro. Szybki startWydawnictwo Helion
 
Praktyczny kurs Java. Wydanie II
Praktyczny kurs Java. Wydanie IIPraktyczny kurs Java. Wydanie II
Praktyczny kurs Java. Wydanie IIWydawnictwo Helion
 
Java. Współbieżność dla praktyków
Java. Współbieżność dla praktykówJava. Współbieżność dla praktyków
Java. Współbieżność dla praktykówWydawnictwo Helion
 
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie IICore Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie IIWydawnictwo Helion
 
Efektywne programowanie w języku Java
Efektywne programowanie w języku JavaEfektywne programowanie w języku Java
Efektywne programowanie w języku JavaWydawnictwo Helion
 
Delphi 2007 dla WIN32 i bazy danych
Delphi 2007 dla WIN32 i bazy danychDelphi 2007 dla WIN32 i bazy danych
Delphi 2007 dla WIN32 i bazy danychWydawnictwo Helion
 
Adobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznikAdobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznikWydawnictwo Helion
 
CorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczneCorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczneWydawnictwo Helion
 
Programuje W Delphi I C Builder
Programuje W Delphi I C BuilderProgramuje W Delphi I C Builder
Programuje W Delphi I C Builderfreeebook
 

What's hot (20)

Delphi 7 dla każdego
Delphi 7 dla każdegoDelphi 7 dla każdego
Delphi 7 dla każdego
 
Asembler. Podręcznik programisty
Asembler. Podręcznik programistyAsembler. Podręcznik programisty
Asembler. Podręcznik programisty
 
Delphi 7. Ćwiczenia zaawansowane
Delphi 7. Ćwiczenia zaawansowaneDelphi 7. Ćwiczenia zaawansowane
Delphi 7. Ćwiczenia zaawansowane
 
C# i ASP.NET. Szybki start
C# i ASP.NET. Szybki startC# i ASP.NET. Szybki start
C# i ASP.NET. Szybki start
 
Java 2. Podstawy
Java 2. PodstawyJava 2. Podstawy
Java 2. Podstawy
 
Znajdź błąd. Sztuka analizowania kodu
Znajdź błąd. Sztuka analizowania koduZnajdź błąd. Sztuka analizowania kodu
Znajdź błąd. Sztuka analizowania kodu
 
mod_perl. Podręcznik programisty
mod_perl. Podręcznik programistymod_perl. Podręcznik programisty
mod_perl. Podręcznik programisty
 
Adobe Premiere Pro. Szybki start
Adobe Premiere Pro. Szybki startAdobe Premiere Pro. Szybki start
Adobe Premiere Pro. Szybki start
 
Praktyczny kurs Java. Wydanie II
Praktyczny kurs Java. Wydanie IIPraktyczny kurs Java. Wydanie II
Praktyczny kurs Java. Wydanie II
 
Java. Potrzaski
Java. PotrzaskiJava. Potrzaski
Java. Potrzaski
 
Java. Współbieżność dla praktyków
Java. Współbieżność dla praktykówJava. Współbieżność dla praktyków
Java. Współbieżność dla praktyków
 
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie IICore Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
 
ABC Delphi 2006
ABC Delphi 2006ABC Delphi 2006
ABC Delphi 2006
 
Efektywne programowanie w języku Java
Efektywne programowanie w języku JavaEfektywne programowanie w języku Java
Efektywne programowanie w języku Java
 
Praktyczny kurs asemblera
Praktyczny kurs asembleraPraktyczny kurs asemblera
Praktyczny kurs asemblera
 
Delphi 2007 dla WIN32 i bazy danych
Delphi 2007 dla WIN32 i bazy danychDelphi 2007 dla WIN32 i bazy danych
Delphi 2007 dla WIN32 i bazy danych
 
Uczta programistów
Uczta programistówUczta programistów
Uczta programistów
 
Adobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznikAdobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznik
 
CorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczneCorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczne
 
Programuje W Delphi I C Builder
Programuje W Delphi I C BuilderProgramuje W Delphi I C Builder
Programuje W Delphi I C Builder
 

Viewers also liked

Real World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polskaReal World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polskaWydawnictwo Helion
 
Visual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyVisual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyWydawnictwo Helion
 
Real World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polskaReal World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polskaWydawnictwo Helion
 
Spring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w JavieSpring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w JavieWydawnictwo Helion
 
Windows Movie Maker 2. Od zera do bohatera
Windows Movie Maker 2. Od zera do bohateraWindows Movie Maker 2. Od zera do bohatera
Windows Movie Maker 2. Od zera do bohateraWydawnictwo Helion
 
Pajączek 5 NxG. Oficjalny podręcznik
Pajączek 5 NxG. Oficjalny podręcznikPajączek 5 NxG. Oficjalny podręcznik
Pajączek 5 NxG. Oficjalny podręcznikWydawnictwo Helion
 
Marketing internetowy w wyszukiwarkach
Marketing internetowy w wyszukiwarkachMarketing internetowy w wyszukiwarkach
Marketing internetowy w wyszukiwarkachWydawnictwo Helion
 

Viewers also liked (10)

Real World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polskaReal World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polska
 
Visual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyVisual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programisty
 
Real World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polskaReal World Adobe Photoshop CS2. Edycja polska
Real World Adobe Photoshop CS2. Edycja polska
 
Jak to się robi w Linuksie
Jak to się robi w LinuksieJak to się robi w Linuksie
Jak to się robi w Linuksie
 
Spring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w JavieSpring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w Javie
 
Modelowanie danych
Modelowanie danychModelowanie danych
Modelowanie danych
 
Windows Movie Maker 2. Od zera do bohatera
Windows Movie Maker 2. Od zera do bohateraWindows Movie Maker 2. Od zera do bohatera
Windows Movie Maker 2. Od zera do bohatera
 
Pajączek 5 NxG. Oficjalny podręcznik
Pajączek 5 NxG. Oficjalny podręcznikPajączek 5 NxG. Oficjalny podręcznik
Pajączek 5 NxG. Oficjalny podręcznik
 
ABC sam naprawiam komputer
ABC sam naprawiam komputerABC sam naprawiam komputer
ABC sam naprawiam komputer
 
Marketing internetowy w wyszukiwarkach
Marketing internetowy w wyszukiwarkachMarketing internetowy w wyszukiwarkach
Marketing internetowy w wyszukiwarkach
 

Similar to Delphi. Szybki start

Aplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIAplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIWydawnictwo Helion
 
Delphi 2005. Ćwiczenia praktyczne
Delphi 2005. Ćwiczenia praktyczneDelphi 2005. Ćwiczenia praktyczne
Delphi 2005. Ćwiczenia praktyczneWydawnictwo Helion
 
Delphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązaniaDelphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązaniaWydawnictwo Helion
 
Po prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowanePo prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowaneWydawnictwo Helion
 
Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówWydawnictwo Helion
 
Java. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i Eclipse
Java. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i EclipseJava. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i Eclipse
Java. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i EclipseWydawnictwo Helion
 
.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemnice.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemniceWydawnictwo Helion
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanieWydawnictwo Helion
 
Kylix. Vademecum profesjonalisty
Kylix. Vademecum profesjonalistyKylix. Vademecum profesjonalisty
Kylix. Vademecum profesjonalistyWydawnictwo Helion
 
Delphi 7. Kompendium programisty
Delphi 7. Kompendium programistyDelphi 7. Kompendium programisty
Delphi 7. Kompendium programistyWydawnictwo Helion
 
.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanieWydawnictwo Helion
 

Similar to Delphi. Szybki start (18)

Delphi 2005
Delphi 2005Delphi 2005
Delphi 2005
 
Aplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIAplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie II
 
Delphi 2005. Ćwiczenia praktyczne
Delphi 2005. Ćwiczenia praktyczneDelphi 2005. Ćwiczenia praktyczne
Delphi 2005. Ćwiczenia praktyczne
 
Delphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązaniaDelphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązania
 
Java. Rozmówki
Java. RozmówkiJava. Rozmówki
Java. Rozmówki
 
Po prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowanePo prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowane
 
Prolog. Programowanie
Prolog. ProgramowanieProlog. Programowanie
Prolog. Programowanie
 
Praktyczny kurs Java
Praktyczny kurs JavaPraktyczny kurs Java
Praktyczny kurs Java
 
JavaScript. Projekty
JavaScript. ProjektyJavaScript. Projekty
JavaScript. Projekty
 
Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistów
 
Java. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i Eclipse
Java. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i EclipseJava. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i Eclipse
Java. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i Eclipse
 
.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemnice.Net. Najpilniej strzeżone tajemnice
.Net. Najpilniej strzeżone tajemnice
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanie
 
Kylix. Vademecum profesjonalisty
Kylix. Vademecum profesjonalistyKylix. Vademecum profesjonalisty
Kylix. Vademecum profesjonalisty
 
Perl. Ćwiczenia
Perl. ĆwiczeniaPerl. Ćwiczenia
Perl. Ćwiczenia
 
eXtreme programming
eXtreme programmingeXtreme programming
eXtreme programming
 
Delphi 7. Kompendium programisty
Delphi 7. Kompendium programistyDelphi 7. Kompendium programisty
Delphi 7. Kompendium programisty
 
.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie
 

More from Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 

More from Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

Delphi. Szybki start

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TREŒCI Delphi. Szybki start Autor: Maciej Szmit KATALOG KSI¥¯EK ISBN: 83-246-0226-7 Format: B5, stron: 224 KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK Jêzyk Pascal, kojarz¹cy siê g³ównie z nauk¹ programowania, sta³ siê podstaw¹ jednego z najpopularniejszych obecnie œrodowisk programistycznych — Delphi firmy Borland. DODAJ DO KOSZYKA To graficzne œrodowisko, pozwalaj¹ce na szybkie tworzenie aplikacji dziêki mo¿liwoœci sk³adania ich z „klocków” zwanych komponentami, b³yskawicznie zyska³o uznanie programistów na ca³ym œwiecie. Kolejne wersje Delphi oferowa³y coraz wiêksze CENNIK I INFORMACJE mo¿liwoœci. Jego najnowsza wersja pozwala na tworzenie programów dla platformy .NET i korzystanie nie tylko z jêzyka Pascal, ale równie¿ z coraz popularniejszego C#. ZAMÓW INFORMACJE Ksi¹¿ka „Delphi. Szybki start” to doskona³y przewodnik po Delphi dla pocz¹tkuj¹cych O NOWOŒCIACH u¿ytkowników. Dziêki niemu poznasz jêzyk Object Pascal i zasady programowania obiektowego. Nauczysz siê wykorzystywaæ komponenty do tworzenia aplikacji ZAMÓW CENNIK i od zera napiszesz w³asne programy. Dowiesz siê, czym siê ró¿ni Delphi 7 od Delphi 2005, i wykorzystasz mo¿liwoœci obu tych œrodowisk. • Interfejs u¿ytkownika œrodowiska Delphi CZYTELNIA • Elementy jêzyka Object Pascal • Programowanie obiektowe FRAGMENTY KSI¥¯EK ONLINE • Obs³uga wyj¹tków • Tworzenie okien dialogowych • Projektowanie interfejsów u¿ytkownika • Korzystanie z komponentów Poznaj mo¿liwoœci œrodowiska Delphi Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
  • 2. Spis treści Wprowadzenie 7 Rozdział 1. Zaczynamy 13 Interfejs użytkownika ...............................................................................13 Pierwszy program w Delphi .....................................................................17 Aplikacje konsolowe ................................................................................18 Diagramy składniowe ...............................................................................25 Rozdział 2. Nieobiektowe elementy języka Object Pascal 27 Stałe, identyfikatory i wyrażenia ..............................................................27 Typy danych, zmienne, instrukcja przypisania, Spis treści rzutowanie typów, funkcje ord, pred i succ ...........................................29 Zmienne z wartością początkową .............................................................37 Operatory ..................................................................................................38 Operacje wejścia-wyjścia, procedury write/writeln i read/readln ............42 Typy łańcuchowe i operator konkatenacji ................................................43 Instrukcja pusta i instrukcja złożona ........................................................44 Instrukcja warunkowa ..............................................................................45 Instrukcja wyboru .....................................................................................49 Definiowanie własnych typów, typy wyliczeniowe i okrojone, zgodność typów, 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 końcu ............................................59 Instrukcja iteracyjna z warunkiem na początku .......................................60 Typ rekordowy (bez wariantów), nazwy kwalifikowane i instrukcja wiążąca ...........................................62 Rekordy z wariantami ..............................................................................66 3
  • 3. Spis treści Podprogramy — pojęcia podstawowe: funkcje, procedury, zmienne lokalne, parametry formalne i aktualne, dyrektywy języka, parametry o domyślnej wartości, procedury inc i dec ...........................69 Podprogramy — efekty uboczne ..............................................................76 Podprogramy — rekurencja .....................................................................77 Podprogramy — przeciążanie ..................................................................78 Podprogramy — konwencje wywołania i dyrektywa forward .................79 Śledzenie działania programu ..................................................................81 Typ zbiorowy, operator in ........................................................................83 Typy wskaźnikowe i zmienne dynamiczne ..............................................85 Dynamiczny typ tablicowy .......................................................................91 Tablice otwarte i wariantowe tablice otwarte ...........................................92 Moduły i przestrzenie nazw .....................................................................95 Typ plikowy .............................................................................................98 Typ proceduralny ...................................................................................103 Etykiety i instrukcja skoku .....................................................................104 Procedury kierujące działaniem programu: Spis treści exit, halt, runerror, sleep, abort ............................................................105 Operator @ i funkcja addr ......................................................................106 Rozdział 3. Wprowadzenie do technik obiektowych. Wybrane obiektowe elementy języka 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ą komunikatów ....................125 Operatory is i as ......................................................................................126 Interfejsy (typ interface) .........................................................................129 Podstawy obsługi sytuacji wyjątkowych ................................................132 Programowanie z użyciem wątków ........................................................139 Przeciążanie operatorów w Delphi 2005 dla .NET ................................143 4
  • 4. Spis treści Rozdział 4. Programowanie wizualno-obiektowe 145 Pierwsza aplikacja okienkowa ................................................................145 Implementacja prostych operacji wejścia i wyjścia w programie okienkowym. Komponent TEdit, typ Pchar, modalne i niemodalne okna dialogowe ...............................................154 Tworzenie dodatkowych okien w programie .........................................161 Przetwarzanie komunikatów Windows. Metoda ProcessMessages obiektu Application ....................................163 Dynamiczne tworzenie komponentów ...................................................165 Biblioteki DLL w Windows. Dyrektywa external .................................169 Pakiety ....................................................................................................173 Instalacja i deinstalacja dodatkowych komponentów ............................175 Tworzenie własnych komponentów .......................................................181 Zakończenie 191 Dodatek A Bibliografia 193 Dodatek B Identyczność typów, zgodność Spis treści i zgodność w sensie przypisania 195 Dodatek C Słowa kluczowe i symbole specjalne 197 Dodatek D Dyrektywy języka w Delphi 2005 199 Dodatek E Spis rysunków 201 Dodatek F Spis tabel 205 Dodatek G Spis listingów 207 Skorowidz 213 5
  • 5. Nieobiektowe elementy języka Object Pascal Rozdział 2. Nieobiektowe elementy języka Object Pascal Stałe, identyfikatory i wyrażenia Język Delphi operuje pojęciami wyrażeń i zmiennych w sposób podobny do innych języków programowania. Pojęcie stałej jest używane w znaczeniu matematycznym (na przykład stała e — podstawa logarytmów naturalnych odpowiadająca liczbie równej Stałe, identyfikatory i wyrażenia w przybliżeniu 2,718281828). W programie stała będzie po prostu wartością reprezentowaną przez jakiś symbol (nazwę stałej). Ilekroć w programie (w kodzie źródłowym) wystąpi nazwa stałej, Delphi podstawi w tym miejscu odpowiednią wartość. Nazwa stałej nazywana jest jej identyfikatorem. Oczywiście musisz poinformować Delphi, że pod daną nazwą będzie kryła się jakaś wartość. Sam z siebie program nie będzie wiedział, czy symbol „X” oznacza wartość pięć, czy może osiem. Definicje stałych zapisujemy również w części biernej programu, poprzedzając je słowem const (ang. constant — stała). Wyrażenie jest zbiorem wartości stałych, zmiennych i łączących je operatorów (czyli symboli oznaczających operacje, na przykład operacje dodawania oznaczamy operatorem „+”). W obrębie wyrażeń możesz również używać nawiasów okrągłych. Na przykład wyrażeniem jest 22+432+23–2098 albo 88+(23–23). Do wyświetlania na ekranie wartości wyrażeń, stałych i zmiennych służą w języku Pascal (i w Delphi) wspomniane wcześniej procedury: write, wyświetlająca wyrażenie podane jako parametr, i writeln, która wyświetla wyrażenie podane jako parametr i przesuwa kursor do następnej linii. 27
  • 6. Rozdział 2. Wskazówki Listing 2.1. Program obliczający wartość wyrażenia 2+2 i wyświetlający wynik n Parametry procedur podajemy w Delphi w nawiasach okrągłych. {1} program Project1; n Procedura writeln wyświetla obliczoną {2} {$APPTYPE CONSOLE} uprzednio wartość podanego jako parametr {3} begin wyrażenia. {4} writeln(2+2); {5} readln; Na listingu 2.1 przedstawiony został przykład {6} end. programu wykorzystującego procedurę writeln. Listing 2.2. Przykład użycia stałej Na listingu 2.2 przedstawiono program, w którym użyto stałej o nazwie „dwa”, zdefiniowanej w sekcji definicji stałych {1} program Project1; (linijki 3 i 4). Jak widzisz, do poinformowania {2} {$APPTYPE CONSOLE} programu o wartości stałej użyto znaku {3} Const //tu zaczyna sie sekcja definicji stałych {4} dwa=2; //definicja stalej o nazwie „dwa” równości. Efektem działania programu jest rownej 2 wyświetlenie na ekranie liczby 5, która jest Stałe, identyfikatory i wyrażenia {5} begin wynikiem obliczenia wartości wyrażenia będącego {6} writeln(dwa+3); parametrem wywołania procedury writeln. {7} readln; {8} end. Wskazówka n Zwróć uwagę, że po słowie kluczowym const nie ma średnika. Podobnie średnika nie używamy po innych słowach kluczowych oznaczających początki sekcji. Rysunek 2.1. Diagram składniowy pojęcia „definicja stałej” (wersja uproszczona) Możemy w tym miejscu wyjaśnić pojęcie definicji stałej, posługując się poznanymi uprzednio diagramami składniowymi (rysunek 2.1). W definicji stałych możliwe jest dodatkowo użycie niektórych funkcji wbudowanych1, tak aby stała (lub zmienna inicjowana) przyjmowała wartość wyrażenia zbudowanego za ich pomocą, na przykład: Wskazówka {1} const n Pamiętaj: jeśli chcielibyśmy, żeby nasz {2} L:longint=trunc(9.3212); program wyświetlił na ekranie nie liczbę, {3} M =trunc(9.3212); a napis (ciąg znaków), powinniśmy jako Można również użyć rzutowania typów (pojęcie parametru wywołania procedury writeln to zostanie wyjaśnione w kolejnym podrozdziale). użyć tego ciągu ujętego w apostrofy. 1 Funkcje: abs, chr, hi, high, length, lo, low, odd, ord, pred, round, sizeof, succ, swap oraz trunc. Pojęcie funkcji zostanie wyjaśnione w dalszej części książki. 28
  • 7. Nieobiektowe elementy języka Object Pascal Typy danych, zmienne, instrukcja przypisania, rzutowanie typów, Rysunek 2.2. Diagram składniowy pojęcia funkcje ord, pred i succ „deklaracja zmiennych” Jak zapewne się domyślasz, oprócz stałych bardzo przydałyby się w programie struktury danych, których wartości zmieniałyby się w trakcie działania programu. Takimi strukturami są zmienne. Zmienna to struktura danych o określonej nazwie, służąca do przechowywania wartości określonego typu, która to wartość może zmieniać się w trakcie działania programu. Pojęcie to jest używane podobnie jak pojęcie zmiennej w matematyce. Jeśli mówimy np. o liczbie X, to przez ten symbol rozumiemy jakąś dowolną ustaloną liczbę, na której będziemy przeprowadzać rozmaite operacje. Deklaracje zmiennych zapisujemy w części biernej programu w sekcji deklaracji Typy danych zmiennych, poprzedzając je słowem var (ang. variables — zmienne). Każda zmienna musi należeć do określonego typu, to znaczy decydując się na użycie w programie zmiennej, musimy zdecydować, czy będzie ona na przykład liczbą (i jakiego rodzaju), czy napisem. W przeciwnym razie wyniki działania naszego programu nie byłyby jednoznacznie określone. Na przykład z połączenia napisów (znaków pisma) „1” i „0” otrzymamy napis „10”, natomiast dodanie liczb 1 i 0 da w wyniku oczywiście jeden. Dlatego też deklaracja zmiennej zawiera określenie typu, do którego zmienna należy, przy czym przez typ danych rozumie się zbiór możliwych wartości wraz z określonym identyfikatorem (rysunek 2.2). 29
  • 8. Rozdział 2. W Delphi istnieje rozbudowana hierarchia Listing 2.3. Wykorzystanie zmiennej typów, z których najważniejsze są typy proste (rzeczywiste i porządkowe), strukturalne {1} program Project2; (tablicowe, rekordowe, zbiorowe, plikowe {2} {$APPTYPE CONSOLE} i obiektowe), wskaźnikowe, wariantowe, {3} var proceduralne oraz łańcuchowe. Najprostsze typy, {4} x:integer; z którymi będziesz się spotykać, to typ znakowy {5} begin {6} x:=8; deklarowany słowem char (ang. character {7} writeln('wartosc zmiennej i{s — znak pisma), oznaczający pojedynczy znak wynosi:'); pisma (literę, cyfrę, znaki przestankowe itd.), {8} writeln(x); typ łańcuchowy string (ang. string — sznurek), {9} readln; używany do zapisu łańcucha znaków, typ {10} end. całkowitoliczbowy integer (ang. integer — całkowitoliczbowy), używany do zapisu liczb całkowitych (dodatnich i ujemnych) dających się zapisać w dwóch bajtach pamięci (wliczając bit znaku), oraz typ rzeczywisty Rysunek 2.3. Definicja instrukcji przypisania real (ang. real — rzeczywisty), używany do zapisu liczb posiadających część ułamkową. Wskazówka Typy danych n Mówimy o sekcji definicji stałych (gdyż tam definiujemy stałe — podajemy zarówno ich identyfikatory, jak i wartości) i o sekcji deklaracji zmiennych (tam bowiem deklarujemy jedynie, że w programie będziemy używać zmiennych o określonych nazwach należących do określonych typów). Do nadania zmiennej określonej wartości służy instrukcja przypisania, zapisywana za pomocą symbolu dwukropka i znaku równości := (na przykład zapis X:=8 czytamy: „niech zmienna X przyjmie wartość osiem”). W przykładzie przedstawionym na listingu 2.3 widzimy zadeklarowaną (linia 4) zmienną całkowitoliczbową o nazwie x, której w części czynnej programu za pomocą instrukcji przypisania (linia 6) przypisujemy wartość osiem, a następnie wyświetlamy tę wartość na ekranie (linia 8). Formalna definicja pojęcia „instrukcja przypisania” przedstawiona jest na rysunku 2.3. 30
  • 9. Nieobiektowe elementy języka Object Pascal Listing 2.4. Program obliczający objętość kuli W kolejnym przykładzie (listing 2.4) o promieniu 2 przedstawiono program obliczający objętość kuli o promieniu 2. {1} program Project1; W sekcji deklaracji zmiennych zadeklarowano {2} {$APPTYPE CONSOLE} dwie zmienne o nazwach promien i objetosc, {3} {program oblicza objetosc kuli o promieniu rownym 2} obie typu real (linia 5). W części czynnej {4} var programu (po słowie kluczowym begin) {5} promien, objetosc:real; {dwie zmienne zmiennej promien przypisano wartość 2, rzeczywiste} natomiast zmiennej objetosc wartość {6} begin 4 wyrażenia p × ( promien ) które wyraża wzór 3 {7} promien:=2; {przypisz zmiennej promien wartosc dwa} 3 {8} objetosc:=4*3.14*promien* na objętość kuli. åpromien*promien/3; {9} writeln('Objetosc {uli o promieniu 2 Ø Do oznaczenia operacji mnożenia służy wynosi'); w Delphi znak gwiazdki *. {10} writeln(objetosc); {11} writeln('Nacisnij ENTER'); Ø Podnoszenie do sześcianu w przykładzie 2.4 {12} readln; zrealizowano jako trzykrotne mnożenie {13} end. przez siebie zmiennej promien, w języku Pascal nie ma bowiem operatora potęgowania. Typy danych Otrzymany na ekranie zapis wyniku: 3.34933333333333E+0001 oznacza liczbę 3,34933333333333 × 101 . W języku Pascal separatorem części ułamkowej jest kropka, natomiast zapis E+0001 znaczy „razy dziesięć do potęgi pierwszej” (jest to tak zwany zapis naukowy, litera E jest skrótem angielskiego słowa exponent, czyli wykładnik). Objętość kuli wynosi zatem około 33,493 (słownie: trzydzieści trzy i czterysta dziewięćdziesiąt trzy tysięczne). 31
  • 10. Rozdział 2. Typy liczbowe (to jest typy całkowite oraz Listing 2.5. Przykład błędnego doboru typu zmiennej rzeczywiste) różnią się od siebie między innymi rozmiarem pamięci przeznaczonej na zapisanie {1} program Project2; wartości danej zmiennej oraz sposobem jej {2} {$APPTYPE CONSOLE} reprezentacji. Jeżeli zadeklarujesz daną zmienną {3} var jako należącą na przykład do typu całkowitego {4} x:byte; byte, oznaczać to będzie, że na przechowywanie {5} begin {6} x:=255; jej wartości w pamięci RAM komputera {7} x:=x+1; zarezerwowano jeden bajt (osiem bitów), zatem {8} writeln('wartosc zmiennej i{s największą wartością, jaką zmienna będzie wynosi:'); mogła przyjąć, jest 255 (dwójkowo 11111111), {9} writeln(X); a najmniejszą — zero. Próba przypisania tej {10} readln; zmiennej większej wartości może prowadzić {11} end. do nieoczekiwanych rezultatów działania programu, ponieważ wystąpi tzw. błąd nadmiaru stałoprzecinkowego (ang. Static Point Overflow, SPO). Z tego też powodu w trakcie tworzenia programu istotny jest właściwy dobór typów dla każdej zmiennej. Efektem działania programu z listingu 2.5. będzie wyświetlenie liczby zero. Typy danych Będzie się tak działo dlatego, że reprezentacją liczby typu byte jest po prostu wartość zapisana w kolejnych bitach jednego bajta. Dla liczby 255 jest to osiem jedynek: 1 1 1 1 1 1 1 1 Po zwiększeniu tej wartości o jeden w pamięci zostanie zapisana liczba 256, czyli dwójkowo 10000000, przy czym najbardziej znaczący bit będzie się już znajdował poza zakresem komórki, w której zapisana jest zmienna, i zostanie pominięty: 1 0 0 0 0 0 0 0 0 zatem program, wyświetlając jej wartość, uwzględni jedynie osiem zer i wyświetli wartość zero. 32
  • 11. Nieobiektowe elementy języka Object Pascal Nazwy poszczególnych typów liczbowych, rozmiary pamięci i zakresy, jakie mogą przyjmować należące do nich zmienne, przedstawiono w tabelach 2.1 i 2.2. Wskazówka n Pamiętaj, że wynikiem dzielenia dwóch liczb całkowitych jest często liczba niecałkowita. Operacja dzielenia dwóch liczb w Pascalu zwraca zawsze wynik typu rzeczywistego (nawet jeżeli dzielnik mieści się w dzielnej całkowitą ilość razy, to jest jeżeli wynik ilorazu jest całkowity), dlatego też jeżeli chcemy wynik dzielenia przypisać jakiejś zmiennej, to musi być to zmienna typu rzeczywistego. Przez typy porządkowe rozumie się grupę typów, w których określony jest pewien porządek, to jest pomiędzy elementami należącymi do tego typu można określić relacje: większości i następstwa. Istnienie relacji następstwa oznacza, że dla elementu takiego typu można podać jego następnika lub poprzednika. Na przykład jednobajtowa liczba Typy danych całkowita 2 jest większa od liczby całkowitej 0, jej poprzednikiem jest liczba 1, a następnikiem liczba 3. Tabela 2.1. Typy rzeczywiste Liczba cyfr Rozmiar Nazwa typu Minimum Maksimum znaczących w bajtach Real48 –2,9×1039 1,7×1038 11 – 12 6 45 Single –1,5×10 3,4×1038 7–8 4 Double –5,0×10324 1,7×10308 15 – 16 8 Extended –3,6×104951 1,1×104932 19 – 20 10 Comp –(263)+1 (263)+1 19 – 20 8 Currency –922337203685477,5808 922337203685477,5807 19 – 20 8 Real –5,0×10324 1,7×10308 15 – 16 8 Tabela 2.2. Typy całkowite Nazwa typu Minimum Maksimum Rozmiar w bajtach Integer –2147483648 2147483647 32 z bitem znaku Cardinal 0 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) 263–1 64 z bitem znaku Byte 0 255 8 bez bitu znaku Word 0 65535 16 bez bitu znaku Longword 0 4294967295 32 bez bitu znaku 33
  • 12. Rozdział 2. Aby przekonać się, jaki jest numer porządkowy Listing 2.6. Użycie funkcji ord, pred i succ elementu w danym typie (listing 2.6), posługujemy się funkcją ord(element), {1} program Project1; poprzednika danego elementu zwraca funkcja {2} {$APPTYPE CONSOLE} pred(element), a następnika — succ(element). {3} {4} begin Typów określających liczby rzeczywiste nie {5} writeln(succ('A')); //jaka litera zaliczamy do typów porządkowych, ponieważ nastepuje po "A" — mimo że wśród liczb rzeczywistych można {6} writeln(pred('C')); //jaka litera zdefiniować relację większości — nie można poprzedza "C" {7} writeln(ord(12)); //numer porzadkowy podać dokładnie określonego, jednego liczby 12 wsrod liczb typu byte bezpośredniego następnika ani poprzednika {8} readln; dowolnej liczby rzeczywistej. {9} end. Typami wyliczeniowymi nazywamy te typy liczbowe, które są jednocześnie typami porządkowymi. W typie znakowym (char) relacja większości określona jest w ten sposób, że kolejne znaki uporządkowane są według ich kodów ASCII, w szczególności cyfry (od zera do dziewięciu) poprzedzają wielkie litery (w kolejności Typy danych alfabetycznej), a te z kolei małe litery (w kolejności alfabetycznej). Ostatnimi z typów wyliczeniowych są typy logiczne. Używane są do oznaczenia stanów logicznych: prawda (true) oraz fałsz (false). W standardowym Pascalu istnieje jeden typ logiczny deklarowany za pomocą słowa boolean, w Delphi istnieje kilka typów logicznych, które różnią się reprezentacją (liczbą i sposobem rozumienia bitów przeznaczonych do przechowywania w pamięci wartości typu logicznego). Są to typy Boolean, ByteBool, WordBool oraz LongBool. W klasycznym typie Boolean do zapamiętania wartości przeznaczony jest jeden bajt pamięci i obowiązuje relacja False<True, przy czym następnikiem False jest True, a True nie ma następnika. W pozostałych typach logicznych następnikiem True jest False, a następnikiem False jest True. Stosowanie typu boolean jest zalecane wszędzie tam, gdzie nie zachodzi konieczność zachowania zgodności z używanymi bibliotekami lub wymogi programu nie nakazują użycia innych typów logicznych. 34
  • 13. Nieobiektowe elementy języka Object Pascal W standardzie języka Pascal każda zadeklarowana zmienna ma nieustaloną wartość początkową, dlatego też zanim zostanie do czegokolwiek użyta, powinna mieć przypisaną jakąś wartość (w przeciwnym razie działanie programu może przynieść nieoczekiwane efekty). Często w początkowej części programu programista umieszcza polecenia zainicjowania zmiennych, to jest przypisuje wszystkim zmiennym występującym w programie jakąś wartość początkową (na przykład zero dla zmiennych liczbowych). Delphi standardowo powinno inicjować zadeklarowane zmienne typów prostych: u liczby — liczbą zero, u znaki — znakiem o numerze porządkowym zero, u zmienne typów logicznych — wartością False. W praktyce jednak inicjowanie to nie zawsze działa poprawnie, dlatego też bezpieczniej jest Typy danych przeprowadzać je w programie samodzielnie. Rysunek 2.4 przedstawia hierarchię typów w Delphi. Rysunek 2.4. Podstawowa hierarchia typów w Delphi 35
  • 14. Rozdział 2. Rzutowanie typów jest to wymuszenie Listing 2.7. Rzutowanie typów — interpretacja na programie interpretacji zawartości danej liczby jako znaku komórki pamięci jako wartości należącej do określonego typu. Jeśli na przykład w komórce {1} program Project2; pamięci o długości jednego bajta zapisaliśmy {2} {$APPTYPE CONSOLE} liczbę 65, to jej zawartość będzie w rzeczywistości {3} begin zapisana w postaci liczby dwójkowej 01000001. {4} writeln(char(65)); Ten sam zapis i ta sama liczba zinterpretowana {5} readln; {6} end. jako wartość kodu ASCII odpowiada wielkiej literze A. Jeśli zatem wymusimy na programie Listing 2.8. Rzutowanie liczby zero na wartość taką interpretację, to powinien on potraktować typu Boolean tę wartość jako zakodowaną literę A (listing 2.7). Rzutowanie typów można w Pascalu zrealizować poprzez wywołanie nazwy typu {1} program Project2; {2} {$APPTYPE CONSOLE} z parametrem (podanym w nawiasach) będącym {3} begin wartością lub zmienną, która ma być zamieniona {4} writeln(boolean(0)); na zmienną innego typu. {5} readln; {6} end. Możesz również rzutować np. liczbę zero na wartość typu logicznego boolean, co da w wyniku wartość False. Natomiast w przypadku liczby jeden będzie to wartość Typy danych logiczna True (listing 2.8). Wskazówki n Decydując się na użycie rzutowania, musisz dokładnie wiedzieć, w jaki sposób dana wartość jest reprezentowana w pamięci, w przeciwnym razie może dojść do niespodziewanych efektów. n Jak wspomniano w poprzednim podrozdziale, dopuszczalne jest użycie rzutowania typów w obrębie sekcji definicji stałych, na przykład prawidłowy będzie zapis Const N=byte(false);. n Oprócz rzutowania typów możesz posłużyć się licznymi dostępnymi w standardowych modułach funkcjami konwersji typów, które zazwyczaj są bezpieczniejsze. 36
  • 15. Nieobiektowe elementy języka Object Pascal Listing 2.9. Przykład użycia zmiennej inicjowanej Zmienne z wartością {1} program Project2; początkową {2} {$APPTYPE CONSOLE} {3} const Jak pamiętasz, stałe nie wymagają deklarowania {4} dziwna_stala:byte=3; typów, do których należą. Kompilator, dobierając {5} begin typ stałej, wybiera typy o możliwie najmniejszej {6} writeln(dziwna_stala); liczebności. Programista może umieścić w definicji {7} dziwna_stala:=15; stałej jawną deklarację typu (na przykład aby {8} writeln(dziwna_stala); wymusić inną jej reprezentację). Na przykład: {9} readln; {10} end. const liczba_pi:double=3.14; Tak zdefiniowane stałe, zwane typed constants — stałymi o jawnie zadeklarowanym typie, w rzeczywistości zachowują się jak zmienne (dlatego też nazywa się je czasem zmiennymi inicjowanymi). Możliwe jest modyfikowanie Zmienne z wartością początkową ich wartości wewnątrz części czynnej programu. W kolejnym przykładzie (listing 2.9) w linii 4 w obrębie sekcji definicji stałych zdefiniowano zmienną, której następnie w części czynnej programu (linia 7) przypisano wartość inną niż wartość początkowa. 37
  • 16. Rozdział 2. Tabela 2.3. Operatory arytmetyczne Operatory dwuargumentowe w Delphi Poznałeś już operatory: + (plus), oznaczający Operator Operacja dodawanie, oraz * (razy), oznaczający mnożenie. + (plus) Dodawanie Wszystkie operatory liczbowe przedstawia - (minus) Odejmowanie tabela 2.3. * (gwiazdka) Mnożenie Operator div służy do dzielenia bez reszty. / (ukośnik) Dzielenie Wynikiem operacji jest wtedy liczba całkowita div Dzielenie bez reszty (typu całkowitego). W takim przypadku zmienna, mod Reszta z dzielenia w której chcemy zapisać wynik, może być zadeklarowana jako zmienna całkowita, jak pokazano w przykładzie (listing 2.10). Listing 2.10. Użycie operatora div {1} program Project1; {2} {$APPTYPE CONSOLE} {3} {4} uses {5} SysUtils; {6} {7} var {8} a,b,c:byte; {9} r:real; {10} begin Operatory {11} a:=11; {12} b:=5; {13} c:=a div b; {14} r:=a div b; {15} writeln('zapisany w postaci liczby cal{owitej'); {16} writeln('wyni{ dzielenia cal{owitego 11 div 5 wynosi ',c); {17} writeln('a zapisany w postaci liczby rzeczywistej'); {18} writeln('wyni{ tego samego dzielenia wynosi ',r); {19} writeln('Nacisnij ENTER'); {20} readln; {21} end. 38