background image

1

Wykład XI

Podstawy programowania w 

Object Pascalu

Podstawy informatyki
Semestr I Transport
Semestr II Elektrotechnika

background image

2

Poznamy reguły dotyczące 

Object Pascala

Nadeszła  teraz  odpowiednia  chwila  by  przedstawić  syntaktyki  i 

semantyki wybranego języka – Object Pascala.
Mają  one  bezpośrednie  zastosowanie  w  środowiskach 

programistycznych produkowanych przez firmę Borland:

– Delphi (dla platformy Windows i AIX)
– Kylix (dla platformy Linux)
– producent  zapowiadana  wydania  dla  innych  systemów 

operacyjnych.

Istnieją alternatywne wersje środowisk programistycznych, które 

wykorzystują  Pascala  jako  język  programowania.  Choć  między 

poszczególnymi  implementacjami  mogą  istnieć  niewielki 

różnice, to jednak większość omawianych reguł dotyczy również 

tych  środowisk.  Należą  do  nich  m.in.  Free  Pascal  Compiler, 

Virtual Pascal, czy różne wersje Turbo Pascala .

background image

3

Jak zdobyć potrzebne 

narzędzia?

Komputery  w  laboratoriach,  w  których  będą  odbywały  się 

ćwiczenia  będą  wyposażone  w  środowisko  Borland  Delphi 

Studio 7 Professional pracujące w środowisku Windows.
Dla  własnych  ćwiczeń  można  wykorzystać  bezpłatną  (nieco 

uboższą)  edycję  tego  środowiska  –  Borland  Delphi  7 

Personal.  Można  ją  znaleźć  na  witrynie  producenta  – 

www.

borland.com

www.borland.pl

, a także na płytach dołączanych 

do wielu pism komputerowych.
Legalne korzystanie z wersji bezpłatnej  wymaga rejestracji 

używanej  kopii  u  producenta  programu.  Po  dopełnieniu 

niezbędnych  formalności  otrzymamy  numer  niezbędny  do 

instalacji środowiska.
Osoby  pracujące  na  platformie  Linux  mogą  pobrać 

odpowiednią wersję środowiska Kylix.

background image

4

Symbole podstawowe

