6-§. PASKALNING BA’ZI STANDART FUNKSIYALARI VA PROTSEDURALARI
Paskal dasturlash tili translyatoriga butun va haqiqiy turdagi miqdorlarda aniqlangan (Sistem moduliga) standart funksiyalar kiritilgan bo‘lib, ulardan ko‘p qo‘llanadiganlari quyidagilar:
Funksiya nomi
Argument turi
Qiymat turi
Izoh
Matematik funksiyalar
ABS(X)
butun/haqiqiy
butun/haqiqiy
X ning absolyut qiymati
(moduli) – |X|
SIN(X)
butun/haqiqiy
haqiqiy
X ning sinusi (radian o‘.b.) – sinX
COS(X)
butun/haqiqiy
haqiqiy
X ning kosinusi (radian o‘.b.) – cosX
ARCTAN(X)
butun/haqiqiy
haqiqiy
X ning arktangensi – arctgX
SQRT(X)
butun/haqiqiy
haqiqiy
X ning kvadrat ildizi – X (X 0)
SQR(X)
butun/haqiqiy
butun/haqiqiy
X ning kvadrati – X2
EXP(X)
butun/haqiqiy
haqiqiy
eX (e = 2. 718282. . . )
LN(X)
butun/haqiqiy
haqiqiy
X ning natural logarifmi (X > 0)
FRAC(X)
butun/haqiqiy
haqiqiy
X ning kasr qismi {X}
INT(X)
butun/haqiqiy
haqiqiy
X ning butun qismi [X]
RANDOM
-
haqiqiy
[0, 1) oraliqdagi tasodifiy son
RANDOM(X)
Word
Word
0..(X–1) oraliqdagi tasodifiy son
SWAP(X)
2 baytli butun
2 baytli butun
X ning baytlari o‘rnini almashtiradi
O‘zgaruvchilar turini o‘zgartiruvchi funksiyalar
TRUNC(X)
haqiqiy
LongInt
X ning butun qismi
ROUND(X)
haqiqiy
LongInt
X ni yaxlitlaydi
ODD(X)
butun
mantiqiy
X – toq son bo‘lsa natijasi TRUE
CHR(X)
byte
Char
X ning o‘nlik ASCII kodiga mos belgi
HI(X)
butun
byte
X ning eng yuqori bayti
LO(X)
butun
byte
X ning eng quyi bayti
Bu funksiyalardan CHR(X) avval ko‘rilgan ORD(X) funksiyasiga nisbatan qisman teskari vazifani bajaradi. Funksiyalar qiymatlarini quyidagi misollar orqali ko‘rish mumkin:
Funksiya
Qiymati
Funksiya
Qiymati
ABS(–5)
5
ABS(–4.9)
4.9000000000E+00
ABS(5)
5
ABS(4.9)
4.9000000000E+00
SQR(4)
16
SQR(2.5)
6.2500000000E+00
SQR(–4)
16
SQR(0.0)
0.0000000000E+00
SQR(0)
0
SQRT(16)
4.0000000000E+00
SQRT(0.16)
4.0000000000E–01
SIN(0)
0.0000000000E+00
SIN(1)
8.4147098481E–01
TRUNC(5.3)
5
TRUNC(–5.3)
–5
INT(5.3)
5.0000000000E+00
INT(5)
5.0000000000E+00
INT(–5.3)
–5.0000000000E+00
FRAC(5.3)
3.0000000000E–01
FRAC(–5.3)
–3.0000000000E–01
FRAC(5)
0.0000000000E+00
ROUND(5.49)
5
ROUND(5.5)
6
ROUND(–5.49)
–5
ROUND(–5.5)
–6
ODD(–5)
TRUE
ODD(5)
TRUE
ODD(4)
FALSE
ODD(–4)
FALSE
ODD(0)
FALSE
CHR(65)
‘A‘
CHR(97)
‘a‘
ORD(‘a‘)
97
ORD(‘A‘)
65
HI(255)
0
LO(255)
255
HI(256)
1
LO(256)
255
HI(65280)
255
LO(65280)
0
SWAP(32897)
33152
SWAP(256)
1
Paskal dasturlash tili translyatoriga sodda turdagi miqdorlarda aniqlangan (Sistem modulidagi) standart funksiyalar kiritilgan bo‘lib, ulardan ba’zilari quyidagilar:
Funksiya nomi
Argument turi
Qiymat turi
Izoh
HIGH(X)
butun/oraliqli
butun
X ga mos turning eng katta qiymati
LOW(X)
butun/oraliqli
butun
X ga mos turning eng kichik qiymati
UPCASE(X)
Char
Char
X ni yuqori registrga o‘tkazadi
Bu funksiyalar qiymatlarini quyidagi misollar orqali ko‘rish mumkin:
Argument X ning turi
Funksiya
Qiymati
Funksiya
Qiymati
BYTE
HIGH(X)
255
LOW(X)
0
INTEGER
HIGH(X)
32767
LOW(X)
–32768
WORD
HIGH(X)
65535
LOW(X)
0
LONGINT
HIGH(X)
2147483647
LOW(X)
–2147483648
ORALIQLI:
‘A‘..‘150‘
HIGH(X)
‘150‘
LOW(X)
‘A‘
CHAR:
X=‘a‘ yoki X=‘A‘
UPCASE(‘a‘)
‘A‘
UPCASE(‘A‘)
‘A‘
Dastur translyatori ta’minotiga aniq bir amallarni bajarishga mo‘ljallangan protseduralar kiritilgan bo‘lib, ular standart protseduralar deyiladi. Ularning sodda turlar bilan ishlaydigan ba’zilari quyidagi jadvalda keltirilgan.
Nomi
Argument turi
Qiymat turi
Izoh
Matematik protseduralar
INC(X)
butun
butun
X ni qiymatini 1 ga oshiradi (X=X+1)
INC(X, N)
butun
butun
X ni qiymatini 1 ga oshiradi (X=X+N)
DEC(X)
butun
butun
X ni qiymatini 1 ga kamaytiradi (X=X–1)
DEC(X, N)
butun
butun
X ni qiymatini N ga kamaytiradi (X=X–N)
7-§. O‘ZLASHTIRISH OPERATORI
Paskal dasturlash tili, odatda, tavsiflangan o‘zgaruvchilar uchun xotiradan turga mos joy ajratadi va shu turga mos boshlang‘ich qiymatlarni yozib qo‘yadi:
O‘zgaruvchi turi
Boshlang‘ich qiymat
O‘zgaruvchi turi
Boshlang‘ich qiymat
barcha butun sonli
0
barcha haqiqiy sonli
0.0000000000E+00
char
‘ ‘ (probel)
boolean
FALSE
string
‘‘ (bo‘sh satr)
string[7]
‘‘ (bo‘sh satr)
Miqdorlar ustida bajariladigan amallar natijalarini dastur ishlashi davomida kompyuter xotirasida saqlab turish uchun o‘zlashtirish operatori qo‘llanadi.
O‘zlashtirish operatori o‘zgaruvchilarga qiymat berish uchun ishlatiladi va u := belgi orqali ifodalanadi. O‘zlashtirish operatorning umumiy ko‘rinishi quyidagicha:
o‘zgaruvchi := ifoda;
Bu operator bajarilganda quyidagicha ishlar bajariladi:
ifoda qiymati hisoblanadi;
ifodaning qiymati o‘zgaruvchiga o‘zlashtiriladi, ya’ni xotiraning o‘zgaruvchi uchun ajratilgan qismida (o‘zgaruvchining “eski” qiymati o‘chib ketib) hisoblangan ifodaning qiymati yoziladi.
Quyidagi misollarda a, b va m nomli har xil turidagi o‘zgaruvchilarning qiymati qanday o‘zgarishi yaqqol ko‘rinadi.
var a, b, m: byte; begin
:= 8; {a ning qiymati 8 ga teng bo‘ldi}
:= a*5; {b ning qiymati a*5=8*5= 40 ga teng bo‘ldi}
b := b+10; {endi b ning qiymati b+10= 40+10= 50 ga teng bo‘ladi} m:=m*b; {m ning boshlang‘ich qiymati berilmagani uchun 0 deb olinadi, demak, 0*50=0, ya’ni m ning qiymati 0 teng bo‘ladi}
end.
var a: byte; b: word; m: integer; begin
:= 8; {a ning qiymati 8 ga teng bo‘ldi}
:= a*5000; {b ning qiymati a*500=8*500= 40000 ga teng bo‘ldi, shuning uchun word turida tavsiflangan}
m := 20000–b; {m ning qiymati 20000–b = 20000–40000 = –20000 ga teng bo‘ladi, shuning uchun word turida tavsiflangan} end.
var a: char; b, m: string; begin
:= ‘8’; {a ning qiymati ‘8’ ga teng bo‘ldi}
:= a+a; {b ning qiymati a+a=’8’+’8’= ‘88’ ga teng bo‘ldi,
shuning uchun string turida tavsiflangan}
b := b+’A’; {endi b ning qiymati b+’A’= ‘88’+’A’= ‘88A’ ga teng bo‘ladi} m:=m+b+a+’!’; {m ning boshlang‘ich qiymati berilmagani uchun ‘’ (bo‘sh) deb olinadi, demak, m+b+a+’!’=’’+’88A’+’8’+’!’=’88A8!’, ya’ni m ning qiymati ’88A8!’}
end.
var a: word; b: real; m: integer; begin
:= 500; {a ning qiymati 500 ga teng bo‘ldi}
:= a/500; {bo‘lish amali natijasi doimo haqiqiy son, shuning uchun
b ning qiymati a/500=500/500= 0.1000000000E+1 ga teng
bo‘ladi, ya’ni real turda}
m := a mod 7–a div 2 ; {m ning qiymati a mod 7–a div 2 =
=500 mod 7–500 div 2= 3–250= –247 ga teng, shuning uchun integer turida tavsiflangan} end.
var a: word; b, m: boolean; begin a := 500; {a ning qiymati 500 ga teng bo‘ldi} a := a+1; {a ning qiymati 501 ga teng bo‘ldi} b := TRUE; { b ning qiymati TRUE ga teng bo‘ldi} m :=NOT(b and FALSE); {m = NOT(b and FALSE)=
=NOT(TRUE and FALSE) =
= NOT(FALSE) = TRUE}
m:= (500>=a) OR m; {m = (500>=a) OR m = (500 >= 501) OR TRUE=
=FALSE OR TRUE = TRUE}
end.
Paskal dasturlash tilida ifodalar amallar yordamida bog‘langan o‘zgarmaslar, o‘zgaruvchilar va funksiyalardan tashkil topadi. Algebraik ifodalar bir satrda yoziladi, ya’ni satrdan pastga tushirib yoki yuqoriga ko‘tarib yozish mumkin emas. Masalan, 3ab2 ifoda Paskalda 3*a*sqr(b) yoki 3*a*b*b kabi, ba2ifoda a/sqr(b) yoki a/(b*b) kabi yoziladi.
Ifodalarni yozishda amallarni bajarish tartibini ko‘rsatish uchun faqat oddiy qavslar ishlatiladi. Qavs ichidagi amallarni bajarish chapdan o‘ngga qarab, matematikada qabul qilingan tartibni saqlangan holda ketma-ket amalga oshiriladi:
funksiyalar qiymatlari hisoblanadi; ko‘paytirish yoki bo‘lish amali bajariladi; qo‘shish yoki ayirish amali bajariladi.
Masalan, ab arifmetik ifodani Paskaldagi yozilishi(a+b)/c kabi bo‘lib, uni c
hisoblashda avval qavs ichidagi amal, ya’ni a+b bajariladi, so‘ngra natija cga bo‘linadi. Amallar bajarilish tartibi ham qavslar yordamida tartiblanadi: a2 b2 ifodani Paskalda sqrt(sqr(a) – sqr(b)) kabi, |x + tgx| ifoda abs(x + sin(x)/cos(x)) ko‘rinishida yoziladi.
Albatta, ikkita arifmetik amal ketma-ket kelganda ifodani qavs bilan yozish mumkin. Masalan: 5*(–1) yoki a+(–b).
Ba’zi hollarda Paskal dasturlash tilida yozilgan ifodani odatdagi matematik ko‘rinishda yozish talab etiladi. Masalan, Paskal dasturlash tilida yozilgan 0.5*(sin(x)+cos(x)) ifoda matematik ko‘rinishda quyidagicha bo‘ladi: