Розгалужені процеси, оператори їх організації в програмі.

Логічні дані мовою Delphi

В повсякденному житті умова зазвичай формулюється в вигляді питання, на яке можна відповісти ТАК чи НІ. Наприклад:

♠  Величина опору дорівнює нулю?

♠  Сума товару більше 300 грн?

♠  Значення змінної х не перевищує 3,5?

В програмі Delphi умова – це логічний вираз (тип Boolean), який може приймати значення  True (істина, або так) або False (похибка, або ні).

З логічними константами True (істина) або False (похибка) ми стикались визначаючи деякі властивості малюнка: Image1.Visible:=True (або False) – малюнок (Image) видимий (Visible) може мати значення True (так) або False (ні). Також для властивості Image1.Proportional привласнювали значення True – малюнок зменшити пропорційно виділеній області, False – залишити не зменшеним. Логічні значення мають і інші властивості майже для всіх компонентів.

1

Наприклад, компонент CheckBox – 2  використовується в вікні програми, щоб прапорцем помітити певну властивість або режим. Якщо при виконанні програми користувач поставить прапорець, то значення властивості Checked прийме значення  True, при відсутності прапорця – CheckBox1.Checked має значення False.

Простий логічний вираз може мати вигляд співвідношення величин на знаки ³, £, <, =, >, ¹. На мові Delphi не існує символів ³, £, ¹, бо їх не існує на клавіатурі, тому в логічних виразах їх аналогами є комбінації: >=, < =, < >. Для поєднання кількох виразів в один використовуються логічні операції and (також), or (або), not (не). Розглянемо логічні висловлювання, які можуть бути умовою розгалуження розрахунків, і їх подання на мові Delphi:

1)  Для дійсного xÎ[-2; 5], i  x¹0 – на мові Delphi:  (x>=-2) and (x<=5) and (x< >0);

2)  Для цілого z ³20 кратного 3 – на мові Delphi:  (z>=20) and (z  mod  3 = 0);

3)  Для дійсного xÏ[-2; 5] – на мові Delphi:  (x>5) or (x<-2).

При записі операнди, поєднані знаком порівняння, повинні бути одного типу.

Якщо в вираз входить кілька з вказаних операцій послідовно, то їх виконання має такий пріоритет: в першу чергу виконується інверсія, потім кон’юнкція, і останньою – диз’юнкція. При записі складних логічних умов треба враховувати те, що логічні оператори мають більш високий пріоритет, ніж оператори порівняння, тому операції порівняння треба брати в дужки, наприклад:  (Summa > 100) and (Day = 7).

Розгалужені процеси

Часто при розрахунках виникають ситуації, коли подальші дії виконуються по різним правилам, формулам залежно від того, чи виконуються певні співвідношення величин. Наприклад, розглянемо програму, що обслуговує клієнтів банку через банкомати. Якщо клієнт визначає суму для зняття більшу ніж залишок на рахунку, то він отримує відповідь «Недостатньо коштів», якщо визначена сума меньша, ніж сума на рахунку, відбудеться видача суми і перерахування залишку.

Для реалізації розгалуження на мові Delphi існує оператор розгалуження:

3

Розгалуження може мати повну (а) і неповну форму (б).

4

Команда з повним розгалуженням виконується в такій послідовнесті:

♦  Умовою є логічний вираз, значення якого визначається (True – так, False – ні).

♦  Якщо значення логічного виразу є  true, то виконується оператор1, якщо false – оператор2.

Команда з неповним розгалуженням виконується в такій послідовнесті:

♦  Умовою є логічний вираз, значення якого визначається;

5

♦ Якщо значення логічного виразу є  true, то виконується оператор1, якщо false – оператори, записані після оператора розгалуження.

За форматом команди галка „так”  або „ні”  може складатись з одного оператора, але ж на практиці часто треба виконати кілька операцій. В цьому випадку можна кілька команд поєднати в один оператор за допомогою операторних дужок  begin…..end.

