Операторҳои шарти. Ташкили барномаҳои шохавӣ

Ба дигарон равон намоед

Операторҳои шарти (операторҳои интихоб, операторҳои шо­хави) ба гуруҳи операторҳои идоракунанда дохил мешаванд. Онҳо имконият медиҳанд, ки иҷрокунии оператори (ё маҷмуи операторҳои) муайян фақат дар ҳолати дурустии ягон ифодаи шарти (мантиқи) гузаронида шавад ё иҷрокунии яке аз опе- раторҳо аз байни якчанд операторҳо вобаста ба қимати ягон ифода гузаронида шавад.

Ду шаклҳои асосии операторҳои шарти мавҷуд аст: операто­ри шарти (if…else) ва оператори интихоб (switch). Ҳар яке аз ин операторҳо барои интихоби шохаи иҷрошавии барнома исти- фода бурда мешаванд. Умуман, конструксияҳои шохави яке аз се конструксияҳои асосии алгоритмии ба ҳисоб мераванд.

Оператори шартии if…else. Синтаксиси ин оператор чунин аст:

if (ифодаи_шартӣ) оператори_1; else оператори_2;}

Дар ин ҷо, ифодаи_шартй бояд доими ё тағйирёбандаи адади бошад. Агар қимати он ғайринули бошад, онгоҳ оператори_1 иҷро мешавад. Дар акси ҳол оператори_2 иҷро карда меша- вад. Ба сифати операторҳо эълонкуни ё муайянкуниро истифо- да бурдан мумкин нест. Вале, ба ҷои онҳо метавонанд опера- торҳои таркибии ё блокҳои истифода шаванд. Масалан:

if (x > 0) {x = -x; x *= 2;} else {int i = 2; x *= i;}

Ҳангоми ба ҷои операторҳо истифода бурдани блокҳо (яъне, операторҳои таркибии бо эълонкунии ва муайянкунии) бояд дар назар дошт, ки тағйирёбандаҳои дар блок эълоншуда ё муайян- шуда берун аз блок мавҷуд нестанд. Масалан, порчаи барномаи зерин нодуруст мебошад

if (j > 0) {int i; i = 2 * j;} else i = -j;

чунки тағйирёбандаи i дар блок элон ва муайян гардидааст, ва берун аз он мавҷуд нест.

Инчунин, имконияти истифодаи шакли кутоҳи оператори шарти мавҷуд аст. Дар ин ҳолат else ва оператори_2 дар син- таксиси оператори шарти иштирок намекунанд ва ҳангоми ба сифр баробар будани қимати ифодаи_шартй ягон амал иҷро кар­да намешавад:

if (a < 0) a = -a;

Дар навбати худ, оператори_1 ва оператори_2 метавонанд оператори шарти бошанд. Ин имконият медиҳад, ки пайдарпа- ии дилхоҳи операторҳои шартии дохили ҳам буда ташкил карда шавад. Дар ин пайдарпау ҳар яке аз операторҳои шарти мета­вонанд шакли пурра ё кутоҳ (бидуни else) дошта бошанд.

Дар ин ҳолат метавонад хатогии мувофиқгузории if ва else шавад. Мувофиқи синтаксиси забон, дар назар дошта мешавад, ки ҳангоми дохили якдигар будани операторҳои шарти ҳар як else ба if-и наздиктарини пеш аз вай омада тааллуқ дорад.

Ба сифати мисоли истифодабарии оператори шарти, мисоли зеринро дида мебароем.

Масъала. Барномаи ёфтани максимуми се адади бутуни додашударо тартиб диҳед.

Ҳал.

//max3.cpp

#include <iostream>

using namespace std;

int main()

{

int a, b, c, max;

cout << «Адади якумро дохил кунед «; cin >> a;

cout << «Адади дуюмро дохил кунед «; cin >> b;

cout << «Адади сеюмро дохил кунед cin >> c;

if (a < b)

if (b < c) max = c;

else max = b;

else

if (a < c) max = c;

else max = a;

cout << «Адади калонтарин: «<< max <<«\n»; return 0;

}

