
- •1 Палітру компонентів Standart
- •2. Програмування простих обчислювальних процесів
- •2.1 Компоненти введення висновку, які використовуються при рішенні задач
- •2.2 Лінійний обчислювальний процес
- •2.3 Обчислювальний процес, що розгалужується
- •2.3.1 Умова
- •2.3.2.1 Інструкція if
- •If умова then
- •2.3.2 Інструкція case
- •2.3.4 Інструкція goto
- •2.4 Компоненти, які підтримують функції вибору
- •Блок-схема алгоритму
- •Блок схема алгоритму
- •Контрольні питання
- •Література
2.3 Обчислювальний процес, що розгалужується
На практиці рідко зустрічаються завдання, алгоритм рішення яких є лінійним. Часто виявляється, що алгоритм рішення навіть елементарного завдання не є лінійним. Наприклад, хай треба обчислити за формулою струм в електричному ланцюзі. Якщо припустити, що користувач завжди вводитиме вірні дані, то алгоритм рішення цієї задачі дійсно є лінійним. Проте покладатися на те, коли користувач проводитиметься так, як треба програмі, не слідує. Формула розрахунку припускає, що величина опору не рівна нулю. А що буде, якщо користувач введе 0? Відповідь простій: виникне помилка "Ділення на нуль", і програма аварійно завершить роботу. Можна, звичайно, покласти відповідальність за це на користувача, але краще внести зміни в алгоритм рішення, щоб розрахунок виконувався тільки в тому випадку, якщо введені вірні дані.
Точки алгоритму, в яких виконується вибір подальшого ходу програми, називаються точками вибору. Вибір чергового кроку рішення задачі здійснюється залежно від виконання деякої умови.
2.3.1 Умова
У повсякденному житті умова звичайно формулюється у вигляді питання, на яке можна відповісти Та чи ні. Наприклад:
Величина опору рівна нулю?
Відповідь правильна?
Сума покупки більше 300 рублів?
У програмі умова - це вираз логічного типа (Boolean), який може приймати одне з двох значень: True (істина) або False (брехня).
У мові Delphi є шість операторів порівняння.
Таблиця 10 Оператори порівняння
Оператор |
Опис |
Результат порівняння |
> |
Більше |
True, якщо перший операнд більше другого, інакше False |
< |
Менше |
True, якщо перший операнд менше другого, інакше False |
= |
Рівно |
True, якщо перший операнд рівний другому, інакше False |
<> |
Не рівно |
True, якщо перший операнд не рівний другому, інакше False |
>= |
Більше або рівно |
True, якщо перший операнд більше або рівний другому, інакше False |
<= |
Менше або рівно |
True, якщо перший операнд менше або рівний другому, інакше False |
2.3.2 Вибір
Вибір в точці розгалуження алгоритму чергового кроку програми може бути реалізований за допомогою інструкцій if і case. Інструкція if дозволяє вибрати один з двох можливих варіантів, інструкція case — один з декількох.
2.3.2.1 Інструкція 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).
Якщо в операторі If між словами begin і end знаходиться тільки один оператор, то слова begin і end можна не писати.
Якщо яка-небудь дія повинна виконуватися тільки при виконанні певної умови і пропущена у разі невиконання цієї умови, тоді конструкція if використовується без блоку Else.
Як приклад використання інструкції if розглянемо програму обчислення вартості міжміської телефонної розмови.
Як відомо, вартість міжміської розмови по телефону у вихідні дні нижче, ніж в звичайні. Програма, текст якої приведений далі, запрошує тривалість розмови і день тижня, а потім обчислює вартість розмови. Якщо день тижня — субота або неділя, то вартість зменшується на величину знижки. Ціна хвилини розмови і величина знижки задаються в тексті програми як константи. Вид діалогового вікна програми приведений на мал. 3.
Рисунок 3 Діалогове вікно програми Вартість розмови
Таблиця 11 Компоненти форми застосування Вартість розмови
Компонент |
Призначення |
Edit1 |
Для введення тривалості розмови в хвилинах |
Edit2 |
Для введення номера дня тижні 2 |
Label1, Label |
Для виведення тексту, пояснення, про призначення полів введення |
Label3 |
Для виведення результату обчислення — вартості розмови |
Button1 |
Для активізації процедури обчислення вартості розмови |
Таблиця 12 Значення властивостей компонентів
Властивість |
Значення |
Form1 . Caption |
Вартість розмови |
Edit1.Text |
|
Edit2.Text |
|
Label1 .Caption |
Тривалість (мин.) |
Label2 .Caption |
Номер дня тижня |
Label3 .Caption |
|
Button1 . Caption |
Обчислити |
Програма проводить обчислення в результаті клацання на командній кнопці Обчислити. При цьому виникає подія 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.