Розглянемо проект, який частково буде реалізувати роботу банкомату при знятті клієнтом визначеної суми. Але на практиці сума на рахунку визначається з бази даних банку по магнітному коду пластикової картки. В нашій програмі візьмемо цю суму як 2000 гривень.

Якщо клієнт визначає суму, більшу ніж та, що на рахунку, він отримає повідомлення про величину залишку на рахунку і повідомлення, що на рахунку недостатньо коштів для виконання операції. Якщо вказана клієнтом сума меньша тієї, що на рахунку, відбудеться перерахування залишку і видача його розміру.

Умовою розгалуження буде логічний вираз sum>rah. Для реалізації розгалуження використовуємо оператор розгалуження повної форми, тому що дії в обох випадках різні.

6

Розглянемо проект з використанням неповної форми інструкції розгалуження. В формі присутній новий компонент CheckBox – 2 . При виконанні проекту – це віконце для прапорця. На малюнку приведені вікно програми та код процедури обробки події «Клік по кнопці».

7

 Умовою розгалуження взято значення властивості Checked для компонента CheckBox1. Якщо в вікні програми стоїть прапорець («туди і назад..»), то CheckBox1.Checked = True, в цьому випадку виконується подвоєння суми і віднімання 50 копійок. Якщо прапорець не виставлений, то CheckBox1.Checked =False, і команда s:= s*2 -50 обминається.

8

Іноді розрахунки мають 3, 4 гілки. Але розглянуті структури та оператор розгалуження мають тільки 2 гілки. Щоб отримати розгалуження на 3 гілки часто досить 2-х операторів розгалуження. Це якщо умови виконання кожної гілки охвачують всю множину можливих співвідношень.

З математики відома задача розв’язку квадратного рівняння ax2+bx+c=0. Спочатку розраховується значення дискримінанту: d=b2-4ac. Потім, залежно від значення результату, розрахунки відбуваються за різними правилами та формулами:

♦  Якщо d>0, розраховується 2 корені:

♦  Якщо d=0, розраховується 1 корень:

♦  Якщо d<0, дійсних коренів не існує.

За допомогою двох операторів розгалуження, вкладених один в один, отримуємо розгалуження на 3 гілки.

9

 Інструкція if використовується, якщо треба розгалузити розрахунки на 2, 3 гілки. Але іноді залежно від значень певної змінної розгалуження треба виконати на багато гілок. В цьому випадку використовують інструкцію вибору:

10

Селектор – це змінна, яка може приймати обмежену кількість значень, список1 – список значень селектора при яких треба виконувати інструкції описані в гілці1, аналогічно список2  визначає умову виконання гілки2, і т.д.

Розглянемо приклад – проект, в якому вибирається комплект даних для обчислення площі трикутника.

В проекті використаний новий компонент RadioGroup – список перемикачів. Введення самого списка виконується в діалоговому вікні, яке вмикається через властивість компонента – 11 . Вводимо підписи, розділяючи їх кнопкою Enter, в кінці останнього пункту – Enter не натискати, натиснути кнопку ok. При виконанні проекту значення властивості ItemIndex прийме значення відміченого пункту, починаючи з нуля.  Значення цієї властивості обираємо селектором.

12Існує ще одна форма інструкції вибору: В цьому випадку гілка else визначає всі значення селектора за винятком тих, що визначені в списку1, списку2,…

13

Наприклад, треба до числового значення суми добавити одне з слів: «43 гривні»,  «61 гривня», «37 гривень». Нескладно визначити закономірність, це залежить від останньої цифри:

♦ Числа від 5 до 20 – додати слово «гривень»;

♦ Остання цифра 1 – додати слово «гривня»;

♦ Останні цифри 2,3,4 – додати слово «гривні»;

♦ Останні цифри 0,5,6,7,8,9 –додати слово «гривень»;

14

Розглянемо вікно програми «Банкомат» і код процедури обробки події – «Клік по кнопці».

Інструкція вибору case задіяна як одна з гілок інструкції розгалуження if.