Litery (A..Z,a..z,_)
Cyfry (0..9)
Znaki specjalne   (+  -  *  /  =  ^   <  >  (   ) 
 [  ]   {  }   

.   ,  :  ;   ‘   #      $     @)

znaki  sterujące    (#0..#31  w  kodach  ANSI, 
UNICODE)

Małe i duże litery nie są rozróżniane

background image

5

Słowa kluczowe i 

dyrektywy standardowe

Słowa  kluczowe  mają  w  Object  Pascalu  określone 

znaczenie i są zastrzeżone.Oznacza to, że nie mogą być one 

definiowane przez programistę.
Dyrektywy standardowe również mają swoje znaczenie w 

języku  Object  Pascal,  ale  można  je  przedefiniowywać  (nie 

jest to zalecane).
Wewnątrz 

definicji 

typu 

obiektowego 

dyrektywy 

standardowe  private,  protected,  public,  published  i 

automated są uznawane za słowa kluczowe.
W  edytorze  kodu  słowa  kluczowe  i  dyrektywy  standardowe 

są zazwyczaj wyróżniane (najczęściej pogrubioną czcionką).
Zestawienie  słów  kluczowych  i  dyrektyw  standardowych 

zawierają następne slajdy.

background image

6

Zestawienie 

najważniejszych słów 

kluczowych Object Pascala

and

exports

library

shl

array

file

mod

shr

as

finalization

nil

string

asm

finally

not

then

begin

for

object

thredvar

case

function

of

to

class

goto

on

try

const

if

or

type

constructor

implementation

packed

unit

destructor

in

procedure

until

div

inherite

program

uses

do

initialization

property

var

downto

inline

raise

while

else

interface

record

with

end

is

repeat

xor

except

label

set

background image

7

Dyrektywy standardowe

abstract

dynamic

override

resident

assembler external

private

stored

at

forward

protected

virtual

automated index

public

write

cdecl

message

published

default

name

read

dispid

nodefault

register

background image

8

Identyfikatory – nazwy

Identyfikatory  służą  do  oznaczania:  stałych,  typów, 

zmiennych  (w  tym  obiektów),  etykiet,  procedur,  funkcji, 

modułów,  programów,  parametrów  formalnych,  pól 

rekordów  oraz  pól  i  metod  w  obiektach  (wszystkie  te 

elementy  oraz  ich  przeznaczenie  będą  omawiane  w 

trakcie wykładów).
Nazwy powinny być unikalne (nie mogą się powtarzać) w 

obrębie 

zasięgu 

definicji 

(programu 

bądź 

jego 

wydzielonej części np. biblioteki, funkcji, procedury).
Wielkość  liter  w  nazwach  nie  ma  znaczenia,  tzn. 

przykładowe 

identyfikatory: 

zmienna

Zmienna

ZMIENNA,  ZmIeNnA  niezależnie  od  zastosowanej 

pisowni oznaczają ten sam element.

background image

9

Reguły jakie muszą 

spełniać identyfikatory 

Object Pascala

Długość  do  128  znaków,  jednak  znaczenie  mają 
tylko pierwsze 63 znaki.
Składają  się  z  tylko  z  liter  i  cyfr  (może  zawierać 
podkreślnik -„_”).
Nie mogą zaczynać się od cyfry.
Nie mogą zawierać odstępów (spacji,  „  ”).
Nie  mogą  zawierać  liter  charakterystycznych  dla 
alfabetu polskiego: ąćęłńóśźż.
Nazwa nie może zawierać znaków specjalnych:   !
@# ,$%, ,^&*<>, ?, ...

background image

10

Przykładowe 

identyfikatory

 Nazwy nieprawidłowe:  Nazwy prawidłowe:

Program

 

nr

 

1

Program

_

nr

_

1

001 

R

ó

wnanie

 

kwadratowe

Rownanie

_

kwadratowe

_001

silnia_

#

1 silnia_1

Label 1

Label1

edit Tekst editTekst

Ca

ł

ka_Metod

ą

_Simpsona Calka_Metoda_Simpsona

background image

11

Liczby

Całkowite  -  ciąg  cyfr  dziesiętnych  lub  szesnastkowych 

poprzedzonych  ewentualnie  znakiem  „+”  lub  „–”  (liczba  bez 

znaku jest uznawana za dodatnią, liczby szesnastkowe należy 

poprzedzić znakiem $).
Przykłady: 1234+1234-1234012$ABC-$ABC
Rzeczywiste  –  składają  się  z  mantysy,  litery  E  (lub  e)  oraz 

cechy. Mantysa jest liczbą dziesiętną, która składa się z części 

całkowitej  ,  kropki  oraz  części  ułamkowej.  Cecha  jest  liczbą 

całkowitą.  Mantysa  i  cecha  mogą  zawierać  wyłącznie  cyfry 

dziesiętne.    Kropka  i  część  ułamkowa  są  w  mantysie 

opcjonalne.  Liczbę  można  również  określić  tylko  za  pomocą 

mantysy.
Przykłady: 

-12.34,  0.34,  1.,  1.2e-3,  1e7,  0.3e-5

-5.43E+0298E12,  00.00E0+0.0E-00.E+00

background image

12

Łańcuchy

Łańcuch  jest  sekwencją  znaków  (wg  kodu  ANSI  lub  UNICODE) 

zawartą w apostrofach.   ’Object Pascal’

’Bardzo dobry 

łańcuch’
Łańcuch  złożony  tylko  z  dwu  apostrofów  będziemy  nazywać 

łańcuchem pustym ’’.
Apostrof  wewnątrz  łańcucha  przedstawiamy  za  pomocą  dwu 

apostrofów ’Kepler’’s law’  ’’’’ 
Pojedyncze  znaki  również  umieszczamy  w  apostrofach  ’a’  lub 

’A’.  lub  możemy  się  posłużyć  ich  numerem  z  kodu  ANSI  (w 

postaci 

dziesiętnej 

lub 

szesnastkowej) 

poprzedzonych 

symbolem #.

#65 (’A’)

#13 (Enter, CR/LF)

#27 (Esc)

#127 lub #$7F (znak Del)

Oba 

sposoby 

reprezentacji 

łańcuchów 

można 

łączyć.

’Linia  1’#13’Linia 2’

background image

13

Literały logiczne

Reprezentują  wartości  jakie  mogą 
przyjmować 

zmienne, 

literały, 

parametry,  funkcje  i  pola  (rekordów  i 
obiektów) typu logicznego.

false (fałsz, 0)
true (prawda, 1)

background image

14

Komentarze

Komentarze są to linijki programu, które są ignorowane 

przez kompilator.
Mają  najczęściej  postać  krótkiej  notatki  opisującej  na  przykład 

zastosowane  konstrukcje  lub  deklaracje,  sposób  działania 

jakiegoś  fragmentu  programu  lub  inne  informacje  ważne  z 

punktu widzenia programisty.
Są one pomocne, gdy program jest pisany w kilku etapach, jak 

również  w  procesie  późniejszego  utrzymania  programu,  czy 

wprowadzania ewentualnych poprawek.
W Object Pascalu istnieją trzy sposoby tworzenia komentarzy:

– {Znaki  znajdujące  się  pomiędzy  nawiasami  stanowią 

komentarz. }

– (* Inna forma tworzenia komentarza. *)
– //ten komentarz musi zmieścić się w jednej linii

background image

15

Główne bloki programu

W  projekcie  aplikacji  znajdują  się  następujące  pliki 
zawierające kod programu:
Pliki  modułów,  zawierają  formularze  aplikacji  (każdy 
formularz  składa  się  z  dwu  plików:  pierwszy  ma 
rozszerzenie  .pas  i  zawiera  kodu  modułu,  drugi  .dfm 
zawiera  definicję  formularza)  lub  wykorzystywane  przez 
nią  biblioteki  (tylko  jeden  plik  o  rozszerzeniu  .pas  , 
zawiera kod modułu)
Plik  projektu,  który  zawiera  główny  blok  programu 
integrujący    aplikację.  Od  bloku  projektu  rozpoczyna  się 
wykonanie  programu.  Kod  projektu  jest  przechowywany 
w pliku o rozszerzeniu .dpr.

background image

16

Struktura projektu 

(programu)

Program napisany w  języku Object Pascal jest zbudowany następująco:

Nagłówek  programu  -  składa  się  ze  słowa  kluczowego  PROGRAM, 

po którym występuje nazwa programu (identyfikator) 
Deklaracja  modułów  -  za  pomocą  deklaracji  modułów  określa  się 

moduły  standardowe  oraz  moduły  użytkownika  (niestandardowe), 

które będą wykorzystywane przez program. 
Blok - blok programu w języku Object Pascal stanowi:

– Część  opisowa  -  zawiera  deklaracje  etykiet,  stałych,  typów, 

zmiennych  oraz  definicje  procedur  i  funkcji.  Kolejność  tych 

elementów  jest  dowolna,  dopuszczalne  jest  również  przeplatanie 

się poszczególnych elementów.

– Część  wykonawcza  -  stanowi  ją  ograniczonych  słowami 

kluczowymi begin i end ciąg instrukcji oddzielonych średnikami

Instrukcje w bloku programu są wykonywane sekwencyjnie.

Znak kropki „.

background image

17

Struktura projektu - 

przykład

program  Nazwa_Projektu;

{deklaracje modułów}
{część opisowa}

begin

{blok programu}

end.

background image

18

Projekty (aplikacje) 

konsolowe

To  takie  aplikacje,  które  do  pracy  wykorzystują  tryb 

tekstowy. Zazwyczaj pracują w oknie konsoli.
Zazwyczaj nie zawierają formularzy, a interfejs użytkownika 

oraz zestaw dostępnych funkcji jest uproszczony.
Przykład

program  Nazwa_Projektu;

{$APPTYPE CONSOLE} 
{deklaracje modułów}
{część opisowa}

begin

{blok programu}

end.

background image

19

Struktura modułu

Nagłówek  modułu  –  składa  się  ze  słowa  kluczowego  unit  i  nazwy 

modułu.  Identyfikator  modułu  powinien  mieć  nazwę  zgodną  z  nazwą 

pliku,  w  którym  go  zapisano  (np.  jeśli  moduł  nazywa  się  formularz  to 

powinien  być  zapisany  w  pliku  formularz.pas).  Nazwa  modułu  jest 

używana do deklaracji użycia modułu.
Część  opisowa  -    zawiera  deklaracje  tych  etykiet,  stałych,  typów, 

zmiennych  oraz  definicji  nagłówków  procedur  i  funkcji,  które  będą 

dostępne  w  innych  częściach  programu.  Kolejność  tych  deklaracji  jest 

dowolna,  dopuszczalne  jest  również  przeplatanie  się  poszczególnych 

elementów.  Na początku tej części możemy zadeklarować również chęć 

wykorzystania innych modułów (uses)
Część implementacyjna – definiujemy w niej funkcje i procedury, które 

zostały  zapowiedziane  w  części  opisowej.  Deklarujemy  tu  również 

etykiety,  stałe,  typy,  zmienne  oraz  procedury  i  funkcje,  które  będą 

dostępne  tylko  w  tej  części  modułu.  Tu  również  możemy  zażyczyć  sobie 

wykorzystania  innych  modułów  jeśli  chcemy  go  używać  tylko  w  części 

implementacyjnej.

background image

20

Struktura modułu 

(cd.)

Część  inicjująca  –  zawiera  instrukcje,  które  będą 
wykonywane  w  celu  zainicjowania  modułu.  Moduły  są 
inicjowane w takiej kolejności, w jakiej są zadeklarowane w 
pliku projektu. Ta część modułu jest opcjonalna i nie musi 
wystąpić.
Część  kończąca  –  zawiera  instrukcje,  które  będą 
wykonane  przed  końcem  działania  aplikacji  w  celu 
zwolnienia  zasobów.  Części  kończące  poszczególnych 
modułów są wykonywane w odwrotnej kolejności niż części 
inicjujące.  Część  kończąca  jest  opcjonalna,  ale  może 
wystąpić tylko wtedy jeśli moduł zawiera część inicjującą.
Słowo kluczowe end i .

background image

21

Struktura modułu – 

przykład

unit nazwa_modułu;
interface

{część opisowa}

implementation

{część implementacyjna}

initialization

{część inicjująca}

finalization

{część kończąca}

end.

background image

22

Deklaracje modułów w 

projekcie

Zaczyna  się  od  słowa  kluczowego  uses  i  zawiera  listę 

modułów zakończoną średnikiem.
Lista składa się z oddzielonych przecinkami nazw modułów. 
Dla  każdego  modułu  po  słowie  in  może  być  podana  nazwa 

pliku, w którym umieszczono moduł. Tylko te moduły należą 

do 

projektu, 

pozostałe 

są 

przez 

projekt 

jedynie 

wykorzystywane.
Przykład
uses Forms

//lub QForms dla Linuxa

 Modul1 in ’Plik1.pas’,
 Modul2 in ’Plik2.pas’,
 Modul3;

background image

23

Deklaracje modułów w 

innych modułach

Identycznie  jak  w  projektach  zaczyna  się  od 
słowa  kluczowego  uses  i  zawiera  listę 
modułów zakończoną średnikiem.
Lista  składa  się  z  oddzielonych  przecinkami 
nazw modułów. 
Składnia

uses lista–identyfikatorów–modułów

Przykład

uses Windows, Dialogs, SysUtil, NumLib;

background image

24

Deklaracje etykiet

Etykieta  może  być  identyfikatorem,  bądź  ciągiem 

składającym  się  z  1-4  cyfr.  Są  wykorzystywane  przez 

instrukcję  skoku  (goto).  Za  ich  pomocą  oznaczamy 

miejsca  skoków.  Każda  wykorzystywana  etykieta  winna 

być wcześniej zadeklarowana. Więcej informacji o skokach 

pojawi  się  na  wykładzie:  Instrukcje  sterujące  w  Object 

Pascalu.
Składnia

label lista-etykiet;

Przykład

label etykieta;
Label alfa, Beta, beta1, 10, 9999;

background image

25

Zmienne

W Pascalu deklaracje zmiennych zlokalizowane są w 
części opisowej programu, funkcji bądź procedury.
Zmienne reprezentują pamięć programu.
Wszystkie wykorzystywane przez program zmienne 
muszą zostać wprost zadeklarowane.
Zazwyczaj  nadawanie  wartości  zmiennym  odbywa 
się  w  innym  miejscu  niż  ich  deklarowanie 
(mianowicie  w  treści  programu).  Niemniej  dla 
zmiennych globalnych dopuszczalna jest możliwość 
inicjowania zmiennych w ich deklaracji.

background image

26

Deklaracje zmiennych

Rozpoczyna  ją  słowo  kluczowe  var,  po  który  następuje 

sekwencja deklaracji o postaci nazwa zmiennej (lub oddzielone 

przecinkami nazwy)+dwukropek+typ zmiennej (zmiennych).
Składnia:  var sekwencja-deklaracji
gdzie każda deklaracja w sekwencji ma postać
lista-identyfikatorów: oznaczenie-typu
Przykłady
var i, j, k, l: Integer;
a,b : Single;
log: Boolean;
tab: array[1..50] of Double;
Var p,q: JakisTyp;
st: InnyTyp;

background image

27

Inicjowanie wartości 

zmiennych

Jest dopuszczalne jedynie dla zmiennych globalnych w Delphi 

w wersji 2 lub nowszej.
Dodatkowo  deklarację  zmiennej  należy  uzupełnić  znakiem 

„=” i wartością.
Przykład
var  i: Integer = 10;
P: Pointer = nil;
S: String = ’Napis domyślny’;
d: Double = 3.1415926;
Kompilator  sam  inicjuje  zmienne,  których  wprost  nie 

zainicjowaliśmy  nadając  liczbą  wartość  0,  wskaźnikom 

wartość nil, łańcuchy inicjalizowane są łańcuchem pustym

background image

28

Stałe (ang.  constans)

Są  synonimami  konkretnych  wartości  występujących  w 

programie.  Wprowadzone  zostały  w  celu  rozróżnienia 

identycznych 

wartości 

mających 

jednakże 

różne 

przeznaczenie.
Jeżeli dla przykładu w dużym programie 7 oznacza liczbę 

dni  w  tygodniu  i  liczbę  stanowisk  w  zakładzie  to  po 

powiększeniu  liczby  stanowisk  do  10  trzeba  bardzo 

starannie  wybierać  w  programie  te  siódemki,  których 

wartość ma być zmodyfikowana. Problem jeszcze bardziej 

się  komplikuje  jeśli  chodzi  o  wartości  pochodne  (czy 

wartość 28 oznacza 4 tygodnie, czy też liczbę taboretów 

przy  stanowiskach  –  po  4  na  stanowisko).  Używając 

stałych programiści są wolni od tego typu obaw.

background image

29

Korzyści ze stosowania 

stałych

Możliwość  zmiany  wartości  w  wielu 
miejscach.
Możliwość rozróżnienia takich samych 
wartości 

(patrz 

przykład 

poprzednim slajdzie).
Poprawa czytelności programu.

background image

30

Definicje literałów 

(stałych)

Deklaracja stałych poprzedzona jest słowem kluczowym const 

i  składa  się  z  jednego  bądź  więcej  przypisań  wartości  nazwą 

synonimicznym.  Możliwe  jest  nadawanie  wartości  stałym  z 

wykorzystanie wyrażeń stałych (patrz dalej w tym wykładzie).
Składnia
const lista definicji stałych;
gdzie każda z definicji składa się z przypisania
identyfikator=wyrażenie_stałe
Przykłady
const

tekst=’Object Pascal’;    x:=Round(3.14159);

e=2.718281825;
prawda=TRUE;
LiczbaTaboretow=IloscTaboretowNaStan*IloscStanowisk;

background image

31

Określanie typu stałej

Deklarowana nazwa synonimiczna jest takiego samego typu 

jak  przypisywana  do  nich  wartość  przy  czym  kompilator 

stara się dobrać taki typ by ich reprezentacja zajmowała jak 

najmniej miejsca w pamięci.
Programista  może  zmienić  tę  konwencję  deklarując  wprost 

typ stałej, np.
const
LiczbaDziesietna: Double=3.14;
i: Integer=10;
KomunikatBledu: string=’Uwaga, niebezpieczeństwo’;
W  obrębie  deryktywy  {$J}  (sytuacja  domyślna)  tego  typu 

deklaracja  odpowiada  deklaracji  zmiennej  inicjowanej.  poza 

nią odpowiada zwykłej stałej.

background image

32

Definicje własnych typów

Wyjaśnienie pojęcia typu można znaleźć w wykładzie: Proste typy danych.
Deklaracja  składa  się  ze  słowa  kluczowego  type  oraz  sekwencji  definicji 

typów  gdzie  każda  definicja  składa  się  z  nazwy  typu,  znaku  „=”  i  opisu 

typu.
Składnia
type sekwencja-definicji-typów
gdzie każda definicja ma postać
identyfikator-typu=opis-typu;
Przykłady

type

numer=Integer;

dzien=(poniedzialek,  wtorek,  sroda,  czwartek,  piatek,  sobota, 

niedziela);

 tablica=array[1..100] of Single;

type

Tekst=Char;

LiczbaRzeczywista=Extended;

background image

33

Definicje i deklaracje 

funkcji i procedur

Reprezentują  podprogramy.  Poświęcimy  im  cały  wykład  pt. 

Funkcje  i  procedury  stąd  na  razie  sygnalizujemy  jedynie  ich 

istnienie wśród deklaracji, a szczegóły dotyczące ich konstrukcji i 

przeznaczenia pojawię się na ww. wykładzie.
Procedura Nazwa1(lista-parametrów)
begin
 {treść procedury)
end;

function Nazwa2(lista-parametrów):Typ-Wyniku
begin
 {treść procedury}
end;

background image

34

Szkielet programu

program nazwa_programu;  {nagłówek programu}

uses {deklaracja modułów}
   {początek części opisowej}
label {deklaracje etykiet}

const

{deklaracje stałych}

type {definicje typów}
var

{definicje typów}

procedure {definicje podprogramów}
function

{koniec części opisowej}

begin

    {część wykonawcza programu}

end.

background image

35

Typowy plik projektu w 

Object Pascalu

program Editor;
uses
       Forms,
       REAbout in 'REAbout.pas' {AboutBox},
       REMain in 'REMain.pas' {MainForm};
{$R *.res}
begin
       Application.Title := 'Text Editor';
       Application.CreateForm(TMainForm, MainForm);
       Application.Run;
end.

background image

36

Operator przypisania

Służy  do  przypisania  zmiennej  wartości.  Jest  to 

chyba jeden z najważniejszych operatorów języka.
Przykład
Numer:=5;
Liczba:=5+b;
X:=X+1;
Pierwsza  z  przykładowych  instrukcji  nadaje 

zmiennej  Numer  wartość  5,  druga  w  zmiennej 

liczba  umieszcza  sumę  wartości  5  i  zmiennej 

(stałej?)  b.  Ostatnie  przypisanie  zwiększa  o  1 

wartość zmiennej X.

background image

37

Operator zakresu

Jest  wykorzystywany do definiowania zakresów 
wartości dla typów porządkowych.
..
Przykład
1..7
’a’..’z’
107..231
Poniedziałek..Piatek

background image

38

Operatory porównania

Służą 

do 

stwierdzenia 

równości 

bądź 

nierówności 

dwóch 

wartości 

albo 

ich 

porównania pod względem relacji mniejszości.
Są to operatory:

równości =,

nierówności <>,  mniejszości <

większości  >, niewiększości  <=,

niemniejszości 

>=.

Ich  wynikiem  jest  zawsze  wartość  typu 
logicznego.

background image

39

Operatory logiczne

Operatory logiczne 
realizują operacje 
wynikające z algebry 
Boole’a.
Ich typowym 
zastosowaniem jest 
testowanie kilku 
powiązanych ze sobą 
warunków np. wymaganie 
jednoczesnej prawdziwości 
dwu warunków zapiszemy 
następująco:
warunek1 and warunek2

not (negacja)
       not FALSE

=>

TRUE

       not TRUE

=>

FALSE   

and (koniungcja, iloczyn logiczny)
       FALSE

and

FALSE

=>

FALSE

       TRUE

and

FALSE

=>

FALSE 

       FALSE

and

TRUE

=>

FALSE

       TRUE

and

TRUE

=>

TRUE

or (alternatywa, suma logiczna)
       FALSE

or

FALSE

=>

FALSE

       TRUE

or

FALSE

=>

TRUE 

       FALSE

or

TRUE 

=>

TRUE

       TRUE

or

TRUE

=>

TRUE

xor (dysjunkcja)
        FALSE

xor

FALSE

=>

FALSE

        TRUE

xor

FALSE

=>

TRUE 

        FALSE

xor

TRUE

=>

TRUE

        TRUE

xor

TRUE

=>

FALSE

background image

40

Operatory bitowe

Operatory  bitowe  (not,  and,  or,  xor,  shl,  shr) 

mogą  wykonywać  działania  na  dwójkowych 

reprezentacjach  wartości.  Pierwsze  4  realizują 

operacje  logiczne  na  bitach,  dwa  ostatnie 

operacje  przesuwania  bitów  w  lewo  (shl)  lub  w 

prawo (shr).
Przykład

9 and 3=1

9 or 3 =11 9 shl 3=72

00001001

00001001 00001001

and

00000011     or 00000011 shl

00000011

00000001

00001011 01001000

background image

41

Operatory arytmetyczne

Dodawania

+

Odejmowania

-

Mnożenia

*

Dzielenia 

div 

(całkowite) / 

(rzeczywiste)
Reszty z dzielenia mod

background image

42

Priorytety operatorów

jednoargumentowe (najwyższy priorytet)
+    -    @    not                
multiplikatywne
*    /    div    mod    and    shl    shr
addytywne
+   -   or   xor
relacyjne (Najniższy priorytet)
=    <>     <    >    <=    >=    in

background image

43

Nawiasy

Okrągłe 

 

 

)

