Инструкция 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 Label1, Label | Для ввода длительности разговора в минутах Для ввода номера дня недели 2 Для вывода пояснительного текста о назначении полей ввода |

| Компонент | Назначение |
| 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 < 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, одна из которых "вложена" в другую.