План:
      Оператор if
      Оператор if/else
      Условна операция 
      Операции за сравнения
      Проверка за валидност на входните данни
      Оператор while
      Обработка на входна редица
      Булев тип данни
    
** Оператор if (условен оператор)
        
       Операторът if се състои от 2 части - условие и
      тяло. if е съставен оператор.
 Пример:
    
if (area < 0)
cout << "Error: Negative area.\n";
[блок-схема]
    
Когато условието е вярно (текущата стойност на променливата area е отрицателно число), се
      изпълнява тялото на оператора if, т.е оператора за
      изходен поток 
        cout << "Error: Negative area.\n";
 Ако условието е нарушено (не е вярно: текущата стойност на
      променливата area е нeотрицателно
      число), се изпълнява следващия оператор (след оператора if).
      
      Тялото на if може да бъде друг оператор или блок.
      Блок е група от оператори, оградени с къдрави (големи) скоби {}.
 Пример:
    
if (area < 0)
{ cout << "Error: Negative area.\n";
return 1;
}
Блокът замества (или се разглежда като) един оператор.
    
// area1.cpp
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ double area;
cout << "Please enter the area of a square: ";
cin >> area;
if (area < 0)
{
cout << "Error: Negative area.\n";
return 1;
}
/* now we know that area is >= 0 */
double length = sqrt(area);
cout << "The side length of the square is " << length << "\n";
return 0;
}
| nkirov@CITB107 % c++ -o area area1.cpp nkirov@CITB107 % ./area Please enter the area of a square: 25 The side length of the square is 5 nkirov@CITB107 % ./area Please enter the area of a square: -100 Error: Negative area.  | 
        
** Оператор if/else (условен
        оператор)
        
       Операторът if/else се състои от условие и две
      алтернативи. if/else е съставен оператор.
    
 Пример:
    
if (area >= 0)
cout << "The side length is " << sqrt(area) << "\n";
else
cout << "Error: Negative area.\n";
Всяка алтернатива е оператор или блок.
 [блок-схема]
    
Операторът if/else е по-добър избор в сравнение с два if оператора с допълващи се условия:
if (area >= 0) /* complementary conditions */
cout << "The side length is " << sqrt(area) << "\n";
if (area < 0) /* complementary conditions */
cout << "Error: Negative area.\n";
// area2.cpp
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ double area;
cout << "Please enter the area of a square: ";
cin >> area;
if (area >= 0)
cout << "The side length is " << sqrt(area) << "\n";
else
cout <<"Error: Negative area.\n";
return 0;
}
| nkirov@CITB107 % c++ area2.cpp nkirov@CITB107 % ./a.out Please enter the area of a square: 25 The side length is 5 nkirov@CITB107 % ./a.out Please enter the area of a square: -1 Error: Negative area.  | 
        
** Условна операция (операция за избор, selection operator)
        
       Триаргументна операция, състояща се от условие (първи
      аргумент) и два израза (втори и трети аргумент).
 Пример:
    
x >= 0 ? x : -x
Ако условието или първият аргумент, (x >=
          0) е вярно,  стойността на операцията е
      вторият аргумент (x), ако не е
      вярно - третият аргумент (-x).
      
      Операторът, съставен от операция присвояване и една условна
      операция:
    
y = x >= 0 ? x : -x;
y = ((x >= 0) ? x : -x);
е еквивалентен на следния if/else
      оператор:
    
if (x >= 0) y = x;
else y = -x;
и присвоява на променливата  y
      абсолютната стойност на променливата x.
    
|     
            Израз (expression), операция (operator) | 
           Оператор (statement) | 
        
            x >= 0 ? x : -x  | 
          
            if (x >= 0) y = x;  | 
        
            y = x  | 
          
            y = x;  | 
        
            -b + sqrt(d)  | 
          
            -b + sqrt(d);  | 
        
** Операции за сравнения (relational operators)
        
       C и С++ имат 6 операции за  сравнения, като стойността
      на операцията е true или false.
    
| 
             | 
          
             | 
          
             | 
          
             | 
        
| 
             | 
          
             | 
          
             | 
            | 
        
| 
             | 
          
             равно на  | 
          
             | 
           Внимавайте да не напишете =>  Двата знака са в реда на произнасяне.  | 
        
| 
             | 
          
             | 
          
             | 
            | 
        
| 
             | 
          
             равно на  | 
          
             | 
           Внимавайте да не
                напишете =<  Двата знака са в реда на произнасяне.  | 
        
