Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование в Delphi (повторение).doc
Скачиваний:
7
Добавлен:
04.05.2019
Размер:
2.74 Mб
Скачать

5.4.1. Инструкция if

Инструкция if позволяет выбрать один из двух возможных вариантов раз­вития программы. Выбор осуществляется в зависимости от выполнения усло­вия. В общем виде инструкция if записывается так:

if условие

then

begin

// здесь инструкции, которые надо выполнить,

// если условие истинно.

end

else

begin

// здесь инструкции, которые надо выполнить,

// если условие ложно.

end;

Обратите внимание, что перед else (после end) точка с запятой не ста­вится.

Выполняется инструкция if следующим образом:

1. Вычисляется значение условия (условие – выражение логического типа, значение которого может быть равно True или False).

2. Если условие истинно (значение выражения условие равно True), то выполняются инструкции, следующие за словом then (между begin и end). На этом выполнение операции if заканчивается и инструк­ции, следующие за else, не будут выполнены.

3. Если условие ложно (значение выражения условие равно False), то вы­полняются инструкции, следующие за словом else (между begin и end).

На рис. 5.2 представлен алгоритм, соответствующий инструкции if-then-else.

Например, если переменная t обозначает тип соединения сопротивлений в электрической цепи (t=1 это последовательное соединение, t=2 – параллельное), a rl и r2 – величины сопротивлений, то инструкция if осуществляет выбор формулы, по которой будет выполнен расчет, имеет вид:

if t=l

then

begin

z:=rl+r2;

end

else

begin

z:= (r1*r2)/(r1+r2);

end;

Рис. 5.2. Алгоритм, реализуемый инструкцией if-then-else

Если в инструкции if между begin и end находится только одна инструк­ция, то слова begin и end можно не писать.

Например, инструкцию

if otv=3

then

begin

prav:=prav+l;

end

else

begin

ShowMessage('Ошибка!');

end;

можно переписать так:

if otv=3

then

prav:=prav+l

else

ShowMessage('Ошибка!');

Если какое-либо действие должно быть выполнено только при выполнении определенного условия и пропущено, если это условие не выполняется, инструкция if может быть записана так:

if условие

then

begin

{ инструкции, которые надо выполнить,

если условие выполняется, истинно }

end

На рис. 5.3 представлен алгоритм, соответствующий инструкции if-then.

Рис. 5.3. Алгоритм, реализуемый инструкцией if-then

Например, инструкция

if n = m

then c: =c+l;

увеличивает значение переменной c только в том случае, если значения переменных n и m равны.

При вложенных конструкциях if могут возникнуть неоднозначности в понимании того, к какой из вложенных конструкций if относится элемент else.

Компилятор всегда считает, что else относится к последней из конструкций if, в которой не было раздела else.

Например, в конструкции

if <условие1>

then if <условие2> then <оператор1>

else <оператор2>;

else будет отнесено компилятором ко второй конструкции if, т.е. <оператор2> будет выполняться в случае, если первое условие истинно, а второе ложно. Иначе говоря, вся конструкция будет прочитана как

if <условие1>

then begin

if <условие2> then <оператор1> else <оператор2>

end;

Если же вы хотите отнести else к первому if, это надо записать в явном виде с помощью операторных скобок begin...end:

if <условие1>

then begin

if <условие2> then <оператор1>

end

else <оператор2>;

В качестве примера использования инструкции if рассмотрим программу вычисления стоимости междугородного телефонного разговора.

Как известно, стоимость междугородного разговора по телефону в выходные дни ниже, чем в обычные. Программа должна запрашивать длительность разговора и день недели, а затем вычислять стоимость разговора. Если день недели – суббота или воскресе­нье, то стоимость уменьшается на величину скидки. Цена минуты разговора и величина скидки задаются в тексте программы как константы [3].

Для ввода исходных данных (длительность разговора, номер дня недели) используются поля редактирования, для вывода результата и пояснительно­го текста – поля меток. В табл. 5.4 перечислены компоненты и указано их назначение.

Таблица 5.4

Компоненты формы приложения Стоимость разговора

Компонент

Назначение

Edit1

Окно ввода – для ввода длительности разговора в минутах

Edit2

Окно ввода – для ввода номера дня недели

Label1,

Label2

Метки – для вывода пояснительного текста о назначении полей ввода

Label3

Метка – для вывода результата вычисления — стоимости разговора

Button1

Кнопка – для активизации процедуры вычисления стоимости разговора

Диалоговое окно программы показано на рис. 5.4.

Рис. 5.4. Вид диало­гового окна программы.

В табл. 5.5 приведены значения свойств компонентов.

Таблица 5.5

Значения свойств компонентов

Свойство

Значение

Forml.Caption (заголовок формы)

Стоимость разговора

Editl.Text

Edit2.Text

Labell.Caption

Длительность (мин.)

Label2.Caption

Номер дня недели

Label3.Caption

Buttonl.Caption

Вычислить

Программа производит вычисления в результате щелчка на командной кнопке Вычислить. При этом возникает событие Onclick, которое обраба­тывается Процедурой Tforml.Button1Click. Текст программы показан в листинге.

Листинг. Вычисление стоимости телефонного разговора

unit Phone_u;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit; // поле ввода длительности разговора

Edit2: TEdit; // поле ввода номера дня недели

Button1: TButton; // кнопка Вычислить

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

procedure Button1Click(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(Edit1.Text);

Day:=StrToInt(Edit2.Text);

// Вычислить стоимость разговора

Summa:= PAY*Time;

// Если день суббота или воскресенье, то уменьшить

// стоимость на величину скидки

if (Day = 6) OR (Day = 7)

then Summa:=Summa*(1 -DISCOUNT);

// вывод результата вычисления

label3.caption:='К оплате '+FloatToStr(Summa)+'руб.';

end;

end.

Часто в программе необходимо реализовать выбор более чем из двух вари­антов. Например, известно, что для каждого человека существует оптималь­ное значение веса, которое может быть вычислено по формуле:

Рост (см)- 100.

Реальный вес может отличаться от оптимального: вес может быть меньше оптимального, равняться ему или превышать оптимальное значение.

Следующая программа, диалоговое окно которой приведено на рис. 5.5, за­прашивает вес и рост, вычисляет оптимальное значение, сравнивает его с реальным весом и выводит соответствующее сообщение.

Рис.5.5. Форма с компонентами для приложения Контроль веса

Как и в предыдущей программе, вычисления выполняются при щелчке на кнопке Вычислить. Текст процедуры обработки события имеет вид:

procedure TForm1.Button1Click(Sender: TObject);

var

w:real; { вес }

h:real; { рост }

opt:real; { оптимальный вес }

d:real; { отклонение от оптимального веса }

begin

w:=StrToFloat(Edit1.text);

h:=StrToInt(Edit2.Text);

opt:=h-100;

if w=opt

then

Label3.caption:='Ваш вес оптимален !'

else

if w<opt

then

begin

d:=opt-w;

Label3.caption:='Вам надо поправиться, на '

+ FloatTostr(d)+ 'кг.';

end

else

begin

d:=w-opt;

Label3.caption:='Надо немного похудеть, на '

+ FloatTostr(d)+ ' кг.';

end;

end;

В приведенном примере множественный выбор реализован при помощи двух инструкций if, одна из которых "вложена" в другую [3].