przeznaczone  do  zmiany  kolejności  wykonywania 
działań. 

Podczas 

zapisu 

obliczeń 

arytmetyczno logicznych używamy wyłącznie 
nawiasów okrągłych!
Nawiasy kwadratowe

[  ]  lub  (.  .)

używane 

definicjach 

tablic 

typów 

łańcuchowych
Nawiasy klamrowe

{  }  lub (*  *)

wykorzystywane do umieszczania komentarzy

background image

44

Przykłady podstawowych  

działań arytmetycznych

-a+b
-(a+b)   lub –a-b
a+b/c
(a+b)/c
(a-b)/(c+a/(c+b/(a-b)))
a div b
a div b mod c

background image

45

Wyrażenia stałe

Abs(x)

moduł argumentu

Pred(n) wartość 

poprzedzająca x

Chr(n)

znak o numerze n

Ptr(a)

wskaźnik a

Hi(n)

Starszy bajt liczby n Round(

x)

Zaokrąglenia 
argumentu

Length(
s)

długość 

łańcucha 

tekstowego

SizeOf(
x)

Rozmiar w pamięci

Lo(n)

młodszy  bajt  liczby 
n

Succ(n) wartość następująca 

po x

Odd(n)

testowanie 
nieparzystości 
liczby 

Swap(n
)

