/** Page structure tweaks for layout editor wireframe */ body#layout #main, body#layout #sidebar { padding: 0; } -->

среда, 21 декабря 2011 г.

ԳՈՐԾՈՂՈՒԹՅՈՒՆՆԵՐ


Այստեղ կդիտակենք  C++   համակարգում ներկառուցված  հա-ճախակի օգտագործվող հետևյալ տեսակի գործողությունները`
  -  թվաբանական
  -  համեմատման կամ բաղդատման
  -   տրամաբանական
  -   վերագրման
  -   ինկրեմենտ և դեկրեմենտ
  -   բիթային
  -   ձևափոխման գործողություններ
  -   sizeof  
  -  ստորակետ  
Թվաբանական գործողությունները հետևյալն են.
  +      մեկտեղանի գումարում
   -      մեկտեղանի  հանում
  +      երկտեղանի  գումարում
               -       երկտեղանի հանում
  *      բազմապատկում
  /       բաժանում
  %     ամբողջթվային բաժանման մնացորդ
Մեկտեղանի գործողությունը այն գործողությունն է, որը օգտա-գործում է մեկ օպերանդ: Երկտեղանի գործողությունը այն գործողութ-յունն է, որը օգտագործում է երկու օպերանդներ: Օրինակ`
                                               -2+5



արտահայտությունում ունենք մեկտեղանի  հանում և երկտեղանի  գու-մարում:
Եթե բաժանման գործողության երկու օպերանդները ամբողջ-թվային տիպի տվյալներ են, ապա այդ գործողությանը անվանում են  ամբողջթվային բաժանում: Ամբողջթվային բաժանման  գործողության արդյունքում ստացվում է ամբողջ թիվ, իսկ մնացած բոլոր դեպքերում ստացվում է սահող ստորակետով թիվ: Օրինակներª
9/2    //  ամբողջթվային բաժանում է և ստացվում է  4
8/9         //  ամբողջթվային բաժանում է և ստացվում է  0
8/8         //  ամբողջթվային բաժանում է և ստացվում է  1    
9.0/2.0   //  ամբողջթվային բաժանում չէ և ստացվում է  4.5
18/4.0    //  ամբողջթվային բաժանում չէ և ստացվում է  4.5
18.0/4    //  ամբողջթվային բաժանում չէ և ստացվում է  4.5
Ամբողջթվային բաժանման մնացորդի ստացման գործողութ-   յունը վերադարձնում է առաջին օպերանդը երկրորդի վրա  բաժանման մնացորդը: Գործողության երկու օպերանդները պետք է լինեն միայն ամբողջթվային տիպի (char, short, int, long): Օրինակներª
              7%3      // ստացվում է  1
              8%9      // ստացվում է  8                    
              8%8      // ստացվում է  0                    
              8%5.2    // սխալ է, երկրորդ օպերանդը ամբողջթվային չէ
Համեմատման գործողությունները հետևյալն են`
 ==                   նույնաբար հավասար                                    
 !=                    հավասար չէ
 >                     մեծ        
 <                     փոքր
 >=                   մեծ  կամ  հավասար
 <=                   փոքր կամ  հավասար    
Համեմատման գործողության արդյունքի արժեքը  bool տիպի մեծություն է, այլ կերպ ասած այն կարող է ունենալ   true կամ false արժեքներ: Եթե այդ արժեքները հանդիպում են այն տիպի ենթատեքս-տում, որտեղ  պահանջվում է ամբողջ արժեքներ, ապա  true-ն ինքնըստինքյան ձևափոխվում է 1-ի, իսկ false-ը` 0-ի: Օրինակներª
 10 > 5    // ստացվում է  true  կամ 1
 10 < 5    // ստացվում է  false  կամ 0
Տրամաբանական գործողությունները  հետևյալն են`
 &&                     տրամաբանական  ԵՎ    
 I I              տրամաբանական  ԿԱՄ
 !                         տրամաբանական  ՈՉ  
Տրամաբանական գործողության արդյունքի արժեքը bool տիպի մեծություն է:
Վերագրման գործողությունները  հետևյալն են`  
  =           վերագրել
  +=          գումարել և վերագրել
  -=           հանել  և  վերագրել
 *=           բազմապատկել և վերագրել
 /=   բաժանել և  վերագրել
             %=          հաշվել մնացորդը  և  վերագրել
Վերագրման գործողության արդյունքում օբյեկտը ստանում է նոր արժեք, իսկ հին արժեքը վերանում է: Օրինակ, եթե տրված էª

              int    i1=25, i2=128;
              float  f1=0.125;
              char  ch=’A’;
ապա կատարելով  հետևյալ վերագրումներըª
                                    i1=2856;
              f1=0.36;
              ch=’B’;
              i2=i1;
