TURBO PASCAL


Pascal (1969, N.Wirth) powstal na gruncie pewnych idei Algolu.
Jest obecnie jezykiem popularnym, prostym i zwiezlym. Jest powszechnie akceptowany jako jezyk dydaktyczny.
Jego zaleta sa bardzo precyzyjnie sformulowane reguly gramatyczne.
Programy pisane w Pascalu musza byc kompilowane.

Uruchomienie systemu:

Przejscie do katalogu z Turbo.exe np. CD TP
    Turbo

Menu glowne systemu:

=  File  Edit  Search  Run Compile Debug Options  Window  Help


Na dole wyswietlone jest znaczenie klawiszy funkcyjnych:
F1 Help,  F2 Save,  F3 Open,  Alt-F9 Compile, F9 Make,  F10  Menu

Najwazniejsze polecenia edytora Turbo Pascala

Przesuniecie kursora o jedna pozycje w poziomie - strzalki ->, <-
 -"-                   jedno slowo              - Ctrl ->, Ctrl <-
 -"-         o jeden wiersz - strzalka w gore lub w dol
 -"-         do poczatku linii - Home
 -"-         do konca linii    - End
 -"-         do 1-go wiersza w okienku - Ctrl Home
 -"-         do ostatniego wiersza w okienku - Ctrl End
 -"-         do pocz. zbioru - Ctrl PgUp
 -"-         do konca zbioru - Ctrl PgDn
 -"-         do pocz. bloku  - Ctrl Q B
 -"-         do konca bloku  - Ctrl Q K
Usuniecie wiersza - Ctrl Y
Usuniecie tekstu od kursora do konca linii Ctrl Q Y
 -"-  slowa z prawej strony kursora Ctrl T
Zaznaczenie poczatku bloku  Ctrl K B lub F7
 -"-        konca bloku     Ctrl K K lub F8
Skopiowanie bloku   Ctrl K C
Usuniecie bloku     Ctrl K Y
Przeniesienie bloku Ctrl K V
Wyszukiwanie podanego ciagu znakow   Ctrl Q F
 -"-         z zamiana na inny ciag  Ctrl Q A
Drukowanie bloku         Ctrl K P
Wczytanie bloku z dysku  Ctrl K R
Zapis bloku na dysku     Ctrl K W

Struktura programu w Pascalu:

Program sklada sie z 2 zasadniczych elementow:
PROGRAM  nazwa_programu;  {naglowek programu}

Czesc deklaracyjna  {deklaracja stalych, zmiennych - do przyporzadkowania
                     obszaru pamieci}
BEGIN
      {Czesc operacyjna programu - instrukcje}
END.

Przyklad programu
(* Zakladajac wspolcz. inflacji rocznej 7, 8 i 10 %, znalezc
czynnik, wg ktorego srodek platniczy zdewaluuje sie po 1, 2..n latach *)
PROGRAM INFLATION;  {naglowek}
  (* Cialo - blok programu - od CONST do END. *)
 CONST             {definicja stalej}
      N=10 ;
 VAR
    I:INTEGER;  W,X,Y : REAL;     {deklaracja zmiennych}
 BEGIN                            {poczatek instrukcji}
  I:=0; W:=1.0; X:=1.0; Y:=1.0;
  REPEAT          {petla - poczatak}
     I:=I+1;
     W:=W*1.07;
     X:=X*1.08;
     Y:=Y*1.10;
     WRITELN(I,W,X,Y)
  UNTIL I=N            {koniec petli}
END.


Cialo programu sklada sie z 7 rubryk (ktore moga byc puste), te rubryki
sa w kolejnosci w jakiej powiiny sie znalezc:

Porownanie Pascala z innymi jezykami:

