§ 3. Асноўныя алгарытмічныя канструкцыі
3.3. Састаўныя ўмовы
Для лагічных пераменных у С++ вызначаны лагічныя аперацыі !, &&, ||, якія адпавядаюць аперацыям НЕ, І, АБО, што выконваюцца над выказваннямі. Лагічныя выразы, у якіх разам з простымі ўмовамі (параўнаннямі) выкарыстоўваюцца лагічныя аперацыі, называюцца састаўнымі ўмовамі. Прывядзём табліцу праўдзівасці для лагічных аперацый.
У лагічных выразах могуць сустракацца як арыфметычныя, так і лагічныя аперацыі. Парадак выканання аперацый вызначаецца іх прыярытэтам [1]: 1. !; 2. *, /, %; 3/ +, –; 4. <, >, <=, >= 5. ==, !=; 6. &&; 7. ||. Аперацыі з аднолькавым прыярытэтам выконваюцца па парадку, злева направа. Для змянення парадку выканання аперацый ужываюць дужкі (прыклады 3.3 і 3.4). Пры складанні праграм часта трэба будаваць адмаўленні складаным лагічным выразам. Для гэтага карысна выкарыстоўваць тоеснасці, вядомыя з алгебры логікі (прыклад 3.5) і наступную табліцу:
Прыклад 3.6. Напісаць праграму, якая выдасць на экран значэнне true або false ў залежнасці ад таго, ці знаходзіцца лік b паміж лікамі a і c. Этапы выканання задання I. Зыходныя даныя: пераменныя a, b, c (лікі, якія ўводзяцца). II. Вынікі: rez (true або false). III. Алгарытм рашэння задачы. 1. Увод зыходных даных. 2.1.Ці правільная няроўнасць: а < b < c. Гэтай няроўнасці адпавядае лагічны выраз: а < b && b < с. Прысвоім пераменнай r1 значэнне гэтага выразу. 3. Вывад выніку. IV. Апісанне пераменных: a, b, c – int, r1, r2, rez – bool.[1] Обратите внимание, что приоритет операций отличается от того, который принят в Pascal (http://informatika8.adu.by/#fif2-2). |
Прыклад 3.3. Вызначэнне парадку дзеянняў для выразу: a || c < b && d Першым выконваецца параўнанне c і b, затым лагічная аперацыя &&, потым — ||. Прыклад 3.4. Разгледзім выраз: (a < b) && (c < d) Тут дужкі вызначаюць прыярытэт выканання аперацый: г. зн. спачатку павінны выканацца параўнанні, а затым —лагічная аперацыя &&. Аднак у С++ аперацыі параўнання валодаюць больш высокім прыярытэтам, чым лагічныя аперацыі (у адрозненне ад Pascal), таму прыведзены вышэй запіс эквівалентны: a < b && c < d Прыклад 3.5. Пабудова адмаўленняў:
Разгледзім выраз !a > b з пераменнымі а і b тыпу int. Тут аперацыя ! належыць да пераменнай a. Паколькі цэлыя могуць разглядацца як лагічныя, то адмаўленнем любога ліку, акрамя нуля, будзет 0, адмаўленнем нуля будзе 1. Затым атрыманы вынік (0 або 1) зраўнуецца з лікам b. Для адмаўлення параўнання выраз трэба запісаць так: !(a > b). У мове С++ выкарыстоўваюцца значкі «&» і «|». Гэтымі значкамі абазначаюцца бітавыя аперацыі над цэлымі лікамі. Значок «&» адпавядае аперацыі and (І), якая праводзіцца над двайковымі разрадамі ліку, а значок «|» — аперацыі or (АБО). Акрамя гэтых аперацый, над бітамі ліку можна выконваць аперацыі «~» not (інверсія) і «^» xor (выключальнае АБО, складанне па модулі 2). Прыклад 3.6. V. Праграма:
VI. Тэсціраванне. Запусціць праграму і ўвесці значэнні а = 5, b = 0, c = –5. Вынік: Запусціць праграму і ўвесці значэнні a = –2, b = –7, с = 5. Вынік: VII. Аналіз вынікаў. Для поўнага тэсціравання праграмы трэба праверыць усе 6 магчымых выпадкаў узаемнага размяшчэння a, b, c. У праграміраванні на С++ могуць выкарыстоўвацца дыграфы (англ. digraphs) — паслядоўнасці з двух або больш сімвалаў, якія кампілятар успрымае як адзін (або больш сімвалаў). Яны створаны і выкарыстоўваюцца для ўводу сімвалаў, якія адсутнічаюць на клавіятуры або ў кадзіроўцы. Да дыграфаў залічваюць словы and і or, эквівалентныя && і ||.
|