1
Wykład XI
Podstawy programowania w
Object Pascalu
Podstawy informatyki
Semestr I Transport
Semestr II Elektrotechnika
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 .
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.
,
, 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.
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
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.
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
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
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.
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: !,
@, # ,$, %, ,^, &, *, <, >, ?, ...
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
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, -1234, 012, $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+02, 98E12, 0, 0.0, 0E0, +0.0E-0, 0.E+00
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’
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)
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
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.
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 „.”
17
Struktura projektu -
przykład
program Nazwa_Projektu;
{deklaracje modułów}
{część opisowa}
begin
{blok programu}
end.
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.
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.
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 „.”
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.
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;
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;
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;
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.
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;
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.
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.
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
w
poprzednim slajdzie).
Poprawa czytelności programu.
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;
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.
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;
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;
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.
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.
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.
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
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.
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
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
41
Operatory arytmetyczne
Dodawania
+
Odejmowania
-
Mnożenia
*
Dzielenia
div
(całkowite) /
(rzeczywiste)
Reszty z dzielenia mod
42
Priorytety operatorów
jednoargumentowe (najwyższy priorytet)
+ - @ not
multiplikatywne
* / div mod and shl shr
addytywne
+ - or xor
relacyjne (Najniższy priorytet)
= <> < > <= >= in
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
w
definicjach
tablic
i
typów
łańcuchowych
Nawiasy klamrowe
{ } lub (* *)
wykorzystywane do umieszczania komentarzy
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
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
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
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)
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
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);
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);
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);
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ą
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}
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(a, b, c);
readln(a);