1. Deklaracja zmiennych jest obowiazkowa
2. Sa slowa kluczowe (zarezerwowane) (BEGIN, END, REPEAT,...), ktore nie  moga byc uzywane jako identyfikatory
3. Typy danych standardowo obejmuja liczby calkowite (INTEGER),  rzeczywiste    (REAL), wartosci logiczne (BOOLEAN), znaki (CHAR).
Mozna zdefiniowac    typy strukturalne: tablica (ARRAY), zbior (SET), rekord (RECORD), plik    (FILE).
4. Tablice musza miec okreslone z gory stale wymiary (nie ma tablic dynam.)
5. Jest instrukcja skoku GOTO.
6. Jest instrukcja zlozona jak w Algolu, miedzy slowami kluczowymi BEGIN i END.
7. Jest instrukcja CASE
8. Instrukcja FOR jest wykonywana w ramach jak zmienna kontrolna jest  w granicach.
9. Funkcje i procedury moga byc wywolane rekursywnie.
10. Wszystkie obiekty powiiny byc zadeklarowane przed uzyciem.
    

PODSTAWOWE ELEMENTY JEZYKA

Symbole podstawowe:
 litery, cyfry, znaki specjalne: + - * / = ^ < > ( ) [ ] { } . , : ; ' # $ @
 znaki sterujace: znaki o kodach ASCII od 0 do 31
Male i duze litery nie sa rozrozniane.
Niektore operatory i inne elementy jezyka zapisuje sie za pomocą 2 bezposrednio nastepujacych po sobie znakow specjalnych.
Naleza do nich:
 operator przypisania:  :=
 operatory relacji:     <> <= >=
 zakres:                ..
 nawiasy klamrowe:      []
 Slowa kluczowe (52 wyrazy jezyka angielskiego):
 absolute, and, array, begin, case, const, constructor, destructor,  div, do, downto, else, end, external, file, forward, goto, if, inline,
 interface, interrupt, label, mod, nil, object, of, or, packed, procedure,  record, repeat, set, shl, shr, string, then, to, type, unit, until,
 uses, var, virtual, while, with, xor
Slowa kluczowe sa integralna czescia jezyka Turbo Pascal i sa zastrzezone, tzn. nie moga byc zdefiniowane przez programiste.

Identyfikatory
 Ciag liter i cyfr, zaczynajacy sie od litery. Liczba znakow moze byc dowolna, lecz tylko pierwsze 63 znaki sa znaczace.
Liczby - czesc calkowita od ulamkowej oddziela sie kropka. Przed kropka musi byc liczba lub zero. Ciag cyfr 16-ch powinien byc poprzedzony znakiem $.

Lancuchy (literaly lancuchowe) sluza do reprezentowania ciagu znakow.
Jesli lancuch zawiera jeden znak to nazywa go sie literalem znakowym.

Przyklady prostych programow

Przyklad 1:
Program arytmetyka_1;
 var suma, roznica, iloczyn, iloraz: real;
begin
 suma:=842+248;
 roznica=842-248;
 iloczyn=842*248;
 iloraz=842/248;
 writeln('Suma=',suma,' roznica=',roznica);
 writeln('Iloczyn=',iloczyn,' iloraz=',iloraz);
end.


Przyklad 2:
Program arytmetyka_2;
 var x, y, suma, roznica, iloczyn, iloraz: real;
begin
 readln(x,y);
 suma=x+y;
 roznica=x-y;
 iloczyn=x*y;
 iloraz=x/y;
 writeln('Suma=',suma);
 writeln('roznica=',roznica);
 writeln('Iloczyn=',iloczyn);
 writeln('iloraz=',iloraz);
end.


Program arytmetyka_3;
 var x, y, suma, roznica, iloczyn, iloraz: real;
begin
 writeln('Program wylicza wartosc sumy, roznicy');
 writeln('iloczynu i ilorazu 2 liczb rzeczywistych.');
 writeln('Podaj 2 liczby oddzielajac je spacja ');
 readln(x,y);
 suma=x+y;
 roznica=x-y;
 iloczyn=x*y;
 iloraz=x/y;
 writeln('Suma=',suma);
 writeln('roznica=',roznica);
 writeln('Iloczyn=',iloczyn);
 writeln('iloraz=',iloraz);
