§ 3. Асноўныя алгарытмічныя канструкцыі

3.2. Лагічны тып даных

У мове праграміравання С++ для работ з умовамі вызначаны лагічны тып даных bool. Велічыні тыпу bool могуць прымаць два значэнні — false (няпраўда) і true (праўда).

Значэнні false і true атрымліваюцца ў выніку выканання аперацый параўнання над лікавымі данымі. Параўноўваць можна канстанты, пераменныя, арыфметычныя і лагічныя выразы. Для параўнання выкарыстоўваюць наступныя знакі:

Аперацыя

С++

Роўна (=) ==
Не роўна (≠) !=
Больш (>)
Менш (<)
Больш ці роўна (³) >=
Менш ці роўна (≤) <=

Лагічны выраз — выраз, які прымае адно з двух значэнняў: true або false. Лагічныя выразы можна прысвойваць пераменным тыпу bool, а таксама выводзіць іх значэнні на экран: будзе выведзена 0 для значэння true або 1 для значэння false адпаведна (прыклад 3.2).

У мове С++ любое лікавае значэнне можа ўспрымацца як лагічнае. Пры гэтым значэнні, роўныя нулю, лічуцца няпраўдай, а не роўныя нулю — праўдай.

У С++ дапушчальныя лагічныя выразы наступнага выгляду: bool = 3 <= x <= 7;. Аднак сэнс такога выразу не супадае з матэматычным. Пры выкананні праграмы кампілятар спачатку праверыць праўдзівасць умовы 3 <= x і замяніць яе на 0 або 1 у залежнасці ад таго, праўдзівая гэта ўмова ці не. Затым адбудзецца праверка таго, што атрыманае значэнне меншае за 7 або роўна 7. Па-за залежнасцю ад праўдзівасці першай часткі ўмовы вынік заўсёды будзе праўдзівым, паколькі 0 <= 7 і 1 <= 7. Таму значэнне пераменнай a заўсёды будзе праўдзівым, і яно не залежыць ад значэння пераменнай x.

Тып bool названы ў гонар англійскага матэматыка і логіка Джорджа Буля, які займаўся пытаннямі матэматычнай логікі ў XIX ст.

Прыклад 3.2. Прыклады лагічных выразаў:

Выраз

Значэнне

< 7 true
+ 2 == 8 false
abs(-5) > abs(3) true

Значэнне лагічнага выразу   >= x * x    можна вызначыць, толькі ведаючы значэнні пераменных x і y. Пры x = 2 і y = 10 значэнне выразу — true. Пры x = 10 і y = 2 – false.

Праверым праўдзівасць гэтых выразаў у праграме:

#include <iostream>

#include <cmath>

using namespace std;

int main()

{

  bool a1 = 3 < 7;

  cout << "a1=" << a1 << endl;

  bool a2 = 2 + 2 * 2 == 8;

  cout << "a2=" << a2 << endl;

  bool a3 = abs(-5) > abs(3);

  cout << "a3=" << a3 << endl;

  double x, y;

  x = 2, y = 10;

  bool a4;

  a4 = y >= x * x;

  cout << "a4=" << a4 << endl;

  x = 10; y = 2;

  a4 = y >= x * x;

  cout << "a4=" << a4 << endl;

  return 0;

}

Вынік работы праграмы:

Каманда    cout << boolalpha   дазволіць вывесці на экран значэнні true і false замест 1 і 0. Каманду дастаткова напісаць адзін раз перад першым вывадам. Калі трэба вярнуцца да вываду 1/0, то выкарыстоўваюць каманду  cout << noboolalpha.