Function Fact (k: Integer): Integer; Var P,i: Integer; Begin P:=1; For i:=1 to k do P:=P*I; Fact:=P; End; Begin Read(n,m); l:=n-m; ncm:=Fact(n)/Fact(m)/Fact(l); Write(‘ncm=’,ncm); End. Misol 2. Quyidagi hisoblashni protsedurani ishlatgan holda dastursini tuzing.
.
Program Fun1; Var a,b,z,c,d,t1,t2,t3: Real; Procedure Th(Var x,r: Real); Var c: Real; Begin c:=exp(2.0*x); r:=(c-1)/(c+1); End; Begin Read(a,b); th(a,t1); c:=a-b; th(c,t2); d:=Sqr(a)-Sqr(b); th(d,t3); z:=(t1+Sqr(t2))/Sqr(t3); Write(‘z=’,z:10:3); End. Oldindan e’lon qilish Bizga ikki protsedura A va B berilgan bo’lib A protsedura B protseduraga murojaat qilsin va A ta’rifi B ta’rifidan oldin kelsin. Masalan:
Procedure A (i : integer);
begin
V (i);
Writeln(i);
end;
Procedure V (var j : integer) ;
begin
j:=j*2;
end;
Bunday ta’rif xatolikka olib keladi. CHunki A protsedura xali ta’riflanmagan protseduraga murojaat qilmokda. Bu holda B protsedurani quyidagicha oldindan e’lon kilish lozim:
Procedure V (var j : integer); Forward;
Procedure A (i : integer);
begin
V (i);
Writeln(i);
end;
Procedure V (var j : integer) ;
begin
j:=j*2;
end;
Oldindan e’lon qilishda protsedura tanasi standart direktiva Forward bilan almashtiriladi.
Belgi va qatorlar bilan ishlash maxsus funksiyalari Paskal tilida bir qancha maxsus protsedura va funksiyalar mavjud bo’lib, ular quyidagi guruhlarga bo’linadi:
-qatorni qayta ishlash;
-fayllar bilan ishlash;
-dinamik o’zgaruvchilar uchun xotirani boshqarish;
-arifmetik funksiyalar;
-ekran bilan ishlash.
Ularning ayrimlarini ko’rib chiqamiz:
Halt- dasturni bajarishdan to’xtatish;
Odd(i)- I-toq bo’lsa “True” aks holda “False” qiymat oladi;
Edit- bajarilayotgan blokdan chiqish;
Random- 0 dan 1 gacha bo’lgan sonni tasoddifan olish;
Int(x)- sonning butun qismini olish;
Frac(x)- sonning kasr qismini olish;
Round(x)- berilgan sonni yaxlitlab butun olish;
GotoXY(x,y)- kursorni ko’rsatilgan joyga qo’yish;
ClrScr- ekranni tozalab, kursorni ekran boshiga qo’yish;
Trunc- argumentning butun qismi:
Str(I;Var S:String)- raqamni simvolga o’tkazish (I-ifoda yoki o’zgaruvchi);
Val(S:String; Var P;ko:Integer)- simvolni raqamga o’tkazish (P-o’zgaruvchi);
Length (S:String)- qator uzunligini aniqlash.
Pos(st1,st) - qatordagi qator qismi holatini aniqlash.
Misol: st:=’Toshkent’; st1:=’kent’; p:=pos(st1,st);
Javob: p=4. Agar izlanayotgan qator qism qatorda yo’q bo’lsa qiymat nulga teng bo’ladi.
Copy(st,m,n) - qatordan fragment kesib oladi.
Misol: st:=’Toshkent’; p:=Copy(st,4,4);
Javob: p=’kent’.
Delete(st,m,n) - qatordan fragment kesib olib tashlaydi.
Misol: st:=’Toshkent’; p:=Delete(st,4,4);
Javob: p=’Tosh’.
Modullar Turbo Paskal sistemasida juda ko’p maxsus tayyor protsedura va funksiyalar mavjudki ular har qaysi o’z vazifasiga ega bo’lib unga biblioteka modullari deyiladi. Har bir biblioteka funksiya va protseduralardan tashkil topgan bo’lib ma’lum bir turdagi masalani yechishga muljallangan.
Modul deb protsedura va funksiyaning alohida kompilyatsiya qilinib maxsus .tpu kengaytmali fayl shaklidagi ifodalangan dastursiga aytiladi. Moduldan ixtiyoriy dastur ichida foydalanish mumkin. Moduldan foydalanish ya’ni uni aktivlashtirish uchun dasturning bosh qismida quyidagilarni keltirish zarur.