end.


Dzialania arytmetyczne i funkcje elementarne Turbo Pascala:

-+, -, *, /    - arytmetyczne
div - dzielenie calkowite liczb calkowitych, bez podania reszty.  Np. (5 div 3) daje w wyniku 1
mod - reszta z dzielenia liczb calkowitych,  np. 5 mod 3 daje wynik 2
abs(x)  - wartosc bezwzgledna liczby, np. abs(-5)=5
sqr(x)  - kwadrat liczby x,  np. sqr(6)=6*6=36
sin(x), cos(x) - funkcje trygonometryczne,  argument w radianach
ln(x)   - logarytm naturalny
exp(x)  - funkcja wykladnicza = e^x (e do potegi x)
sqrt(x) - pierwiastek kwadratowy z x
arcrtan(x) - funkcja odwrotna do funkcji tangens

Funkcje DIV i MOD mozna stosowac wylacznie na liczbach calkowitych.
Pozostale funkcje sa okreslone zarowno na liczbach calkowitych jak i rzeczywistych.
Kolejnosc / priorytet wykonywania jest zgodna z uzytymi nawiasami oraz priorytetem operacji: mnozenie i dzielenie przed odejmowaniem i dodawaniem.

Inne funkcje matemat. mozna zdefiniowac nastepujaco:
log x = ln(x)/ln(a)
   a
 x
a = exp(x*ln(a))

tg(x)=sin(x)/cos(x)
ctg(x)=cos(x)/sin(x)
arcctg(x)=Pi-arctan*x)
arcsin(x)=arctan(x/sqrt(1-sqr(x)))
arccos(x)=Pi-arcsin(x)


 

Typy danych

Kazda zmienna uzyta w programie powinna byc wczesniej zadeklarowana z podaniem jej typu.

W jezyku Turbo Pascal wyrozniamy typy proste, lancuchowe, strukturalne, obiektowe  i wskaznikowe.
Typ prosty sklada sie z uporzadkowanego i skonczonego zbioru wartosci.
Do tego typu zalicza sie typ porzadkowy i typ rzeczywisty.
Wartosci typow prostych oznaczane sa przez identyfikatory lub w sposob standardowy.
 W sposob standardowy oznaczane sa tzw. typy standardowe, ktorych w programie nie definiuje sie:
 - zbior liczb calkowitych
   typy:
    Shortint  -128, 127        wymiar 8 bitow
    Integer   -32768, 32767     -"-   16 bitow
    Longint   -2147483648, 2147483647  wymiar 32 bity
    Byte      0, 255                    8 bit
    Word      0, 65535                  16 bit
 - zbior liczb rzeczywistych:
   typy:
    Real      10^-38, 10^38      (11-12 cyfr, 6 bajtow)
    Single    1.5e-45, 3.4e38    (7-8 cyfr, 4 bajty)
    Double    5.0e-324, 1.7e308  (15-16 cyfr, 8 bajtow)
    Extended  1.9e-4951, 1.1e4932  (19-20 cyfr, 10 bajtow)
    Comp      -9.2e18, 9.2e18 (liczby calkowite) (19-20 cyfr, 8 bajtow)
 - zbior wartosci logicznych (typu Boolean: false, true)
 - zbior znakowy (typ  Char)

Typy Single, Double, Extended i Comp dostepne sa jedynie w zestawach z koprocesorem arytmetycznym,
a w zestawach bez koprocesora - przy jego emulacji.

Typ:
prosty:
   porzadkowy  - wyliczeniowy, okrojony, calkowity, logiczny, znakowy
   rzeczywisty
lancuchowy
strukturalny:
   tablicowy
   rekordowy
   zbiorowy
   plikowy
wskaznikowy

Proste typy danych:
 -  rzeczywiste (REAL, SINGLE, DOUBLE, EXTENDED, COMP)
 -  calkowite (INTEGER, BYTE, SHORTINT, WORD, LONGINT),
 -  logiczny BOOLEAN
 -  znakowy CHAR
 -  lancuchowy
 -  wyliczeniowy
 -  okrojony
