If умова then
Begin // тут інструкції, які треба виконати // якщо умова істинно. End Else Begin // тут інструкції, які треба виконати // якщо умова помилково. End; Зверніть увагу, що перед else (після end) крапка з комою не ставиться. Виконується інструкція if таким чином: 1. Обчислюється значення умови (умова — вираз логічного типа, значення якого може бути рівне True або False). 2. Якщо умова істинно (значення виразу умова рівне True), то виконуються інструкції, наступні за словом then (між begin і end). На цьому виконання операції if закінчується, тобто інструкції, наступні за else, не будуть виконані. Якщо умова помилково (значення виразу умова рівне False), то виконуються інструкції, наступні за словом else (між begin і end). Якщо в операторі If між словами begin і end знаходиться тільки один оператор, то слова begin і end можна не писати. Якщо яка-небудь дія повинна виконуватися тільки при виконанні певної умови і пропущена у разі невиконання цієї умови, тоді конструкція if використовується без блоку Else. Як приклад використання інструкції if розглянемо програму обчислення вартості міжміської телефонної розмови. Як відомо, вартість міжміської розмови по телефону у вихідні дні нижче, ніж в звичайні. Програма, текст якої приведений далі, запрошує тривалість розмови і день тижня, а потім обчислює вартість розмови. Якщо день тижня — субота або неділя, то вартість зменшується на величину знижки. Ціна хвилини розмови і величина знижки задаються в тексті програми як константи. Вид діалогового вікна програми приведений на мал. 3. Рисунок 3 Діалогове вікно програми Вартість розмови
Таблиця 11 Компоненти форми застосування Вартість розмови
Таблиця 12 Значення властивостей компонентів
Програма проводить обчислення в результаті клацання на командній кнопці Обчислити. При цьому виникає подія onclick, яка обробляється процедурою TForm1.Button1Click. 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.
2.3.2 Інструкція case У мові Delphi є інструкція case, яка дозволяє ефективно реалізувати множинний вибір. У загальному вигляді вона записується таким чином: case Селектор of список1: Begin { інструкції 1 } end; список 2: Begin { інструкції 2 } end; список М: 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 розглянемо програму, яка перераховує вагу з фунтів в кілограми. Програма враховує, що в різних країнах фунт "важить" по-різному. Наприклад, в Росії фунт рівний 409,5 грамів, в Англії — 453,592 грама, а в Німеччині, Данії і Ісландії фунт важить 500 грамів. У діалоговому вікні програми, зображеному на мал. 4, для вибору країни використовується список Країна. Рисунок 4 Діалогове вікно програми Приклад використання Case
Для вибору назви країни використовується список — компонент ListBox. Значок компоненту ListBox знаходиться на вкладці Standard.
Таблиця 13 Властивості компоненту ListBox
Найбільший інтерес представляють властивості Items і Itemindex. Властивість items містить елементи списку. Властивість itemindex задає номер вибраного елементу списку. Якщо жоден з елементів не вибраний, то значення властивості рівне мінус одиниці. Список може бути сформований під час створення форми або під час роботи програми. Для формування списку під час створення форми треба у вікні Object Inspector вибрати властивість items і клацнути на кнопці запуску редактора списку рядків. У діалоговому вікні String List Editor, що відкрилося, потрібно ввести список, набираючи кожен елемент списку в окремому рядку. Після введення чергового елементу списку для переходу до нового рядка необхідно натиснути клавішу <Enter>. Після введення останнього елементу клавішу <Enter> натискати не треба. Завершивши введення списку, слід клацнути на кнопці ОК.
Таблиця 14 Компоненти форми
Таблиця 15 Значення властивостей компонентів
Текст програми procedure TForm1.ButtonlClick(Sender: TObject); var funt:real; // вага у фунтах kg:real; // вага в кілограмах k:real; // коефіцієнт перерахунку begin case ListBoxl.Itemindex of 0: k:=0.4095; // Росія 1: k:=0.453592; // Англія 2:k:=0.56001; // Австрія 3..5,7:k:=0.5; // Німеччина, Данія, Ісландія, Нідерланди 6: k:=0.31762; // Італія end; funt:=StrToFloat(Editl.Text); kg:=k*funt; label4.caption:=Editl.Text + ' ф. — це ' + FloatToStrF(kg,ffFixed, 6,3)+ 'кг.'; end; end.
2.3.4 Інструкція goto Інструкції if і case використовуються для переходу до послідовності інструкцій програми залежно від деякої умови. Тому їх іноді називають інструкціями умовного переходу. Крім цих інструкцій управління ходом виконання програми існує ще одна - інструкція безумовного переходу goto. У загальному вигляді інструкція goto записується таким чином:
goto Мітка
де мітка - це ідентифікатор, що знаходиться перед інструкцією, яка повинна бути виконана після інструкції goto. Мітка, використовувана в інструкції goto, повинна бути оголошена в розділі міток, який починається словом label і розташовується перед розділом оголошення змінних. У програмі мітка ставиться перед інструкцією, до якої повинен бути виконаний перехід в результаті виконання інструкції goto. Відразу після мітки ставиться двокрапка.
2.4 Компоненти, які підтримують функції вибору Компонент TCheckBox (Прапорець) використовується для того, щоб користувач міг вказати своє рішення типу так/ні або так/ні/не упевнений (у останньому випадку прапорець виглядає бляклим). Це рішення відображається у властивості State компоненту, доступній як для читання, так і для запису. У складі діалогового вікна може бути декілька компонентів TCheckBox, причому стан будь-якого з них ніяк не залежить від стану інших. Деякі прапорці можуть знаходитися також в частково встановленому стані, коли ознака установки прапорця відображається приглушеним кольором. Така можливість потрібна, коли потрібно повідомити користувача про неповну відповідність вказаному статусу (наприклад, в ході установки програм, таким чином, повідомляється, що для установки вибрані не всі доступні засоби). Розглянемо властивості цього компоненту.
Таблиця 16 Властивості компоненту TCheckBox
Властивість Color компоненту фактично ігнорується, а властивості Height і Width визначають розміри прямокутника, в якому виводиться пов'язаний з прапорцем текст, і ніяк не впливають на розміри самого прапорця. Текст указується у властивості Caption. Компонент TRadioButton (Перемикач) призначений для вибору одного значення з ряду можливих. Перемикачі завжди використовуються групами. Коли користувач вибирає наступний перемикач, те виділення з поточного перемикача автоматично знімається, таким чином, в групі виділений завжди тільки один перемикач. Розглянемо властивості компоненту TRadioButton.
Таблиця 17 Властивості компоненту TRadioButton
Методи GetChecked і SetChecked, що дозволяють звертатися до властивості Checked і змінювати його значення, в тексті програми явно не використовуються. Вони призначені для використання в успадкованих класах TRadioButton (конкретних реалізаціях перемикача). Для відстежування стану конкретного перемикача можна обробляти подію OnClick. Компонент TRadioGroup Якщо в програмі потрібно використовувати декілька груп перемикачів (наприклад, одну для вибору типу пристрою, а іншу для вибору його стану), то можна застосувати один з двох підходів. Перший полягає у виділенні для кожної групи спеціального об'єкту (панелі), щоб система Delphi могла зрозуміти, як об'єднуються перемикачі. Другий підхід полягає у використанні компоненту TRadioGroup (Група перемикачів), який об'єднує властивості і методи, що забезпечують підтримку роботи групи перемикачів. Після розміщення у формі компоненту TRadioGroup вхідні в нього перемикачі задаються після переліку їх назв. Ці назви вводяться у властивість Items, що має тип TString. Розглянемо властивості компоненту TRadioGroup.
Таблиця 18 Властивості компоненту TRadioGroup
Завдання 1 Створити теку, модуль і проект в Delphi, створити блок схему алгоритму, діалогове вікно і програму для обчислення функції.
|