Implementation
($R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
const
PAY =0.15; // ціна однієї мінути розмови 0.05 грн.
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:='До оплати '
+ FloatToStr(Summa) + 'грн.';
end; end.
Часто в програмі необхідно реалізувати вибір більш ніж із двох варіантів. Наприклад, відомо, що для кожної людини існує оптимальне значення ваги, що може бути обчислене по формулі:
Ріст(см)- 100.
Реальна вага може відрізнятися від оптимального: вага може бути менше оптимального, рівнятися йому або перевищувати оптимальне значення.
Наступна програма, діалогове вікно якої наведене на рис. 2., запитує вагу й ріст, обчислює оптимальне значення, порівнює його з реальною вагою й виводить відповідне повідомлення.
Рис. 2. Вікно програми Контроль ваги
Як і в попередній програмі, обчислення виконуються при клацанні на кнопці Обчислити (її ім'я Button1). У лістингу 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.Button1Click(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, одна йз яких "вкладена" в іншу.
Інструкція case
У мові Delphi є інструкція case, що дозволяє ефективно реалізувати множинний вибір. У загальному виді вона записується в такий спосіб:
case Селектор of
список1: begin { інструкції 1 } end;
список2: begin { інструкції 2 } end;
списокN: begin{ інструкції N } end;
else
begin
{ інструкції )
end;
end;
де:
Селектор - вираження, значення якого визначає подальший хід виконання програми (тобто послідовність інструкцій, що буде виконана);
Список N - список констант. Якщо константи являють собою діапазон чисел, то замість списку можна вказати першу й останню константу діапазону, розділивши їхніми двома крапками. Наприклад, список 1, 2, 3, 4, 5, 6 може бути замінений діапазоном 1..6.
Виконується інструкція case у такий спосіб:
1. Спочатку обчислюється значення виразу-селектора.
2. Значення виразу-селектора послідовно рівняється з константами зі списків констант.
3. Якщо значення вираження збігається з константою зі списку, то виконується відповідному цьому списку група інструкцій. На цьому виконання інструкції саsе завершується.
4. Якщо значення виразу-селектора не збігається з жодною константою із всіх списків, то виконується послідовність інструкцій, що випливає за else.
Синтаксис інструкції case дозволяє не писати else і відповідну послідовність інструкцій. У цьому випадку, якщо значення вираження не збігається з жодною константою із всіх списків, то виконується наступна за case інструкція програми. Приклад case.
case n_day of
1,2,3,4,5: day:='Робочий день. ' ;
6: day:='Cyббoтa!';
7: day:='Неділя!';
end;
case n_day of
6: day:='Субота!';
7: day:='Неділя!';
else day:='Робочий день.';
end;
Як приклад використання інструкції case розглянемо програму, що перераховує вагу з фунтів у кілограми. Програма враховує, що в різних країнах фунт "важить" по-різному. Наприклад, у Росії фунт дорівнює 409,5 грамів, в Англії - 453,592 грама, а в Німеччині, Данії й Ісландії фунт важить 500 грамів.
У діалоговому вікні програми, зображеному на рис. 3, для вибору країни використається список Країна.
Для вибору назви країни використовується список — компонентів ListBox. Значок компонента ListBox перебуває на вкладці Standard. У табл. 3 наведені властивості компонента ListBox.
Рис. 3. Діалогове вікно програми Приклад використання case
Таблиця 3. Властивості компонента ListBox
Властивість |
Визначає |
Name |
Ім'я компонента. У програмі використається для доступу до властивостей компонента |
Items |
Елементи списку |
Itemindex |
Номер обраного елемента списку. Номер першого елемента списку дорівнює нулю |
Left |
Відстань від лівої границі списку до лівої границі форми |
Top |
Відстань від верхньої границі списку до верхньої границі форми |
Height |
Висоту поля списку |
Width |
Ширину поля списку |
Font |
Шрифт, використовуваний для відображення елементів списку |
Parent-Font |
Ознака спадкування властивостей шрифту батьківської форми |
Найбільший інтерес представляють властивості Items і Itemindex. Властивість items містить елементи списку. Властивість itemindex задає номер обраного елемента списку. Якщо жоден з елементів не обраний, то значення властивості дорівнює мінус одиниці.
Список може бути сформований під час створення форми або під час роботи програми.
Для формування списку під час створення форми треба у вікні Object Inspector вибрати властивість items і клацнути на кнопці запуску редактори списку рядків.
У діалоговому вікні, що відкрилося, String List Editor потрібно ввести список, набираючи кожний елемент списку в окремому рядку. Після введення чергового елемента списку для переходу до нового рядка необхідно нажати клавішу <Enter>. Після введення останнього елемента клавішу <Enter> натискати не треба. Завершивши уведення списку, варто клацнути на кнопці ОК.
У табл. 4 перераховані компоненти форми додатка, а в табл. 5 наведені значення властивостей компонентів.
Таблиця 4. Компоненти форми
Компонент |
Призначення |
ListBoxl |
Для вибору країни, для якої треба виконати перерахування |
Edit1 |
Для введення ваги у фунтах |
Label1, Label2, Label3 |
Для виводу пояснювального тексту про призначення полів уведення |
Label4 |
Для виводу результату перерахування |
Button1 |
Для активізації процедури перерахування ваги з фунтів у кілограми |
Таблиця 5. Значення властивостей компонентів
Властивість |
Значення |
Form1.Caption |
Приклад використання case |
Editl. Text |
|
Label1. Caption
Label1. AutoSize Label1. WordWrap |
Виберіть країну, уведіть кількість фунтів і клацніть на кнопці Обчислити False True |
Label2 .Caption |
Країна |
Label3 . Caption |
Фунтів |
Button1 . Caption |
Обчислити |
Процедура перерахування, що виконується в результаті клацання на командній кнопці Обчислити, множить вагу у фунтах на коефіцієнт, дорівнює кількості кілограмів в одному фунті. Значення коефіцієнта визначається по номері обраного зі списку елемента.
Лістинг 3. Перерахування ваги з фунтів у кілограми
unit Unit1;