i1, i2, f1 և ch փոփոխականներն կտրվեն նոր արժեքներ: Ինչպես երևում     է բերված օրինակներից, բոլոր գործողություններում վերագրվող արժեքների տիպերը համընկնում են  օբյեկտների տիպերին:
 Եթե օբյեկտի և արժեքի տիպերը չեն համընկնում, ապա  կոմպիլյատորը փորձում է արժեքի տիպը ձևափոխել օբյեկտի տիպի և   եթե այդպիսի ձևափոխություն հնարավոր է, ապա կոմպիլյատորը անբացահայտորեն կատարում է այն: Ընդ որում, արժեքի ճշտության կորուստի դեպքում ոչ էական սխալի վերաբերյալ հաղորդագրություն է տրվում: Օրինակ`
                            i1=5.715;
հրահանգի կատարման ժամանակ սահող ստորակետով 5.715 արժեքը ձևափոխում է ամբողջթվային 5 արժեքի և այդ արժեքը վերագրում է i1 փոփոխականին:
Եթե տիպերի անբացահայտ համապատասխանեցում     հնարավոր չէ, ապա  կոմպիլյատորը սխալի մասին հաղորդագրություն է տալիս: Օրինակ, սխալ է  հետևյալ վերագրումը ª
               ch=’Hello’;
Սխալներից խուսափելու և ծրագիրը հասկանալի դարձնելու համար օգտագործում են տվյալների տիպերի բացահայտ   ձևափոխություն (տես տիպերի ձևափոխման գործողություններ կետը):
Վերագրման գործողությունը դա  հրահանգավորում է  և այն կարելի է օգտագործել բոլոր այն տեղերում, որտեղ կարելի է  օգտագործել հրահանգավորում: Օրինակª
                            a1 = (a2 = (a3 = 20) + 10 ) +5;
արտահայտությունը a3  փոփոխականի մեջ պահում է  20 արժեքը, a2  փոփոխականի մեջª  30 արժեքը, իսկ a1  փոփոխականի մեջ`   35 արժեքը:
   i+=5;
   a1*=n+3;
արտահայտությունները համապատասխանաբար համարժեք են հետևյալ արտահայտություններինª
  i=i+5;
  a1=a1*(n+3);
Վերագրման գործողությունը չի կարելի օգտագործել == գործո- ղության փոխարեն:  Օրինակª if   (a1=10)  սխալ կլինի:
ինկրեմենտ և դեկրեմենտը մեկտեղանի գործողություններ են, որոնց դեպ-քում ամբողջ կամ իրական արգումենտները համապատասխանաբար աճում կամ նվազում են մեկ միավորով: Այս գործողությունները լինում ենª
++    նախդիրային ինկրեմենտ          // օրինակª     ++a1
++    վերջդիրային ինկրեմենտ          // օրինակª     a1++
 - -      նախդիրային դեկրեմենտ         //  օրինակª    - -a1
 - -      վերջդիրային դեկրեմենտ         // օրինակª     a1- -
Օրինակներª
Եթե num փոփոխականի արժեքը 8 է, ապա
                                      num++;  կամ   ++num;
հրահանգները նրա արժեքը կդարձնեն 9: Ընդ որում, նրանք համարժեք  են հետևյալ վերագրման հրահանգինª  
             num= num+1;
Նախդիրային և վերջդիրային ինկրեմենտների միջև եղած տարբերութ-յունները կարելի է պարզել հետևյալ օրինակների միջոցովª
                                      a1=14;
// a1-ը ստանում է 15 արժեքը, իսկ հետո այն վերագրում է a2-ին
                                    a2=++a1;
//   a3-ին վերագրում է 14 , իսկ հետո  a1-ը ստանում է 15 արժեքը
                                    a3=a1++;