Typ REAL
Ze wzgledu na ograniczona pamiec komputera, mozemy uzywac tylko skonczonego podzbioru liczb rzeczywistych.
Dla zmiennych typu REAL z zakresu 2.9e-39..1.7e38,  kompilator rezerwuje 6 bajtow pamieci.
Wiele obliczen dokonywanych na liczbach real daje wartosci przyblizone.
Np. sqr(sqrt(a)) wcale nie musi byc rowne a.
Dlatego budujac formuly, nlezy pamietac, ze zle ustawienie kolejnosci dzialan moze w istotny sposob wplynac na wynik.
 W odniesieniu do danych typu REAL w Turbo Pascalu mozemy uzywac dzialan i funkcji:
 +, -, *, /, abs(x),  sqrt(x),  sqr(x), sin(x), cos(x), ln(x), exp(x),
 arctan(x) oraz wielu funkcji zdefiniowanych przez uzytkownika.
Otrzymane wyniki beda zawsze typu REAL, o ile nie dokonamy odpowiedniej zamiany typu.

 Typ INTEGER i BYTE
Zmienne typu Integer sa to zmienne, ktorych wartosciami sa liczby calkowite.
Zbior liczb calkowitych uzywanych na komputerze jest podzbiorem zbioru wszystkich liczb calkowitych.
Liczba typu integer nie powinna przekraczac przedzialu -32768..32787. Kompilator rezerwuje dla takiej liczby w2 bajty.
Wyniki operacji na liczbach calkowitych otrzymujemy w postaci dokladnej.
 Dla danych typu INTEGER mamy w TPascalu nastepujace operacje arytmetyczne:  +, -, *, DIV, MOD, ABS, SQR.
Wyniki tych operacji na danych typu integer sa typu integer.
Dzielenie x/y dla 2 liczb integer daje wynik typu REAL.
 Funkcje zaokraglania liczb rzeczywistych do postaci calkowitej:
  trunc(x) - obcina czesc ulamkowa liczby rzeczywistej
  round(x) - zaokragla do najblizszej liczby calkowitej
 Przyklady:
  1) type liczba = Integer;
     var i,j,k : licznba;
     (lub  var i,j,k: Integer);
  3) type b = Byte;

 Typ BOOLEAN
Oznacza wyrazenia i zmienne logiczne, ktore moga przyjmowac wartrosci logiczne true (prawda) i false (falsz)
Wyrazenia typu logicznego mozna laczyc spojnikami logicznymi and (i), or (lub), not (nie), tworzac bardziej skomplikowane wyrazenia logiczne.
Obowiazuja prawa  Morgana:
  not(p or q) <==> (not p) and (not q)
  not(p and q) <==> (not p) or (not q)
Moga byc przydatne w celu uproszczenia prawa:
 (p and q) or  (p and r)  <==> p and (q or r)
 (p or q)  and  (p or r) <==> p or (q and r)
 p and (p or q) <==> p
 p or (p and q) <==> p
 Przyklad:     jest : boolean;     var obecny : jest;

 Typ CHAR
 Na typ CHAR skladaja sie wszystkie symbole wymienione w tablicy ASCII.
Zmienne typu CHAR sa to zmienne, ktorych wartosciami moga byc jedynie znaki ASCII.
Dla kazdej zmiennej kompilator rezerwuje 1 bajt pamieci komputera.
Dane typu CHAR wyrozniamy znakami apostrofu, np. 'a', 'X'.
Wszystkie te symbole maja swoje numery. Sa to odpowiadajace im numery kodow ASCII.
Mozliwe jest uzycie funkcji do konwersji typow CHAR na INTEGER i odwrotnie.
Funkcje te maja postac:
 ord('x') - jest numerem symbolu x w tablicy ASCII
 char(i)  - jest znakiem ASCII odpowiadajacym liczbie naturalnej.
 Przyklad:
      var litera : char;

 Typ WYLICZENIOWY i OKROJONY