Zamiana  młodszego 
i  starszego  bajtu 
liczby

Ord(c )

Numer  porządkowy 

w zbiorze

Trunc(x

)

Obcięcie 

części 

ułamkowej

background image

46

Podstawowe funkcje 

matematyczne

W poniższych  opisach a oznacza wyrażenie bądź zmienną

Abs(a)

wartość bezwzględna

ArcTan(a)

arcus tangens

Cos(a)

cosinus

Exp(a)

e do potęgi

Frac(a)

część ułamkowa argumentu

Int(a)

część całkowita argumentu

Ln(a)

logarytm naturalny

Pi -3.1415926....
Sin(a)

sinus

Sqr(a)

kwadrat argumentu

Sqrt(a)

Pierwiastek kwadratowy z argumentu

background image

47

Przykłady zapisu działań 

matematycznych

Sin(3*x+2)-4*Exp(Abs(3*x*x+1))
(Ln(Pi)+Sqr(x
)+Sqrt(x))/(Sqr(x)+1)
ArcTan(23
)
3*(a+b
)-3+Sqrt(a+b)
Frac (1.23

{0.23}

Abs(x+1)/(Abs(Sin(a))+2)

background image

48

Inne przydatne funkcje

Randomize

- inicjowanie generatora liczb losowych

Random(n)

-  losowanie  liczby  całkowitej  z  zakresu  od  0 

do n-1
Random - losowanie liczby rzeczywistej z zakresu od 0 do 1

UpCase(c)

- zamiana znaku na dużą literę

Inc(x)

- zwiększenie x do wartości następnej

Inc(x, n- zwiększenie x do n-tej wartości następnej
Dec(x)

- zmniejszenie x do wartości poprzedniej

Dec(x,  n)

-  zmniejszenie  x  do  n-tej  wartości 

poprzedniej

background image

49

Standardowe okna 

dialogowe

procedure ShowMessage(const Msg: string);

 {Wyświetla okienko z napisem  Msg i przyciskiem OK.}

Przykład: ShowMessage(‘Przykład użycia ShowMessage’);

function 

MessageDlg(const 

Msg: 

string; 

AType: 

TMsgDlgType;

                    AButtons:  TMsgDlgButtons;  HelpCtx:  Longint): 

Word;

{Wyświetla okienko dialogowe z napisem Msg, w okienku typu Atype (mtWarning 

–  ostrzeżenie,  mtError  –  błąd,  mtInformation  –  informacja  mtConfirmation  – 

potwierdzenie, mtCustom- użytkownika), zawierającym przyciski AButtons (mbYes, 

mbNo, mbOK, mbCancel, mbHelp, mbAbort, mbRetry, mbIgnore, mbAll), HelpCtx 

–  indeks  w  pliku  pomocy}  funkcja  zwraca  rezultat  zależny  od    wybranego  przez 

użytkownika przycisku (mrNone, mrAbort, mrYes, mrOk, mrRetry, mrNo, mrCancel, 

mrIgnore, mrAll)}

Przykład:          MessageDlg(‘Czy  chcesz  skończyć  program?’, 

mtQuestion, 

[mbYes,mbNo],0);

background image

50

Standardowe okna 

dialogowe cd.

function InputQuery(const ACaption, APrompt: 
string;       var Value: string): Boolean;

{Wyświetla okno z pytaniem do użytkownika}
Znaczenie parametrów 
ACaption – tytuł  okna,
APrompt – pytanie do użytkownika
Value – tekst zawierający odpowiedź użytkownika
Przykład
InputQuery(‘Pytanie’, ‘Podaj liczbę:’, S);

background image

51

Generowanie dźwięków

function MessageBeep(Dzwiek: Word): Boolean
{Generowanie jednego z dźwięków systemowych}
Dźwięk -numer dźwięku systemowego ($FFFF–dźwięk z głośniczka)

Przykład: MessageBeep($FFFF);

function Beep  (Freq: Word, Duration: Word) : Boolean
{Generowanie  dźwięku  o  określonej  częstotliwości  (Freq)i  czasie  trwania 
(milisekundy) (Duration)}

Przykład: Beep(2000,5000);

function PlaySound(pszSound: PChar; hmod: HMODULE; fdwSound: Word); 

{Odegranie pliku dźwiękowego – pszSound-nazwa dźwięku (w pliku lub zasobach, 

HMod 0 lub nr zasobu, fwdSound -parametry dźwięku}

Przykłady: 

PlaySound(PChar(‘Wave1.Wav’),0,SND_FILENAME+SND_ASYNC);
PlaySound(PChar(‘Wave2.Wav’),0,SND_FILENAME+SND_ASYNC+SND_L

OOP);

background image

52

Funkcje konwersji danych

IntToStr(n

)

Zamiana 

liczby 

całkowitej 

na 

odpowiadający jej tekst

StrToInt(s)

Zamiana  tekstu  na 

odpowiadającą 

mu 

liczbę całkowitą

FloatToStr
(x
)

Zamiana 

liczby 

rzeczywistej 

na 

odpowiadający jej tekst

StrToFloat 
(s
)

Zamiana  tekstu  na 

odpowiadającą 

mu 

liczbę rzeczywistą

DateToStr
(d
)

Zamiana 

daty 

na 

odpowiadający jej tekst

StrToDate 
(s
)

Zamiana  tekstu  na 

odpowiadającą 

mu 

datę

TimeToStr
(t
)

Zamiana czasu na odp. 

mu tekst

StrToTime 
(s
)

Zamiana  tekstu  na 

odpowiadający 

mu 

czas

CurrToStr(
c
)

Zamiana  liczby  typu 
currency  (waluta)  na 

odpowiadający jej tekst

StrToCurr 
(s
)

Zamiana  tekstu  na 
wartość 

typu 

Currency

HexToInt(
h
)

Zamiana 

liczby 

całkowitej  na  liczbę 

szesnastkową

IntToHex(n)

Zamiana 

liczby 

szesnastkowej 

na 

całkowitą

background image

53

Konwersja danych 

FloatToStrF, Str, Val

function 

FloatToStrF(Value: 

Extended; 

Format: 

TFloatFormat;     Precision, Digits: Integer): string;

Zamiana liczby rzeczywistej na tekst wraz z jej sformatowaniem
Format -

ffGeneral (0.0001), ffExponent (-d.ddd...E+dddd), ffFixed 

(-ddd.ddd...), 

ffNumber(-d,ddd,ddd.ddd...), 

ffCurrency

Precision  -  dokładność  konwersji  (mniej  niż  7  dla  Single,  15  dla 

Double, 18 dla 

Extended)

Digits  –  zależy  od  formatu  liczby  (najczęściej  ilość  miejsc  po 

przecinku)

procedure Str(X [: Width [: Decimals ]]; var S);

{Zamiana zmiennej liczbowej X na odpowiadający jej tekst; width – 

szerokość liczby,Decimals- ilość miejsc po przecinku}

procedure 

Val(S; 

var 

V; 

var 

Code: 

Integer);

{zamiana tekstu S na liczbę; zmienna Code informuje czy operacja 

się udała (wartość 0 jeśli tak, nr błędu jeśli nie) liczba zwracana jest 

w zmiennej podstawionej w miejsce parametru V}

background image

54

Wypisywanie tekstów i 

zmiennych oraz pobieranie 

wartości w trybie tekstowym 

Write('Jakiś  Tekst  '); -  wyświetla  tekst  na  ekranie  (kursor  zostaje  za 

ostatnim
   znakiem wyświetlanego tekstu)

Writeln('Jakiś  Tekst  '); 

-  wyświetla  tekst  na  ekranie  (kursor  zostaje 

przeniesiony
  na początek następnej linii)

Przykłady:

Writeln(wynik);                Writeln('  Jakiś  Tekst  ',  wynik);             

Writeln(wynik:2:3);
Writeln(i 
,'  --  ' , Chr(i));

Read(lista-zmiennych);

-  wczytanie listy zmiennych

Readln(lista-zmiennych);

-  wczytanie  listy  zmiennych  i  przeniesienie  do 

następnej     linii

Przykłady: 

read(abc);

 readln(a);


Document Outline