Інструкція if дозволяє вибрати один з двох можливих варіантів розвитку програми. вибір здійснюється в залежності від виконання умови.
У загальному вигляді інструкція if записується так:
if умова then begin // тут інструкції, які треба виконати, // якщо умова істинна. end else begin // тут інструкції, які треба виконати, // якщо умова помилкова. end;
Зверніть увагу, що перед else (після end) крапка з комою не ставиться.
Виконується інструкція if наступним чином:
- обчислюється значення умови (умова – вираз логічного типу, значення якого може бути одно True або False).
- Якщо умова істинно (Значення виразу умова одно True), то виконуються інструкції, наступні за словом then (між begin і end). На цьому виконання операції if закінчується, тобто інструкції, наступні за else, не будуть виконані.
Якщо умова помилкова (Значення виразу умова одно False), то виконуються інструкції, наступні за словом else (між begin і end).
На рис. 2.2 представлений алгоритм, відповідний інструкції if-tnen – else.
Рис. 2.2. Алгоритм, реалізований інструкцією if-then-else
Наприклад, якщо змінна t позначає тип з’єднання опорів в електричному ланцюзі (t = 1 відповідає послідовному з’єднанню, t = 2 – паралельного), a r1 і r2 – величини опорів, то наведена нижче інструкція if здійснює вибір формули, за якою буде виконаний розрахунок.
if t = l then begin z: = r1 + r2; end else begin z: = (r1 + r2) / (r1 * r2); end;
Якщо в інструкції if між begin і end знаходиться тільки одна інструкція, то слова begin і end можна не писати.
Наприклад, інструкцію
if otv = 3 then begin prav: = prav + 1 ; end else begin ShowMessage ( 'Помилка!'); end;
можна переписати так:
if otv = 3 then prav: = prav + l else ShowMessage ( 'Помилка!') ;
Якщо будь-яку дію має бути виконано тільки при виконанні певної умови і пропущено, якщо ця умова не виконується, то інструкція if може бути записана так:
if умова then
begin
{Інструкції, які треба виконати, якщо умова виконується, істинно} end
На Мал. 2.3 представлений алгоритм, відповідний інструкції if-then.
Рис. 2.3. Алгоритм, реалізований інструкцією if-then
Наприклад, інструкція
if n = m then c: = c + l;
збільшує значення змінної з тільки в тому випадку, якщо значення змінних n і m рівні.
Як приклад використання інструкції if розглянемо програму обчислення вартості міжміського телефонної розмови.
Як відомо, вартість міжміського розмови по телефону у вихідні дні нижче, ніж в звичайні. програма, текст якої наведений у лістингу 2.1, запитує тривалість розмови і день тижня, а потім обчислює вартість розмови. Якщо день тижня – субота або неділю, то вартість зменшується на величину знижки. Ціна хвилини розмови і величина знижки задаються в тексті програми як константи. вид діалогового вікна програми наведений на рис. 2.4.
Для введення вихідних даних (тривалість розмови, номер дня тижня) використовуються поля редагування, для виведення результату і пояснювального тексту – поля міток. У табл. 2.3 перераховані компоненти і вказано їх призначення, а в табл. 2.4 наведені значення властивостей цих компонентів.
Рис. 2.4. Діалогове вікно програми Вартість розмови
Примітка
Тут і далі при описі форми додатки наводяться значення тільки тих властивостей компонентів, які використовуються в програмі. Значення інших властивостей, зокрема визначають розмір і становище компонентів, можуть бути .оставлени без зміни або змінені довільним чином, природно, в розумних межах (очевидно, що положення командної кнопки або поля редагування може бути вибрано в межах форми довільним чином).
Таблиця 2.3. Компоненти форми програми Вартість розмови
Компонент | Призначення |
Edit1 | Для введення тривалості розмови в хвилинах |
Edit2 | Для введення номера дня тижня 2 |
Label1, Label | Для виведення пояснювального тексту про призначення полів введення |
Label3 | Для виведення результату обчислення – вартості розмови |
Button1 | Для активізації процедури обчислення вартості розмови |
У таблицях, що містять опис значень властивостей компонентів форми, вказується ім’я компонента і через точку – ім’я властивості. Наприклад, рядок таблиці Form1 . Caption Вартість розмови позначає, що під час створення форми додатка властивості Caption форми додатка треба привласнити вказане значення – текст “Вартість розмови “.
Таблиця 2.4. Значення властивостей компонентів
Властивість | Значення |
Form1. Caption | Вартість розмови |
Edit1.Text | |
Edit2.Text | |
Label1 .Caption | Тривалість (хв.) |
Label2 .Caption | Номер дня тижня |
Label3 .Caption | |
Button1. Caption | Обчислити |
Програма виробляє обчислення в результаті клацання на командній кнопці Обчислити. При цьому виникає подія onclick, яке обробляється процедурою TForm1.Button1Click.
Лістинг 2.1. Обчислення вартості телефонної розмови
unit Phone_u; interface Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class (TForm) Editl: TEdit; // поле введення тривалості розмови Edit2: TEdit; // поле введення номера дня тижня Button1: TButton; // кнопка Обчислити Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure ButtonlClick (Sender: TObject); private / Private declarations} public {Public declarations} end; var Form1: TForm1; implementation ($ R * .DFM} procedure TForm1.Button1Click (Sender: TObject); const PAY = 0.15; // ціна однієї хвилини розмови 0.15 рубля DISCOUNT = 0.2; // знижка 20 відсотків var Time: Real; // тривалість розмови Day: integer; // день тижня Summa: real; // вартість розмови begin // отримати вихідні дані Time: = StrToFloat (Editl.Text) ; Day: = StrToInt (Edit2.Text); // Обчислити вартість розмови Summa: = PAY * Time; // Якщо день субота або неділя, то зменшити // вартість на величину знижки if (Day = 6) OR (Day = 7) then Surama: = Summa * (1 - DISCOUNT); // висновок результату обчислення label3.caption: = 'K оплаті ' + FloatToStr (Summa) + 'руб.'; end; end.
Часто в програмі необхідно реалізувати вибір більш ніж з двох варіантів. Наприклад, відомо, що для кожного людини існує оптимальне значення ваги, яке може бути обчислено за формулою:
Зростання (см) – 100.
Реальний вага може відрізнятися від оптимального: вага може бути менше оптимального, дорівнювати йому або перевищувати оптимальне значення.
Наступна програма, діалогове вікно якої наведено на рис. 2.5, запитує вага і зріст, обчислює оптимальне значення, порівнює його з реальною вагою і виводить відповідне повідомлення.
Рис. 2.5. Вікно програми Контроль ваги
Алгоритм програми Контроль ваги зображений на рис. 2.6.
Як і в попередній програмі, обчислення виконуються при натисканні на кнопці Обчислити (її ім’я Buttoni). У лістингу 2.2 приведений текст програми.
Рис. 2.6. Алгоритм програми Контроль ваги
Лістинг 2.2.Контроль ваги
unit wtest_; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = Class (TForm) Label1: TLabel; Label2: TLabel; Edit1: TEdit; // поле введення ваги Edit2: TEdit; // поле введення зростання Button1: TButton; // кнопка Обчислити Label3: TLabel; // поле виведення повідомлення-результат роботи // програми procedure ButtonlClick (Sender: TObject); private { Private declarations} public { Public declarations} end; var Form1: TForm1; implementation ($ R * .DFM} procedure TForml.ButtonlClick (Sender: TObject); var w: real; {Вага} h: real; {Зростання} opt: real; { оптимальну вагу} d: real; { відхилення від оптимальної ваги} begin w: = StrToFloat (Editl.text); h: = StrToInt (Edit2.Text); opt: = h-100; if w = opt then Label3.caption: = 'Bu в хорошій формі!' else if w & lt; opt then begin d: = opt-w; Labels.caption: = 'Вам треба поправитися, на ' + FloatToStr (d) + 'кг.'; end else begin d: = w-opt; Labels.caption: = 'Haдo трохи схуднути, на ' + FloatTostr (d) + 'кг.'; end; end; end.
У наведеному прикладі множинний вибір реалізований за допомогою
двох інструкцій if, одна з яких “вкладена” в іншу.