Բիթային գործողությունները  հետևյալն են`  
               ~             բիթային ՈՉ
              <<            ձախ  տեղաշարժ
              >>            աջ   տեղաշարժ
              &              բիթային ԵՎ
              ^               բիթային  ԲԱՑԱՌՈՂ  ԿԱՄ
              |                բիթային ԿԱՄ
              &=             բիթային ԵՎ վերագրումով
              ^=              բիթային ԲԱՑԱՌՈՂ  ԿԱՄ վերագրումով
              |=              բիթային  ԿԱՄ վերագրումով
              <<=           ձախ  տեղաշարժ վերագրումով  
              >>=           աջ   տեղաշարժ վերագրումով
Բիթային գործողությունների կատարման ժամանակ օպերանդ-ները դիտարկվում են որպես բիթերի կանոնակարգված համախումբ:      Այդ բիթերից յուրաքանչյուրը կարող է ունենալ 0 կամ 1 արժեք:      Բիթերից կազմավորված օբյեկտին անվանում են բիթային վեկտոր:
Բիթային ՈՉ(~)գործողությունը փոխում է օպերանդում պարունակ-  վող բոլոր բիթերի արժեքները:  0 արժեքը դարձնում է 1, իսկ 1 արժեքը` 0:
Ձախ  և  աջ  ( << և  >>)  տեղաշարժերի ժամանակ ձախ  օպերանդի բիթերը տեղաշարժվում են համապատասխան ուղղությամբ  աջ օպերանդում ցույց տրված քանակի դիրքով: Դուրս հրված բիթերի արժեքները կորչում են, ազատված բիթերը լրացվում են զերոներով:
Բիթային ԵՎ ( &  ) գործողության կատարման  ժամանակ համեմատվում են  ձախ  և  աջ  օպերանդների միևնույն               դրիքերում գտնվող բիթերի արժեքները: Եթե համեմատվող երկու     բիթերի   արժեքները հավասար են մեկի, ապա այդ դիրքում գտնվող բիթին   տրվում է մեկ արժեք, իսկ մնացած բոլար դեպքերում -  զերո արժեք:
Բիթային  ԲԱՑԱՌՈՂ  ԿԱՄ ( ^ ) գործողության կատարման  ժամանակ համեմատվում են  ձախ  և  աջ  օպերանդների միևնույն դրիքերում գտնվող բիթերի արժեքները: Եթե համեմատվող երկու     բիթերի արժեքները տարբեր են, ապա այդ դիրքում գտնվող բիթին  տրվում է մեկ արժեք, իսկ  եթե հավասար են`  տրվում է  զերո արժեք:
Բիթային ԿԱՄ ( | ) գործողության կատարման ժամանակ կատարվում է տրամաբանական գումարման գործողություն: Եթե համեմատվող երկու բիթերի արժեքները հավասար են զերոյի, ապա      այդ դիրքում գտնվող բիթին տրվում է զերո արժեք, իսկ մնացած բոլոր դեպքերում -  մեկ արժեք:
Եթե && կամ II գործողությունների փոխարեն սխալմամբ օգ-տագործվեն  &  կամ  I, ապա   ծրագրի կոմպիլյացիայի ժամանակ     սխալի մասին ոչ մի հաղորդագրություն չի տրվի և խնդրի լուծման  արդյունքը կլինի սխալ:
Տիպերի  ձևափոխման գործողությունները  C++ լեզվում իրականաց-   նում են երկու եղանակովª ֆունկցիոնալ և նախդիրային:
Եթե f1 փոփոխականը float տիպի է, ապա նրա արժեքը int      տիպի ձևափոխելու  և  int տիպի i1 փոփոխականին վերագրելու համար պետք է գրել հետևյալ հրահանգները`
                           i1 = int(f1);   //  ֆունկցիոնալ ձևափոխություն
             i1 =(int)f1;    //  նախդիրային ձևափոխություն
Եթե տվյալի տեսակը տրված է մեկից ավելի բառերով, ապա կա-րելի է օգտագործել միայն նախդիրային ձևափոխություններ: Օրինակª
             i2 =(unsigned int) f1;
Տվյալների հետ աշխատելիս խորհուրդ է տրվում կատարել   նրանց տիպերի բացահայտ ձևափոխությունները: Այդ դեպքում կերևա,   որ այդ գործողությունները կատարվել են իմացությամբ և կոմպիլյատո-  րի կողմից չի տրվի  ոչ էական սխալի վերաբերյալ հաղորդագրություն:
sizeof գործողությունը մեկտեղանի գործողություն  է, որը հաշ- վում  է իր օպերանդի չափը բայթերով: Այն ունի հետևյալ ընդհանուր գրելաձևերը`
                sizeof  օբյեկտ ;  
                sizeof  ( օբյեկտ ) ;  
                  sizeof  (տվյալի տեսակ ) ;    
 Ինչպես երևում է այդ գրելաձևերից, sizeof գործողության    համար որպես օպերանդ կարող են հանդես գալ փոփոխականները կամ տվյալների տեսակները: Վերջիններս միայն փակագծերի մեջ  են     գրվում: Օրինակª
                 sizeof   f1;
                 sizeof  ( f1 );
                sizeof(double),
Հետևյալ ծրագրային տողով կարելի է որոշել սեփական     համակարգիչում օգտագործվող տվյալի տեսակի չափըª
                             cout  <<  “double տվյալի չափը”
                             << sizeof(double) << “ բայթ” <<  endl;
Ստորակետ : Արտահայտությունը կարող է բաղկացած լինել մի քանի ենթաարտահայտություններից, որոնք իրարից բաժանված են ստորա-կետներով: Այդ  ենթաարտահայտությունները հաշվարկվում են ձախից  աջ: Վերջնական արդյունքը կլինի հավասար նրանցից ամենաաջի արդ-յունքին: Հետևյալ պայմանական գործողության մեջ յուրաքանչյուր պայմանին համապատասխան արդյունքը տրված է ցուցակով
(ia < ib)  ?  i1=1, d1=0.25, c1='a' : i1=2; d1=1.2,c1='b' ;
Այս  գործողության կատարման արդյունքում , եթե  ia < ib համե-մատման արդյունքը իրական է (true), օգտագործված փոփոխական-    ները կունենան  հետևյալ արժեքները`
                                         i1=1, d1=0.25, c1='a' ,
հակառակ դեպքում, եթե  ia < ib համեմատման արդյունքը կեղծ  է     (false), նրանց արժեքները կլինեն`
                                        i1=2; d1=1.2,c1='b':

Комментариев нет:

Отправить комментарий