Оператори интихоби switch. Конструксияи оператори интихоби аз якчанд (ду ва зиёда) шохаҳо иборат аст. Операто­ри интихоб вобаста ба қимати ифодаи калиди имконияти иҷро- шавии яке аз шохаҳоро фароҳам меоварад. Фарқияти асосии оператори интихоб аз оператори шарти дар он аст, ки қимати ифодаи калиди доимии мантиқи набуда, доимии адади аст.

Синтаксиси оператори интихоб чунин аст:

switch (ифодаи_калидй)

{

case ифодаи_1: операторҳои_1;

case ифодаи_2: операторҳои_2;

case ифодаи_п: операторҳои_п; default: операторҳо;

}

Конструксияи идоракунии switch иҷрокуниро ба он опе- раторҳое, ки бо case нишон дода шудаанд медиҳад, ки қима- ти ифодаи он бо қимати ифодаи калиди баробар аст. Қимати ифодаи калиди бояд ададии бутун бошад (дар акси ҳол он ба ин намуд оварда мешавад). Дар як оператори интихоб ҳамаи қиматҳои ифодаҳои ифодаи_1, ифодаи_2, …, ифодаи_п бояд қи- матҳои гуногуни навъашон якхела дошта бошанд. Дилхоҳ опе- раторҳое, ки дар дохили қавси фигурави баъди конструксияи

switch(…) омадааст, метавонад бо ёрии як ё якчанд нишо- наҳои

case ифода:

нишон дода шаванд.

Агар қимати ифодаи калиди ба ягон аз қиматҳои ифодаи_1, ифодаи_2, …, ифодаи_п баробар набошад, он гоҳ идоракуни ба операторҳое, ки баъди default: нишон дода шудаанд, дода ме- шавад. Дар ҳар як оператори интихоб на зиёда аз як нишонаи default бояд иштирок кунад. Агар нишонаи default иштирок накунад, он гоҳ дар ҳолати нобаробарии қимати ифодаи_калиди бо қиматҳои ифодаи_1, ифодаи_2, …, ифодаи_п ягон амал иҷро карда намешавад.

Худи нишонаҳои case ифода: ва default: пайдарпаии иҷрои операторҳоро тағйир намедиҳанд. Яъне, агар қимати ифодаи_калидй ба ягон қимати ифодаи баъди case нишон до­да шуда баробар шавад, онгоҳ ҳамаи операторҳое, ки баъди ин нишона навишта шудаанд (то охири блоки switch), иҷро карда мешаванд. Ин пайдарпаии иҷрои операторҳоро бо ёрии опера­тори break метавон тағйир дод. Бо ёрии оператори break амали баромад аз конструксияи switch иҷро карда мешавад. Барно- мае, ки мисоли истифодабарии оператори интихобро нишон ме- диҳад, дида мебароем.

//switchl.cpp — номи ракамхое ток, ки аз раками //   додашуда хурд нестанд

#include <iostream>

using namespace std;

int main()

{

int ic;

cout << «^Раками дилхохро дохил кунед: «;

cin >> ic;

switch (ic) {

case0:case1:cout<< «як, ”; 
case2:case3:cout<< ”се, «; 
case4:case5:cout<< «панч, «; 
case6:case7:cout<< «хафт, «; 
case8:case9:cout<< «нух.»; 
    break;//Баромад азswitch
  default:cout<< «Хатоги! Инракам нест!»;
cout <<«\n»;     
return0;      

}

Оператори break дар мисоли болои барои баромадан аз кон- струксияи switch баъди чопкунии рақами калонтарини тоқ гузошта шудааст. Дар ҳолати истифода набурдани оператори break, оператори баъди нишонаи default: навишта шуда низ иҷро мешуд, ки иҷроишаш ба шарти масъала мувофиқ нест. Дар ҳолати навиштани оператори break пас аз чопи номи ҳар як рақам, барнома танҳо номи як рақами тоқро ба чоп мебарорад.

Маводҳои ҳамсон