| 
             | 
          
             | 
          
             | 
          Не бъркайте с = , което е операция присвояване! | 
| 
             | 
          
             (различно от)  | 
          
             | 
          Все едно ! минава през (задрасква) знака
              за равенство. | 
        
Сравняването на числа в С++ е по правилата в математиката.
      Аргументна зависимост на операциите за сравнения за числа тип int и тип double.
    
| c | a | r | 
| t | r | 
          u | c | k | 
| c | a | r | 
| c | a | r | g | o | 
| c | a | r | g | o | 
| c | a | t | h | o | d | e | 
"car" < "truck", "car" < "cargo", 
      "cargo" <= "cathode" са изрази със стойност true.
          "car" == "truck", "car" > "cargo",  "cargo"
          >= "cathode" са изрази със стойност
          false. 
0-31 are control codes, for example "/n" (newline) has ASCII code 10.
  32:   33:! 
            34:"  35:#  36:$  37:%  38:& 
            39:'  40:(  41:)
          42:*  43:+  44:,  45:-  46:. 
          47:/  48:0  49:1  50:2  51:3 
          52:4  53:5  54:6  55:7  56:8 
          57:9  58::  59:;  60:<  61:= 
          62:>  63:?  64:@  65:A 
          66:B  67:C  68:D  69:E  70:F  71:G
        
          72:H  73:I  74:J  75:K  76:L 
          77:M  78:N  79:O  80:P  81:Q 
          82:R  83:S  84:T  85:U  86:V 
          87:W  88:X  89:Y  90:Z  91:[ 
          92:\  93:]  94:^  95:_  96:` 
          97:a  98:b  99:c 100:d 101:e 
         102:f 103:g 104:h 105:i 106:j 107:k 108:l 109:m 110:n
          111:o 
         112:p 113:q 114:r 115:s 116:t 117:u 118:v 119:w 120:x
          121:y 
         122:z 123:{ 124:| 125:} 126:~ 127:  128:Ђ 129:Ѓ
          130:‚ 131:ѓ 
         132:„ 133:… 134:† 135:‡ 136:€ 137:‰ 138:Љ 139:‹ 140:Њ
          141:Ќ 
         142:Ћ 143:Џ 144:ђ 145:‘ 146:’ 147:“ 148:” 149:• 150:–
          151:— 
         152:� 153:™ 154:љ 155:› 156:њ 157:ќ 158:ћ 159:џ
          160:  161:Ў 
         162:ў 163:Ј 164:¤ 165:Ґ 166:¦ 167:§ 168:Ё 169:© 170:Є
          171:« 
         172:¬ 173:  174:® 175:Ї 176:° 177:± 178:І 179:і
          180:ґ 181:µ 
         182:¶ 183:· 184:ё 185:№ 186:є 187:» 188:ј 189:Ѕ 190:ѕ
          191:ї 
         192:А 193:Б 194:В 195:Г 196:Д 197:Е 198:Ж 199:З 200:И
          201:Й 
         202:К 203:Л 204:М 205:Н 206:О 207:П 208:Р 209:С 210:Т
          211:У 
         212:Ф 213:Х 214:Ц 215:Ч 216:Ш 217:Щ 218:Ъ 219:Ы 220:Ь
          221:Э 
         222:Ю 223:Я 224:а 225:б 226:в 227:г 228:д 229:е 230:ж
          231:з 
         232:и 233:й 234:к 235:л 236:м 237:н 238:о 239:п 240:р
          241:с 
         242:т 243:у 244:ф 245:х 246:ц 247:ч 248:ш 249:щ 250:ъ
          251:ы 
         252:ь 253:э 254:ю 255: 
Първите 32 символа (от 0 до 31) са управляващи символи и нямат
      стандартен графичен образ. 
      Символите от 127 до 255 са различни в различните езици. 
    
 Мястото на българската азбука е различно в зависимост от типа на
      кодирането - в таблицата е даден стандарта Windows-1251.
      
    
** Проверка за валидност на входните данни
        
       Проверка на входа е приложение на оператора if,
      което проверява дали потребителят е дал разумен вход.
 Пример: Оператор за прочитане на число, което става
      стойност на променлива.
    
double area;
cin >> area;
Ако потребителят напише "five" и натисне <return>,
      то обектът cin ще премине в състояние грешка (fail)
      и променливата area ще остане с непроменена (вероятно
      неопределена) стойност.
      
        Пример:
    
// area3.cpp
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ double area;
cout << "Please enter the area of a square: ";
cin >> area;
if (cin.fail()) // проверка на състоянието на cin
{
cout << "Error: Bad input\n";
return 1;
}
if (area < 0)
{
cout << "Error: Negative area.\n";
return 1;
}
cout << "The side length is " << sqrt(area) << "\n";
return 0;
}
| nkirov@CITB107 % c++ area3.cpp nkirov@CITB107 % ./a.out Please enter the area of a square: four Error: Bad input nkirov@CITB107 % ./a.out Please enter the area of a square: -25 Error: Negative area. nkirov@CITB107 % ./a.out Please enter the area of a square: 25 The side length is 5  | 
        
Други стратегии за проверка на състоянието на cin.
 Пример:
    
if (cin)
/* the stream did not fail */
else
/* the stream failed */
Операцията входен поток (с първи аргумент cin) cin >> x има стойност cin. Това позволява да се комбинират няколко операции >> в един израз (верижка).
 Пример:
    
cin >> x >> y /* което означава (cin >> x) >> y */подобно на
a + b + c /* което означава (a + b) + c */или
Изразът cin >> x може да
      се използва като условие в оператора if,
      като състояние "нормално" е true,
      а състояние "грешка" е false.
      
        Пример:
    
if (cin >> x) cout << x;
    ** Оператор while (оператор за цикъл)
        
       Пример: 
      Внасяме 10000 лв. в банкова сметка с 6% год. лихва при месечно
      олихвяване. След колко години сумата в сметката ще се удвои? 
    
| Месец | Сума | Пресмятане | 
| 0 | 10000.00 | |
| 1 | 10050.00 | =10000.00*1.005 | 
| 2 | 10100.25 | =10050.00*1.005 | 
| 3 | 10150.75 | =10100.25*1.005 | 
| 4 | 10201.51 | =10150.75*1.005 | 
| .. | ... | ... | 
1. Започваме с таблицата:
      (int
          month = 0; double balance = 10000;)
    
| Месец | Сума | 
| 0 | 10000 | 
while (balance < 2 * initial_balance)
{ balance = balance * ( 1 + rate / 100);
month++;
}
[блок-схема]
    
// doublinv.cpp
#include <iostream>
using namespace std;
int main()
{
double rate = 5;
double initial_balance = 10000;
double balance = initial_balance;
int month = 0;
while (balance < 2 * initial_balance)
{
balance = balance * (1 + rate / 100 / 12);
month++;
}
int years = month/12;
cout << "The investment doubled after "
<< years << " years.\n";
return 0;
}
| nkirov@CITB107 % c++ doublinv.cpp nkirov@CITB107 % ./a.out The investment doubled after 15 years. nkirov@CITB107 %  | 
        
| nkirov@CITB107 % c++ sentinel.cpp nkirov@CITB107 % ./a.out Enter a salary, -1 to finish: 1200 Enter a salary, -1 to finish: 3450 Enter a salary, -1 to finish: 2900 Enter a salary, -1 to finish: 3400 Enter a salary, -1 to finish: -1 Average salary: 2737.5 nkirov@CITB107 %  | 
        
// maxtemp.cpp
#include <iostream>
using namespace std;
int main()
{ double next;
double highest;
cout << "Please enter the temperature values:\n";
if (cin >> next) highest = next;
else
{
cout << "No data!\n";
return 1;
}
while (cin >> next)
if (next > highest) highest = next;
cout << "The highest temperature is " << highest << "\n";
return 0;
}
| nkirov@CITB107 % c++ maxtemp.cpp nkirov@CITB107 % ./a.out Please enter the temperature values: 23 -2 9 0 The highest temperature is 23  | 
        
** Булев тип данни
        
       Тип данни bool - булев или логически тип,
      съдържа две константи - true и false.
      
      Стойност на булева променлива е едната от тези две стойности. 
    
 Пример:
    
bool more = true;
while (more)
{ cin >> next;
if (cin.fail()) more = false;
else
{
// process next
}
}
Стойността на всяка операция за сравнение е от булев тип (и е true
      или false).
      Условията в операторите if и while са изрази
      със стойност true или false.
 Пример:
    
int k = 5;
bool positive = (k > 0); // променливата има стойност true
positive = (k == 0); // променливата има стойност false
Не пишете (лош стил на програмиране):
еквивалентно (добър стил на програмиране):while(more == false) /* don't */
while(more != true) /* don't */
while(!more) /* OK */
while(more) /* OK */