144
PASKAL DASTURLASH TILIDA OPERATORLAR
Reja
1.
Turbo Paskal dasturlash tilida operatorlarning tasnifi.
2.
Tarmoqlanuvchi operatorlar.
3.
Takrorlanuvchi operatorlar.
Tayanch so'z va iboralar: dasturlash, dasturlash tili, operatorlar, sodda
operatorlar, chiziqli, tarmoqlanuvchi, takrorlanuvchi operatorlar, o'zlashtirish
operatori, arifmetik, mantiqiy o'zlashtirish operatori.
КИРИШ
Ҳозирги кунда жуда кўп алгоритмик тиллар мавжуд. Бу тиллар ичида
Паскаль тили универсал тиллардан бири бўлиб, бошқа тилларга қараганда
имкониятлари кенгроқ
тилдир.
Сўнги йилларда
Паскаль
тили
жуда
такомиллашиб, тобора оммалашиб бормоқда. Паскаль тилида программа тузиш
учун Турбо Паскаль ва Дельфи дастурлаш воситалари мавжуд. Бу дастурлаш
воситалари замонавий компьютер технологиясининг ҳамма талабларини ўз
ичига олган ва унда дастур тузувчи учун ҳамма қулайликлар яратилган.
Маърузада Турбо Паскаль дастурлаш тилида операторларнинг таснифи.
Тармоқланувчи ва такрорланувчи операторлар келтирилган.
1. Турбо Паскаль дастурлаш тилида операторларнинг таснифи.
Содда операторлар.
Операторларнинг бўлувчиси, содда операторлар, шартсиз ўтиш опе-
ратори, процедурани чақириш оператори, бўш оператор, ўзлаштириш
оператори, структурали оператор.
Turbo Pascal тилидаги дастурнинг асосий қисми операторлар кетма-
кетлигидан иборат, ҳар битта оператор берилганлар устида амал бажаради.
Операторларнинг бўлувчиси сифатида нуқта вергул белгиси ишлатилади. Turbo
Pascal тилидаги ҳамма операторлар икки гуруҳга бўлинади: содда ва
структурали. Таркибига бошқа операторлар кирмаган операторлар содда
145
операторлар дейилади. Бунга ўзлаштириш оператори, шартсиз ўтиш оператори,
процедурани чақириш оператори ва бўш операторлар киради. Ўзлаштириш
оператори (:=) ўнг томонда берилган ифодани бажаришни ва унинг қийматни
чап томонда турган ўзгарувчига тенглаштиради. Ифода ва ўзгарувчининг
тоифаси бир хил бўлиши керак.
Мисол:
FuneКеy := False;
Ch := ’F’;
Sum:= Х + Y;
Шартсиз ўтиш оператори (goto) "...га ўтиш" деган маънони англатади ва
у бирор оператор бажарилганидан кейин навбатдаги операторни бажаришга
эмас, балки бошқа бирор белги ёрдамида белгиланган операторни бажаришда
фойдаланилади. Эслатиб ўтамиз, белги рақам ёки ҳарф символидан иборат
бўлиши мумкин.
Мисол : GOTO 999;
GOTO END Block; Goto оператори ишлатилганда белги таъсир қиладиган жой
бу фақат шу оператор ёзилган блок бўлиши мумкин. Бошқаришни бошқа блокка
узатиш ман этилади.
Процедуранинг чақириш оператори фойдаланувчи
томонидан белгиланган процедурани ёки стандарт процедурани ишга тушириш
учун
ишлатилади.
Масалан:
СlSer;
{стандарт
процедурани
чақириш}
UnitWоrк(True); {фойдаланувчи процедурасини чақириш} Бўш оператор хеч
қандай амал бажармайди ва унинг таркибида хеч қандай символлар йўқ. Одатда
бўш оператор локал ёки глобал блокнинг охирига ўтишда ишлатилади:
LABEL Metka;
...
BEGIN
... GOTO Metka; {Блок охирига ўтиш}
... Metka: {бўш оператор Metka ёрдамида белгилаб қўйилган}
END;
Структурали операторлар қатиян белгиланган қоидалар бўйича бошқа
операторлардан тузилган операторлардир. Барча структурали операторлар уч
гуруҳга бўлинади:таркибий, шартли, қайтариладиган. Таркибий оператор бу
146
бир-биридан нуқта вергул белгиси ва BEGIN ва END оператори қавслар
ёрдамида ажратилган операторлар гуруҳидир:
BEGIN
<оператор;>
...
<оператор>
END;
Таркибий оператор дастурлаш тилининг синтаксиси рухсат берадиган
исталган қисмида жойлашиши мумкин .
Паскал тилининг операторлари
Программанинг асосий вазифаси бошланғич маълумотларни қайта ишлаб,
қўйилган масаланинг натижасини берувчи амалларни бажаришдан иборат.
Алгоритмик тилларда бирор-бир масалани ечишда маълумотлар устидаги
амалларни бажариш операторлар зиммасига юклатилади. Программалаш
тилларидаги ҳар бир оператор, маълумотларни қайта ишлаш жараёнининг
мустақил босқичи бўлиб, мантиқан якунланган ҳисобланади. Программада
ёзилган операторларни тўғри талқин қилиш учун уларни ёзиш қоидалари
(операторнинг синтаксиси) қатъий аниқланган бўлиши шарт.
Шундай қилиб, айтиш мумкинки программа бу - турли хил вазифаларни
бажарувчи ва ягона мақсадга элтувчи операторларнинг тўпламидир. Ҳар бир
оператор ; (нуқта-вергул) белгиси билан якунланади. Мавжуд программалаш
тили рухсат берган операторлардан унумли ва оқилона фойдаланиб, мукаммал
программалар яратиш дастурчининг билимига, тажрибасига ва санъатига
боғлиқдир.
Қуйида Паскал тилининг асосий операторлари билан тўлиқроқ танишиб,
улардан дастурлашда фойдаланиш йўлларини ўрганамиз.
Ўзлаштириш оператори
Одатда программа натижасини ҳосил қилиш учун жуда ҳам кўп оралиқ
ҳисоб ишларини бажаришга тўғри келади. Оралиқ натижаларни эса маълум
муддатга сақлаб туриш лозим бўлади. Бу ишларни бажариш учун тилнинг энг
асосий операторларидан бири бўлмиш - ўзлаштириш оператори ишлатилади:
147
<ўзлаштириш оператори>:=<ўзгарувчи>:=<ифода>;
Бу ерда := ўзлаштириш белгиси ҳисобланади, бу белгини = (тенглик)
белгиси билан алмаштирмаслик зарур. Ўзлаштириш операторида :=
белгисининг ўнг томонидаги <ифода> қиймати аниқланилиб, сўнг чап
томондаги ўзгарувчига ўзлаштирилади ёки бошқача қилиб айтганда, ифода
қиймати ўзгарувчи номи билан хотирада эслаб қолинади. Ўзгарувчининг
олдинги қиймати эса (агар у бўлса) йўқ бўлиб кетади.
Ўзлаштириш операторини ёзишдаги энг муҳим нарса, бу ифода ва
ўзгарувчиларнинг бир хил типли бўлишлигидир.
Ўзлаштириш белгисининг ўнг томонидаги ифоданинг натижавий типига
қараб, ўзлаштириш операторини уч хил гуруҳга ажратиш мумкин: арифметик
ўзлаштириш оператори, мантиқий ўзлаштириш оператори, белгили
ўзлаштириш оператори.
Арифметик ўзлаштириш оператори
Бутун ёки ҳақиқий типли, сонли натижа берувчи ифодани (одатда бундай
ифодани арифметик ифода деб аталади) ҳисоблаш учун арифметик ўзлаштириш
операторидан фойдаланилади. Арифметик ифодада қатнашувчи барча
ўзгарувчилар ҳақиқий ёки бутун типли бўлиши керак. Арифметик ифода-
сонлар, ўзгармаслар, ўзгарувчилар ва функциялардан ташкил топади, ҳамда +, -
, *, /, div, mod каби амаллар ёрдамида ёзилади. Арифметик амалларни
бажарилиши қуйидаги тартибда бўлади : *, /, div, mod, +, -.
Ифодани бажарилишидаги бу тартибни ўзгартириш учун кичик
қавслардан фойдаланилади. Ифоданинг қавслар ичига олиб ёзилган қисмлари
мустақил ҳолда биринчи галда бажарилади.
Санаб ўтилган арифметик амалларнинг вазифалари бизга математика
курсидан маълум. Лекин, бу рўйхатдаги div ва mod амаллари билан таниш
эмасмиз. Div – бутун бўлишни англатади, бўлинмани бутун қисми қолдирилиб,
қолдиқ ташлаб юборилади. Мисол:
7 div 2 қ 3
5 div 3 қ 1
-7 div 2 қ -3
-7 div –2 қ 3
2 div 5 қ 0
3 div 4 қ 0
148
Мod – бутун сонлар бўлинмасининг қолдиғини аниқлайди. m mod n
қиймат фақат n>0 дагина аниқланган. Агар m≥0 бўлса m mod nқm-((m div n)*n),
m<0 бўлса m mod nқm-((m div n)*n)+n, m mod n нинг натпешщ23гижаси доим
мусбат сондир. Мисол:
7 mod 2 қ 1
3 mod 5 қ 3
(-14) mod 3 қ 1
(-10) mod 5 қ 0
Мантиқий ўзлаштириш оператори
Агар ўзлаштириш операторининг чап томонидаги ўзгарувчи boolean
(мантиқий) типига тегишли бўлса, операторнинг ўнг томонида натижаси true
¸ки false бўлган мантиқий ифода бўлиши шарт.
Яъни мантиқий ифоданинг натижавий қиймати true (рост) ¸ки false
(ёлғон) бўлади.
Мантиқий ифодада амалларнинг бажарилиш тартиби қуйидагича:
1.
Not
2.
*, /, div, mod, and
3.
+,-,or
4.
қ, <, >, <қ, >қ,<>
Мантиқий ифодада ҳам амаллар кетма-кетлигини ўзгартириш учун кичик
қавслардан фойдаланилади.
Мантиқий ифодага доир мисоллар:
1.
x<2*y
2.
true
3.
not not d
4.
(x>y/2)
5.
d and (xқy) and b
6.
(C or D) and (xқy) or not B
Мантиқий ўзлаштириш операторига доир мисоллар:
149
d:қtrue;
b:қ (x>y) and (kқ0);
c:қD or B and true;
VAR Global Flag:Boolean;
FUNCTION GETSQR( x:real );
Const SQRMAX=100;
Begin
X:=x*x;
GlobalFlag:=( x>SQRMAX );
If GlobalFlag then x:=SQRMAX;
GetSQR:=x;
End;
.Муносабат амаллари ва ифодалари.
Муносабат ифодалари натижанинг рост ёки ёлғонлигини аниқлайди.
Муносабат амаллари иккита ифодани бир-бирига солиштириб, ифоданинг
қиймати рост ёки ёлғонлигини аниқлайди. Қуйидагида ШЭҲМ лар учун Pascal
тилининг муносабат амаллари келтирилган. Натижа мантиқий тоифаcида
бўлиб, True(рост) ва False (ёлон) қийматларни қабул қилади.
Муносабат амаллари
Амал
Номи
Ифода
Натижа
=
<>
>
Тенг
тенг эмас
катта
А=Б
А<>Б
А>Б
True, агарда А тенг Б бўлса
True, агарда А тенг эмас Б
True, агарда А катта Б
150
<
>=
<=
in
кичик
катта ёки
тенг
кичик ёки
тенг
алоқадoрлик
А<Б
А>=Б
А<=В
А in М
True, агарда А кичик Б
True, агарда А катта ёки тенг Б
True, агарда А кичик ёки тенг Б
True, агарда А М нинг рўйхатида
турса
Мантиқий ифодалар ва амаллар
Мантиқий (Мантиқий) ифодалар( AND, ОR, NOT,ХОR), кўрсатгични ташкил
этиш амаллари
Мантиқий (Мантиқий) ифода бажарилганидан кейинги натижа Trueёки
False бўлади. Мантиқий ифодаларнинг содда кўринишлари қуйидагича:
- мантиқий константа;
- мантиқий ўзгарувчилар;
- мантиқий тоифадаги массив элементлари;
- мантиқий функция;
- муносабат ифодалари.
Тармоқланиш буйруғи
Шартли буйруқ, шарт, жойлаштирилган буйруқлар.
Turbo Раскал тилида иккита шартли буйруқлар мавжуд: IF ва CASE. IF
шартли буйруғи, буйруқларнинг бажарилиш жараёнининг табиий ҳолатини
ўзгартирадиган энг кўп воситалардан бири. У қуйидаги кўринишлардан бирига
эга бўлиши мумкин:
IF <шарт> THEN <буйруқ1>
ELSE <буйруқ2>;
IF <шарт> THEN <буйруқ>;
Шарт- бу Мантиқий тоифадаги ифода. Биринчи ҳолатда, агар ифода қиймати
ҳақиқий бўлса, <буйруқ1>бажарилади, акс ҳолда <буйруқ2> бажарилади.
Иккинчи ҳолатда - агар ифода натижаси True бўлса, <буйруқ> бажарилади, агар
151
False бўлса - IF буйруғидан кейинги буйруқ бажарилади. IF буйруқлари
жойлаштирилган бўлиши мумкин.
Ҳозиргача келтирилган дастурларимиз чизиқли дастурлар тоифасига
киради. Улардаги буйруқлар кўрсатилган тартибда бажарилади. Бундай ҳолат
ҳар доим ҳам бизни қаноатлантиравермайди.
Кўпинча бирор мантиқий ифоданинг қийматига ("рост" ёки "ёлғон"
бўлишига) қараб, икки ёки ундан ортиқ йўналишлардан бирини танлаб олишга
тўғри келади.
Фараз қилайлик, корхона ўз ходимларига уларнинг бир ойда ишлаган
умумий иш соатларига қараб иш ҳақи тўлашга шартнома тузган бўлсин. Бу
шартномада 200 соатгача ишлаган ходимларга бир хил иш ҳақи, 200 соатдан
ортиқ ишлаган ходимларга эса 200 соатдан ортиқ ишлаган ҳар бир соати учун
икки баробар иш ҳақи тўлаш ҳам кўрсатиб ўтилган бўлсин. Ходимнинг бир
соатлик иш ҳақи haq, бир ойда ишлаган умумий иш соати ish_soati бўлсин. У
ҳолда 200 соатдан кўп ишлаган ходимларнинг маоши
* ;2
200)*
_
(
*200
:
_
haq
soati
ish
haq
haqi
ish
формула билан топилади. 200 ва ундан кам ишлаган ходимнинг иш ҳақини
ҳисоблаш учун бу формуладан фойдаланиб бўлмайди. Чунки, 200 соатдан кам
ишлаган ходим "хақдор" бўлиш ўрнига "қарздор" бўлиб қолиши ҳам мумкин. Бу
ҳолатни олдини олиш учун дастурчи икки ҳолатни ҳисобга олиши лозим. Ушбу
масала қуйидаги алгоритм ёрдамида хал қилинади: дастлаб ходимнинг ишлагагн
умумий иш соати, сўнгра
200"
_
"
soati
ish
мантиқий ифоданинг қиймати
аниқланади. Агар у "рост" бўлса, ходимнинг иш ҳақи
* ,2
200)*
_
(
*200
:
_
haq
soati
ish
haq
haqi
ish
акс ҳолда эса
soati
haq ish
haqi
ish
_
*
:
_
формула билан топилади.
Паскал тилида бундай жараёнларни ифодалаш учун тармоқланиш буйруғи
деб аталадиган буйруқ киритилган. У умумий кўринишда қуйидагича ёзилади:
if мантиқий ифода then 1-буйруқ elsе 2-буйруқ ; .
Бу буйруқни бажаришда ЭХМ дастлаб "мантиқий ифода" нинг қийматини
аниқлайди. Агар у "рост" бўлса 1-буйруқни бажаради, 2-буйруқни эса
бажармайди. Агар "ёлғон" бўлса, аксинча, яъни 2-буйруқни бажариб, 1-ни
бажармайди. (Тармоқланиш буйруғининг бажарилиш тартиби кўрсатилган блок-
152
схемага эътибор беринг.)
Шундан кейингина if дан кейинги буйруқни бажаришга ўтади. Тармоқланиш
буйруғидан фойдаланиб юқоридаги жараённи қуйидагича ёзиш мумкин:
if
200
_
soati
ish
then
*2
200)*
_
(
*200
:
_
haq
soati
ish
haq
haqi
ish
else
soati
haq ish
haqi
ish
_
*
:
_
;
Агар
эхтиёж
бўлса,
тармоқланиш
буйруғининг
қисқартирилган
вариантидан ҳам фойдаланиш мумкин. У умумий ҳолда қуйидагича ёзилади:
if мантиқий ифода then 1-буйруқ; .
Бу ердаги 1-буйруқ мантиқий ифода "рост" қиймат олган ҳолдагина бажарилади.
Акс ҳолда хеч бир амал бажарилмайди ва if дан кейинги буйруққа ўтилади. (Бу
буйруққа мос келадиган блок-схемага каранг.)
Юқоридаги жараён тармоқланиш буйруғининг тўлиқсиз варианти
ёрдамида қуйидагича ифодаланиши мумкин:
soati
haq ish
haqi
ish
_
*
:
_
;
if
200
_
soati
ish
then
*2
200)*
_
(
*200
:
_
haq
soati
ish
haq
haqi
ish
;
Бу буйруқлар кетма-кетлигини қуйидагича изохлаш мумкин: Ходимларнинг иш
хақлари ҳамма учун бир хил, яъни
soati
haq ish
haqi
ish
_
*
:
_
формула билан
ҳисобланади. Қўшимча иш ҳақини эса фақат бир ойда 200 соатдан ортиқ умумий
иш соатига эга бўлган ходимларгина олади.
Икки ва ундан ортиқ мулохазалардан "аnd", "оr" ва "nоt" мантиқий
амалларидан фойдаланиб ифодалар тузиш мумкин. Бунда бир мулохаза қавслар
ичида кўрсатилиши шарт. Қуйидаги мисолларга эътибор беринг:
1-мисол: if
( 2)
x
and
x 5
then write (‘x soni [2, 5] ga tegishli’)
153
else write (‘x soni [2, 5] ga tegishli emas’);
2- мисол: if (‘bugun yakshanba’) or (‘ish vaqti tugadi’)
then writeln (‘dam oling‘) else writeln (‘ish bilan shugullaning‘);
3- мисол: if not
( 2)
x
then write (‘x soni 2 dan katta emas’)
else write (‘x soni 2 dan katta’); .
Юқоридаги барча мулохазаларни жамлаган ҳолда, иш ҳақини ҳисоблаш
дастурини қуйидагича ёзиш мумкин:
program maosh;
var ish_haqi, ish_soati, haq : integer;
begin
writeln(‘hodim nesha soat ishladi ?’); readln(ish_soati);
writeln(‘bir soat ushun qansha haq oladi ?’); readln(haq);
* ;2
200)*
_
(
*200
:
_
200
_
;
*
_
:
_
haq
ish soati
haq
haqi
ish
then
ish soati
if
ish soati haq
haqi
ish
writeln(‘hodim ‘,ish_haqi,’ sum oladi’);
end.
Юқоридаги дастур учун ЭХМ қуйидаги натижаларни беради: (?
белгисидан кейин клавиатура орқали киритилган маълумотлар келтирилмоқда.)
hodim nesha soat ishladi ? 150
bir soat ushun qansha haq oladi? 100
hodim 150000 sum oladi
hodim nesha soat ishladi ? 300
bir soat ushun qansha haq oladi? 100
hodim 400000 sum oladi
Кўпинча then ёки else хизматчи сўзларидан кейинги буйруқлар таркибида
бошка if буйруғи ҳам келиши мумкин. Буни ички тармоқланиш дейилади. Ички
154
тармоқланишда ички if ўзидан аввал келган ва энг яқин турган then (else) га
таъалуқли бўлади. Қуйидаги дастурга эътибор беринг;
program masala;
var x: integer;
s: string;
begin
writeln(‘x ning qiymatini kiriting‘); readln(x);
s : ’x soni 2 dan kichik’);
if x>2 then if x< 5 then s : ’x soni [2, 5] oraliqqa tegishli’
else s : ’x soni 5 dan katta’;
writeln(s)
end.
Бу дастур учун ЭХМ қуйдаги натижаларни беради:
x ning qiymatini kiriting 4
x soni [2, 5] oraliqqa tegishli
x ning qiymatini kiriting 7
x soni 5 dan katta
x ning qiymatini kiriting 1
x soni 2 dan kichik
Агар ички тармоқланишлар кўп бўлса, уларни ёзиш ва ўқиш ишларида
дастурчи учун бир мунча ноқулайликлар келиб чиқиши мумкин. Буни олдини
олиш учун ПАСКАЛ тилига танлаш буйруғи киритилган.
Тамғалар. Шартсиз ўтиш буйруғи.
Айрим бир буйруқларни бошқаларидан бирор белги билан ажратиб
қўйилиши мумкин. Ана шу белгини тамға деб атаймиз.
Тамға сифатида бутун сон ёки лотин алифбосидаги ҳарфларни олиш
155
мумкин. Тамғадан сўнг икки нукта (:) белгиси қўйилади. Масалан:
10: x : 2;
‘s’: d : x*x-4*a*c;
Шундан кейин дастурнинг бирор еридан туриб, шу буйруққа мурожаат
қилиш мумкин. Бунинг учун шартсиз ўтиш буйруғи бўлган goto дан
фойдаланамиз. Бу буйруқ умумий ҳолда
goto тамға ;
кўринишида ёзилади.
Шартсиз ўтиш буйруғи goto дан кейин кўрсатилган тамғали буйруқка
ўтилади.
Дастурда қатнашган барча буйруқлар одатда дастурнинг иккинчи сатрида,
label хизматчи сўзидан кейин келтирилади.
Аввалги бўлимда иш ҳақини ҳисоблаш дастури битта ходим учун ёзилган
эди. Ана шу корхонада 3 та ходим ишлаб, улар 1 дан 3 гача тартиб рақамлари
билан
тартибланган
бўлсин.
Дастурдаги
амаллар
кетма-кетлигини
ходимларнинг ҳаммаси учун бажарилишини таъминлайдиган дастур қуйидагича
ёзилади:
Program utish;
label 2;
var ish_haqi, ish_soati, haq, tab_nom : integer;
begin
tab_nom : 1;
2 : writeln(‘hodim nesha soat ishladi ?’); readln(ish_soati);
writeln(‘bir soat ushun qansha haq oladi ?’); readln(haq);
* ;2
200)*
_
(
*200
:
_
200
_
;
*
_
:
_
haq
ish soati
haq
haqi
ish
then
ish soati
if
ish soati haq
haqi
ish
writeln(tab_nom, ‘-hodim ‘,ish_haqi,’ sum oladi’);
tab_nom : tab_nom 1;
if tab_nom< 3 then goto 2;
156
end.
Бу дастур учун ЭХМ қуйдаги натижаларни беради:
hodim nesha soat ishladi ? 150
bir soat ushun qansha haq oladi? 50
1-hodim 7500 sum oladi
hodim nesha soat ishladi ? 300
bir soat ushun qansha haq oladi? 100
2-hodim 40000 sum oladi
hodim nesha soat ishladi ? 200
bir soat ushun qansha haq oladi? 125
3-hodim 25000 sum oladi
Бу дастур ёрдамида худди шундай тарзда ихтиёрий сондаги ходимларнинг
иш хақларини ҳисоблашни ташкил қилиш мумкин.
Бунинг учун дастурдаги 3 сонини ходимлар сони билан алмаштириш лозим
бўлади.
Case танлаш буйруғи.
Case буйруғи бир нечта имкониятлардан бирини танлаб олиш учун
мўлжалланган буйруқ бўлиб, ички тармоқланишларни чиройли ва тушунарли
қилиб ёзиш мақсадида фойдаланилиши мумкин. Бу буйруқ умумий кўринишда
қуйидагича ёзилади:
Case ифода of
1-тамға: 1-буйруқ;
..... ...... ...... ..... .....
n-тамға: n-буйруқ ;
end;
Case ва of хизматчи сўзлари орасида кўрсатилган ифодани селектор, яъни
танлаш ифодаси деб аталади. Буйруқ қуйидагича бажарилади: дастлаб
157
селекторнинг қиймати ҳисобланади. Сўнгра ана шу қийматга мос келадиган
тамға қидириб топилади ва шу тамға остидаги буйруқлар кетма-кетлиги
бажарилади. Агар изланган тамға топилмаса, Case га тааллукли end буйруғидан
кейин кўрсатилган буйруқлар кетма-кетлиги бажарилади.
Масала: Спортчи мусобақада А - ўринни эгаллади. У қандай медал
олганини аниқланг.
Program sport;
label 1,2,3,4;
var a: integer; s : string[16];
begin
write(‘sportchi nechanchi urinn oldi?’);
readln(a);
s : ’sportchi medal olmagan’
case a of
1: s : ’oltin’;
2: s : ’kumush’;
3: s : ’bronza’;
end;
writeln(s)
end.
Бу дастур учун ЭХМ қуйдаги натижаларни беради:
sportchi nechanchi urinn oldi? 5
sportchi m,edal olmagan
sportchi nechanchi urinn oldi?1
oltin
Селектор ифоданинг қиймати real бўлмаган ихтиёрий скаляр типда
158
бўлиши мумкин. Тамғалар ҳам ана шу типга оид бўлиб, битта тамға битта case..of
буйруғида бир неча марта кетмаслиги керак.
Танлаш буйруғидан одатда бирон бир оралиққа тушмайдиган қийматлар
учун маълум бир буйруқларни бажарилиши ёки битта ифоданинг қиймати бир
нечта маълумотлардан бирига боғлиқ бўлган ҳолатларда фойдаланилса яхши
самара беради.
Program baho;
label 0,1,2,3,4,5;
var a: integer; s: string[9];
begin
write(‘bahoni kiriting‘);
readln(a);
case a of
5: s : ’alo‘;
4: s : ’yaxshi’
3: s : 'qoniqarli' ;
0,1,2: s : 'yomon' ;
end;
wriieln(s)
end.
ЭХМ бу дастур учун қуйдаги натижаларни беради:
Bahoni kiritng 4
yahshi
Bahoni kiritjng 1
уomon
Фармойишлар
1. Ўзлаштириш фармойиши.
Ўзлаштириш фармойишида ўзгарувчидан сўнг «:=» белгиси ёзилади.
159
Бичими: x:=a; бунда x идентификатор, a ифода, хусусий ҳолда сон
бўлиши мумкин.
Масалан, SUM:=SQR(x)+2.
2. Ўқиш фармойишилари.
Клавиатурадан киритилган маълумотларни ўзгарувчиларга ўзлаштириш
учун read ўқиш фармойиши ишлатилади. Бичими READ (x1[, x2[, …]]). Бунда
қавс ичидаги ўзгарувчилар иҳтиёрий сонда бўлиб, улар бир бирлари билан
вергул ёрдамида ажратиб ёзилади. Киритилаётгн ўзгарувчилар қиймати алоҳида
сатрларга ёзилиши керак бўлса фармойиш номига ln қўшимчаси қўшиб ёзилади.
Масалан, Readln(x).
3. Чиқариш (ёзиш) фармойиши.
Бичими: write(s1, s2, s3,…,sn); Бунда write фармойиш номи, s1, s2, s3,…,sn
ойнага чиқарилиши керак бўлган ифодалар. Натижага қўшимча равишда матн
кўринишидаги ахборотни чиқариш учун «'» апостроф белгисидан фойдаланиш
мумкин.
Мисол.
a
y
x
x
x
z
ln
1
sin
cos
ни ҳисоблаш дастури тузилсин.
program sodda_dastur;
var x,y,z,a:real;
begin
read (x,y,z,a);
z:=(cos(x)+sin(x))/(abs(xy)+1)ln(a);
writeln('z=',z)
end.
4. Шартли ўтиш фармойиши.
Шартли ўтиш фармойишининг бажарилиши жараёнида берилган
шартнинг чин ёки ёлғонлигига қараб дастурнинг юажарилиш кетмакетлиги
ўзгартирилади. Ушбу фармойишнинг икки хил кўриниши мавжуд:
1) if e1 e2 then A else B;
2) if e1 e2 then A;
Бунда if (агар) e1 e2 муносабатни текшириш фармойиши, e1 e2
текширилаётган шарт, then (бўлса) ва else (акс ҳолда) ёрдамчи сўзлар, A
дастурнинг текширилаётган шарт чин бўлганда бажарилиши керак бўлган
қисми, B эса ёлғон бўлганда бажарилиши керак бўлган қисми. Иккинчи
кўринишда else ёрдамчи сўз тушириб қолдирилган. Бу ҳолда текширилаётган
160
шарт бажарилса A фармойиш бажарилиб, кейинги фармойишни бажаришга
ўтади, акс ҳолда кейинги фармойишни бажаришга тўғридан тўғри ўтади.
Шартли
ўтиш
фармойиши
ҳам
шартнинг
бажарилиши
ёки
бажарилмаслигига қараб бир марта бажарилади.
Мисол.
1
2
1
sin
2
x
агар
x
a
x
агар
a
x
y
ни ҳисоблаш дастури тузилсин.
program shart;
var a,x,y:real;
begin
read (a,x);
if x>1 then y:=2sin(x)+a else y:=2ax;
writeln('y=',y);
end.
Turbo Pascal муҳитининг менюлар системаси.
Turbo Pascal менюсининг энг асосийлари билан танишиб чиқайлик.
Ойнанинг юқори қисмида жойлашган бош меню қуйидагилардан иборат:
File файллар билан ишлаш;
Edit таҳрирлаш;
Search қидириш;
Run бажариш;
Compile компиляция;
Debug отладка;
Tools инструментал воситалар;
Options параметрлар;
Window ойна;
Help ёрдам.
Ушбу менюлар ҳар бирининг ўз қисм менюлари бўлиб, улар шу меню
функциялари ишини бажаради.
Мураккаб (қўшма) фармойишлар.
Мураккаб фармойиш ёки қўшма фармойиш begin ва end фармойишлари
орасида ёзилади. Бу фармойиш битта фармойишнинг ўрнига бир нечта
фармойиш ёзиш имконини беради.
Масалан if фармойишидаги then (else) ёрдамчи сўзидан кейин фақат битта
фармойиш бажарилади. Агар бу ёрдамчи сўзлардан кейин бир нечта
161
фармойишлар бажарилиши керак бўлса, у ҳолда бу фармойишлар then (ёки else)
сўзидан кейин begin ва end орасига олиб ёзилади.
Бичими:
begin
<1фармойиш>;
<2фармойиш>;
. . .
<nфармойиш>;
end;
Мисол. Квадрат тенглама илдизларини ҳисоблаш дастури тузилсин.
program kvt;
var a,b,c,d,x1,x2: real; s: string[20];
begin
write ('a,b,c=');
readln(a,b,c);
d:=sqr(b)4ac;
if d<0 then begin s:='Илдизлари мавжуд эмас'; writeln(s); end
else begin if d=0 then
begin
s:='ягона илдизга эга: ';
x1:=b/(2a); writeln(s, 'x=',x1);
end
else begin
s:='иккита илдизи мавжуд:'; writeln(s);
x1:=(b+sqrt(d))/(2a);
x2:=(bsqrt(d))/(2a);
writeln('x1=',x1,', x2=',x2);
end;
end;
end.
Белги.
Турбо Паскальда ҳам ҳар бир фармойиш ўз номерига эга бўлиши мумкин.
Турбо Паскальдаги бундай номерлар белгилар деб юритилади. Белгилар бутун
сонлар кўринишида 0 дан 9999 гача рақамлар ёрдамида ёки лотин харфлари
билан бошланган иҳтиёрий сўзлар (масалан one, two, two2, …) орқали ёзилади.