Сложные условия

Во многих случаях нужно одновременно проверять несколько условий. Например, перед расчетом площади треугольника по длинам сторон все три длины стороны a,b,c обязаны быть положительными числами, т.е. должно выполняться условие "a>0 и b>0 и c>0". Для записи сложных условий в Delphi предусмотрен набор логических операций над условиями (табл. 2). Обязательное требование – сами условия при этом записываются в скобках!

Поясним действие логических операций. Операция AND ("и") возвращает значение "истина" только в том случае, если оба условия, которые она соединяет, истинны. Если хотя бы одно из условий не выполняется, AND вернет "ложь". Операция OR ("или") не столь строга – она возвращает значение истина, если либо одно, либо другое, либо оба разу соединяемых условия истинны. Родственная операция XOR (исключающее "или") очень похожа на OR с той разницей, что она исключает случай, когда оба условия выполняются (или одно, или другое6 но не оба сразу). Наконец, операция NOT (отрицание) применяется не к двум, а к одному условию и просто "переворачивает" его: (a=b) есть то же самое, что NOT(a<>b).

Таблица 2

Операция a b Результат Операция a b Результат
(a) AND (b) true true true NOT(a) true - false
true false false false - true
false true false - -  
false false false - -  
(a) OR (b) true true true (a) XOR (b) true true false
true false true true false true
false true true false true true
false false false false false false

Вот как может выглядеть запись проверки всех трех введенных сторон треугольника на положительность:

IF (a>0) AND (b>0) AND (c>0) THEN

BEGIN

… вычисления

END

ELSE

Label1.Caption:='Стороны должны быть больше нуля';

 

Тот же пример можно записать и по-другому:

IF (a<=0) OR (b<=0) OR (c<=0) THEN

BEGIN

Label1.Caption:='Стороны должны быть больше нуля';

Exit // выход из процедуры

END;

… вычисления

END; // конец процедуры

 

В качестве примера использования инструкции if рассмотрим программу вычисления стоимости телефонного разговора. Как известно, стоимость разговора по телефону в воскресные дни ниже, чем в обычные дни. Следующая программа запрашивает длительность разговора и день недели, затем вычисляет стоимость разговора. Если день недели суббота или воскресенье, то стоимость уменьшается на величину скидки. Цена минуты разговора и величина скидки задаются в тексте программы как константы.

На рис. приведен вид диалогового окна программы.

Для ввода исходных значений (длительность разговора, номер дня недели) используются поля редактирования, для вывода результата и пояснительного текста — поля меток. Ниже перечислены компоненты и приведены значения их свойств.

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

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

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

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

Button 1 – Активизации процедуры вычисления

Здесь и далее при описании формы приложения приводятся значения только тех свойств компонентов, которые используются в программе. Значения остальных свойств могут быть оставлены без изменения или изменены произвольным образом, естественно, в разумных пределах (очевидно, что размер командной кнопки может быть выбран произвольно).

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

 

procedure TForm1.Button1Click(Sender: TObject);

const

PAY=0.15; {цена одной минуты разговора 0.15 рубля}

DISCOUNT=20; {скидка 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* (100-DISCOUNT)/100;

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

label3.Caption:='К оплате ' + FloatToStrf(Summa,ffgeneral,4,2)+' руб.';

end;

 

Часто в программе необходимо реализовать выбор более чем из двух вариантов. Например, известно, что для каждого человека существует оптимальное значение веса, которое может быть вычислено по формуле: рост(см) – 100. Очевидно, что реальный вес может отличаться от оптимального: вес может быть меньше оптимального, равняться ему или превышать оптимальное значение.

Следующая программа (ее алгоритм приведен ниже на рис.) запрашивает вес и рост, вычисляет оптимальное значение, сравнивает его с реальным и выводит соответствующее сообщение.

Как и в предыдущей программе, вычисления выполняются при щелчке на кнопкеВычислить (ее имя Button1). Ниже приведена процедура обработки события OnClick для этой командной кнопки.

 

procedure TForm1.Button1Click(Sender: TObject);

var

w: real; { вес }

h: real; { рост }

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

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

begin

w:=StrToFloat(Edit1.text).;

h:=StrToFloat(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, одна из которых "вложена" в другую. Обратите внимание, что после инструкций, расположенных перед else, символ "точка с запятой" не поставлены.

Дополнительное самостоятельное задание:

В программе определения оптимального веса для ввода значений используйте 2 компонента TrackBar из страницы палитры Win32. Для веса установите максимальное значение 150 – минимальное – 50; для роста – Max – 210, Min – 70. Данные считываются из свойства компонента Position (w:=TrackBar1.Position). Для динамического отображения данных сгенерировать процедуры и вписать в них код, предварительно добавив на форму метки Label4 и Label5.

 

procedure TForm1.TrackBar1Change(Sender: TObject);

begin

Label4.Caption:=TrackBar1.Position;

end;

 

procedure TForm1.TrackBar2Change(Sender: TObject);

begin

Label5.Caption:=TrackBar2.Position;

end;

 








Дата добавления: 2015-03-19; просмотров: 620;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.012 сек.