Typ wyliczeniowy stosuje sie zwykle dla zbiorow o niewielkiej liczbie elementow, na ktorych nie wykonuje sie operacji arytmet.
Jest definiowany przez uzytkownika przez wyliczenie wszystkich jego elementow.
 Definicja typu wyliczeniowego:
 type ident_typu = (lista_identyf);
  W celu zadeklarowania zmiennych pewnego typu wyliczeniowego, mozna uzyc deklaracji:
 type t=(t1, t2, ... tn);
 var x, t, z : t;
lub w postaci skroconej:
 var x, y, z : (t1, t2, ... , tn);
gdzie t1, t2, .., tn sa elementami deklarowanego typu.
 Przyklady:
 1)  type kolor=(bialy, niebieski, zielony, czerwony);
 2)  type pora_roku=(wiosna, lato, jesien, zima);
 3)  type tydzien=(pon,wt,sr,cz,pt,sb,nd);
          dni_robocze=(pon,wt,sr,cz,pt,sb);
 4) var tydz_rob : (pon,wt,sr,cz,pt,sb);

 Mozliwe jest uzywanie funkcji SUCC(x) i PRED(x), gdzie
  SUCC(x) - jest nastepnikiem elementu x w odpowiednim typie wyliczeniowym
  PRED(x) - jest poprzednikiem elementu x
Funkcja ORD(x) zastosowana do elementow typu wyliczeniowego podaje ich kolejne numery w opisie typu, przy czym pierwszy element ma numer zero.
 Typ OKROJONY typu porzadkowego ogranicza zbior wartosci przez podanie najmniejszej i najwiekszej wartosci
 Definicja typu okrojonego:
  Type ident_typu = stala..stala;
 stala oznacza liczbe calkowita, litaral znakowy, literal logiczny,
 nazwe literalu, identyfikator ze zbioru wartosci typu wylicz. lub  wyrazenie stale
 Przyklady:
 1)  type litara = 'A'..'Z';
  Typ okrojony litera jest podzbiorem standardowego typu Char.
 2)  type dzien=(pon,wt,sr,cz,pt,sb,nd);
          dni_roboce=pon..pt;
 3) type zakres = 0..100;
 4) cons a=10;
         b=20;
    type przedzial = 2*(a-b)..2*(a+b);

 Typ STRUKTURALNY
Definiuje sie przez podanie typow skladowych i metody strukuralizacji,
ktora okresla zarazem sposob dostepu do elementow wartosci strukturalnej.
 W Turbo Pascalu sa 4 rodzaje struktur:

 T a b l i c a  jest zbiorem elementow tego samego typu, a dostep do poszczegolnych elementow za pomoca indeksu lub ciagu indeksow.
 Definicja pojedynczego typu tablicowego ma postac:
  type ident_pliku = array [typy_indeksowe} of typ_skladowy
Przyklady:
 1) type wektor = array [0..50] of integer;
 2)    type macierz = array [1..20] of array [1..3] of Real
  lub  type macierz = array [1..20,1..3] of Real;
 3) type znak = 'A..'Z';
    type tablica = array [Boolean,1..20,znak] of Char;
 4) type dzien=(pon,wt,sr,cz,pt,sb,nd);
    var tydzien=array [1..7] of dzien;
 5) type zakres=10..20;
         tablica=array[zakres] of Char;

Typ  r e k o r d o w y
 Elementy rekordow, zwanych polami moga byc roznych typow, a dostep do nich przez wyspecyfikowanie
