Արտահայտություններ
!!! Այս գլուխը վերանվանել «Գործողություններ» ?? !!!
Նախորդ գլուխներում արդեն տեսանք, որ C++ լեզուն թույլ է տալիս գործողությունների օգնությամբ իրար կապել փոփոխականները, հաստատունները և ֆունկցիաների կանչերը՝ կազմելով մի որևէ արժեքի հաշվարկման շղթա։ Այդպիսի շղթային անվանում են արտահայտություն։ Օրինակ, երկրաչափությունից հիշենք կոսինուսների բանաձևը․ եթե տրված են եռանկյան և կողերը և նրանցով կազմված անկյունը, ապա եռանկյան երրորդ կողմը կարող ենք որոշել հետևյալ բանաձևով․
C++ լեզվով այս բանաձևը գրառվում է համարյա նույնությամբ, որտեղ օգտագործված են բազմապատկման *
, գումարման +
, հանման -
գործողությունները, ինչպես նաև ստանդարտ գրադարանի cmath
ֆայլում հայտարարված sqrt
(քառակուսի արմատ) և cos
ֆունկցիաները․
auto dist = sqrt(a * a + b * b - 2 * a * b * cos(phi));
Թվաբանական արտահայտություններ կազմելու համար C++ լեզվում, բացի վերը նշվածներից, կան նաև բաժանման /
, մնացորդի որոշման %
երկտեղանի (բինար) գործողությունները։ Իսկ ամբողջաթիվ փոփոխականի արժեքը մեկով ավելացնելու կամ պակասեցնելու համար առկա են համապատասխանաբար ++
և --
մեկտեղանի (ունար) գործողությունները։ Սրանք կարող են կիրառվել ինչպես նախածանցային (prefix), այնպես էլ ետածանցային (postfix) գրառումներով։ Օրինակ․ !!! Արժե՞ կենտրոնանալ սրանց վրա։ !!
int x = 12;
++x;
std::cout << x; // կարտածվի 13
x--;
std::cout << x; // կարտածվի 13
Նախածանցային և ետածանցային կիրառությունների տարբերությունը նրանումն է, որ դրանցից առաջինը վերադարձնում է փոփոխականի արդեն փոփոխված արժեքը, իսկ երկրորդը՝ նախկին արժեքը։ Օրինակ, հետևյալ կոդի կատարումից հետո k
֊ն կդառնա 7
և e
֊ն կստանա այդ նոր արժեքը․
int k = 6;
int e = ++k; // k = 7, e = 7
Մյուս դեպքում, թեև k
֊ն նորից ստանում է 7
արժեքը, բայց ++
գործողությունը վերադարձնում է նրա հին՝ 6
արժեքը։
int k = 6;
int e = k++; // k = 7, e = 6
Համեմատման արտահայտություններ կազմելու համար C++ լեզվում առկա են բոլոր վեց գործողությունները․ հավասար է՝ ==
, հավասար չէ՝ !=
, մեծ է՝ >
, մեծ է կամ հավասար՝ >=
, փոքր է՝ <
և փոքր է կամ հավասար՝ <=
։ Սրանք բոլորն էլ վերադարձնում են բուլյան (bool
) արժեք։ Օրինակ, հետևյալ վերագրման աջ կողմի արտահայտությունը հաշվարկվում է true
արժեքի, եթե կետը գտնվում է երկրորդ կոորդինատական քառորդում։
bool c0 = x0 < 0 && y0 >= 0;
Այստեղ օգտագործված &&
գործողությունը կոնյունկցիան է՝ տրամաբանական ԵՎ֊ը։ Տրամաբանական արժեքների հետ թույլատրելի են նաև դիզյունկցիայի՝ ԿԱՄ և ժխտման՝ ՈՉ գործողությունները, որոնք գրառվում են համապատասխանաբար ||
և !
սիմվոլներով։ Ենթադրենք, օրինակ, տրված են a
, b
և c
իրական թվերը և պահանջվում է պարզել, թե արդյո՞ք դրանք կարող են լինել ուղղանկյուն եռանկյան կողմեր։ Այլ կերպ ասած, պետք է ստուգել Պյութագորասի թեորեմի երեք հնարավոր դեպքերը․
bool pythagorean_triple( double a, double b, double c )
{
bool c0 = a * a == b * b + c * c;
bool c1 = b * b == a * a + c * c;
bool c2 = c * c == b * b + a * a;
return c0 || c1 || c2;
}
Այս իրականացումը թեև ընթեռնելի է, սակայն դիզյունկցիայի օգտագործման տեսակետից այնքան էլ գրագետ չէ։ Բանն այն է, որ ||
օպերատորն իր աջ արգումենտը հաշվում է միայն այն ժամանակ, երբ ձախ արգումենտի հաշվարկման արդյունքում ստացել է false
արժեք։ Այսինքն, եթե , , ..., արտահայտություններն իրար են կապված ||
օպերատորով, ապա ոչ թե հաշվվում են բոլոր արտահայտությունները և հետո հաշվվում է դրանց դիզյունկցիան, այլ հաշվարկը կանգ է առնում այն առաջին ֊ի վրա, որի արդյունքը true
է։
!! խմբագրել այս երկու պարբերությունները !!
Նման մոտեցում է ցուցաբերվում նաև կոնյունկցիայի &&
գործողության համար։ Որպեսզի արտահայտությունը հաշվարկվի true
արժեքի, անհրաժեշտ է, որ նրանում մասնակցող բոլոր ֊երը հաշվարկվեն true
արժեքի։ Այսինքն, եթե մի որևէ հաշվարկվել է false
արժեքի, ապա շղթայի մյուս արտահայտությունները հաշվարկն անիմաստ է։
Բացի թվաբանական, համեմատման ու տրամաբանական գործողություններից C++ լեզուն առաջարկում է նաև բիթային գործողություններ․ &
— ԵՎ, |
— ԿԱՄ, ^
— Բացառող ԿԱՄ, և ~
— Լրացում։ Բոլոր այս գործողություններն աշխատում են իրենց արգումենտների առանձին բիթերի հետ։ Օրինակ, գիտենք, որ կենտ թվի երկուական ներկայացման վերջին բիթը միշտ 1
է։ Դա հաշվի առնելով կարող ենք գրել տրված ամբողջ թվի կենտ լինելը ստուգող isOdd
ֆունկցիան։
bool isOdd( unsigned int num )
{
return 1 == (num & 1);
}
Ինչպես նաև բիթերի տեղաշարժերի <<
— Ձախ տեղաշարժ և >>
— Աջ տեղաշարժ գործողությունները։