Інструкція if

Інструкція if дозволяє вибрати один з двох можливих варіантів розвитку програми. вибір здійснюється в залежності від виконання умови.

У загальному вигляді інструкція if записується так:

if умова then
begin
// тут інструкції, які треба виконати,

// якщо умова істинна.

end

else

begin
// тут інструкції, які треба виконати, // якщо умова помилкова. end;

Зверніть увагу, що перед else (після end) крапка з комою не ставиться.

Виконується інструкція if наступним чином:

  1. обчислюється значення умови (умова – вираз логічного типу, значення якого може бути одно True або False).
  2. Якщо умова істинно (Значення виразу умова одно 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, одна з яких “вкладена” в іншу.