odpowiednich identyfikatorow okreslonych w definicji typu rekordowego.
Rekord moze miec kilka wariantow, z ktorych kazdy moze posiadac rozna liczbe pol.
 Definicja pojedynczego typu rekordowego:
  type ident_typu = record lista_deklaracji_pol end;
 Przyklady:
 1) type data = record
                  rok   : Integer;
                  mc    : 1..12;
                  dzien : 1..31;
                end;
 2) type data = record;
                 rok : Integer;
                 miesiac: 1..12;
                 dzien: 1..31;
         posiadanie = (posiada,nie_posiada);
         personalia = record;
                       nazw: string[20];
                       imie1,imie2: string[15];
                       nazw_pan: string[20];
                       imie_ojca,imie_matki : string[15];
                       data_urodz: data;
                       miejsce_ur: data;
                       stan_cywilny: (kawaler,panna,zonaty,zamezna,wolny);
                       mce_zam: string[20];
                       case dzieci: posiadanie of
                        posiada : (data_urodz_dziecka: array [1..10] of data;
                        nie_posiada: (znak:char);
                      end;
 3) type karta = record
                    numer: ShortInt;
                    pers: record
                            naz_imie: record
                                      naz: string[20];
                                      imie:string[15]
                                     end;
                            urodz: record
                                      data:string[11];
                                      miej:string[2];
                                  end;
                            adres: record
                                      msc,ul:string[20]
                                 end;
                          end;
                     praca: record
                             wydz,dzial: char;
                             stanow: string[20];
                            end
                   end;



 Z b i o r - jego elementami sa podzbiory pewnego typu porzadkowegom, zwanego typem bazowym i okreslonego w definicji zbioru.
Na zbiorach mozna dokonywac operacji mnogosciowych.
Typ  z b i o r o w y  jest zbiorem potegowym danego typu porzadkowego,
tzn. jest zbiorem wszystkich podzbiorow tego typu, w tym zbioru pustego.
Definicja pojedynczego typu zbiorowego ma postac:
   type identyfikator_typu = set of typ_porzadkowy
Liczba elementow typu porzadkowego, bedacego typem bazowym nie moze przekraczac 256 [0,255].
Przyklady:
1)  type dni_pracy=set of (poniedzialek,wtorek,sroda,czwartek,piatek);
Elementami typu dni_pracy moze byc dowolny podzbior zbioru podanych nazw dni tygodnia, m.inn.:
 [poniedzialek,czwartek], [piatek], [wtorek,sroda,piatek], []
2) type znaki=set of Char;
        male_litery=set of 'a'..'z';
  Elementami typu znaki sa dowolne podzbiory zbioru znakow ASCII
3) type miesiac=(styczen,luty,marzec,kwiecien,maj,czerwiec,lipiec,sierpien, wrzesien,pazdziernik,listopad,grudzien);
  zbior_miesiecy = set of miesiac;
  var nazwa_miesiaca: miesiac;
      zbior_nazw: zbior_miesiecy;

 P l i k  reprezentuje dane przechowywane w pamieci dyskowej.
Plik jest ciagiem elementow tego samego typu, ale w dowolnej chwili dostepny jest tylko jeden element pliku, sprowadzony z pamieci dyskowej.
 Typ  p l i k o w y   definiuje sie:
      type identyf_typu = file of opis_typu_elementow_pliku;
lub   type identyf_pliku = file;
W języku TP istnieje predefiniowany plik tekstowy o nzawie Text.
Elementami pliku tekstowego sa wiersze podzielone na znaki.
Przyklady:
 1) type dane = file of Integer;
         wyniki = file of Real;
 2) type complex = file of record
                             re, im : Real;
                           end;
 3) type t_tekst = text;
     var dan1, wyn1 : text;

Typ  w s k a z n i k o w y
Zmienne wyzej omowionych typow tj. prostych i strukuralnych istnieja przez caly czas wykonywania tej czesci programu, w ktorej sa zadeklarowane.
Sa to zmienne  s t a t y c z n e.
W jzzyku Pascal sa tez zmienne  d y n a m i c z n e,  reprezentujace obiekty, dla ktorych pamiec jest przydzielana i zwalniana na zadanie.
Zmienne te nie posiadaja identyfikatorow, a odwolanie do nich nastepuje za pomoca wskaznika.
Wartosciami wskaznikow sa elementy typu wskaznikowego, ktore okreslaja adresy pamieci zmiennych dynamicznych.
Zastosowanie zmiennych dynamicznych pociaga za soba koniecznosc zdefiniowania typow wskaznikowych.
 type ident_typu = ^ident_typu_bazowego;
Przyklad:
 type wskaznik = ^zapis;
      zapis = record;
               nagl: char;
               tekst : string[50];
               liczba : integer;
              end;
Definicja ta wiaze typ wskaznik ze zbiorem wskazan typu zapis.
      var  adres : wskaznik;
Zmiennej wskaznikowej adres moga byc przypisywane adresy pamieci danych typu zapis.
Predefinowany jest typ Pointer. Slowo nil oznacza stala typu wskaznikowego wskazujaca adres pusty.

Typ  p r o c e d u r a l n y
Wersja 5.5 TP pozwala traktowac procedury i funkcje nie tylko jako czesci programu wykonywane na skutek wywolania,
ale takze jako elementy, ktore moga byc przypisywane do zmiennych i przekazywane do innych funkcji i/lub procedur jako parametry.
Zmienne tego rodzaju powinny byc typu proceduralnego.
 type nazwa = procedure;
 type nazwa = procedure(lista_parametrow);
 type nazwa = funktion:typ_wartosci;
 type nazwa = funktion(lista_parametrow):typ_wartosci;

 Przyklady:
 1)
  type procedura = procedure;
    proc_1 = procedure(x: Real,
                      k: Integer;
                      var y: Real);
    proc_2 = procedure (var tak, nie: Boolean);
    funkcja = function: Longint;
    fun_1 = function (x: Real): real;
    fun_2 = function (i,j,k : Integer; x,y : Real): Boolean;

 2)
  type licz = function (x: Real): Real;
       obliczenia = procedure (x : Real;  f: licz;  var y: Real);
  Uwaga. Drugim parametrem typu proceduralnego obliczenia jest
  element typu proceduralnego  l i c z ,  zdefiniowanego wczesniej.

Typ  o b i e k t o w y
O b i e k t e m  w TP nazywa sie zlozona strukture danych o ustalonej liczbie elementow skladowych, z ktorych kazdy moze byc polem
(jak w rekordzie) lub  m e t o d a,  tj. zlozonym elementem opisukacym
operacje wykonywana na danym obiekcie.
 Ogolna postac definicji typu obiektowego:
  type identyf_typu = object dziedzictwo
                        lista_deklaracji_pol
                        lista_deklaracji_metod
                      end;
Dziedzictwo oznacza ujety w nawiasy okragle identyfikator innego, zdefiniowanego wczesniej, typu obiektowego.
 Kazda z deklaracji pol ma postac:
   lista_nazw_pol: opis_typu;
a kazda deklaracja metody jest nastepujaca:
   naglowek_metody;
lub
  naglowek_metody; virtual;
gdzie naglowek metody oznacza naglowek funkcji, procedury, konstruktora lub destruktora. 
Slowo kluczowe virtual oznacza dana metode jako wirtualna.
 Przyklady:
  1)
    type punkt = object
                  x,y: Integer;
                 end;
  2) type polozenie = object (punkt)
                       kolor : Byte;
                      end;
     Typ polozenie dziedziczy elementy typu obiektowego punkt.
  3) type odcinek = object
                      x, y: Integer;
                      procedur zaznacz (dx,dy: Integer);
                    end;
  W definicji tej, typu obiektowego  odcinek   okreslono, obok 2 pol, takze metode.
Konieczne jest przy tym podanie w programie definicji procedury zaznacz.
Na przyklad w postaci:
   procedure odcinek.zaznacz (dz,dy: Integer);
     begin
       LineRel (dx,dy);
       x=x+dx;
       y=y+dy;
     end;
 LineRel jest nazwa procedury rysujaceej pewien odcinek na ekranie graficznym, a 2 pozostale istrukcje - instrukcjami przypisania.