Привіт. Сьогодні продовжимо гратися із оператором розгалуження (ми ще довго будемо з ним гратися 😃 ). І сьогоднішній урок розпочнемо з розбору попереднього. На минулому уроці нам потрібно було створити проект у якому ми могли рухати форму у відповідному напрямку однією кнопкою, а обирати напрямок ще чотирма.
Як я вже й писав підказка до завдання була в назві посту "Змінна-перемикач". Бо саме використання змінної дозволить програмі запам’ятати у якому напрямку потрібно рухати форму. Отож для того, щоб програма запам’ятала куди саме їй потрібно рухатись достатньо було створити змінну наприклад типу byte (цілі числа в межах від 0 до 255) n:byte; а потім створити обробники подій для кнопок, що означають напрямок і вписати в них команду
n:=1;
Маю надію, що Ви вже здогадались, що потрібно вписати в обробник події Onclick для кнопки Go.
Звичайно процедура повинна містити код перевірки значення змінної n. А отже мати наступний вигляд:
Залишилось лише додати перевірку для кнопок вправо та вниз.
А тепер давайте доповнимо попереднє завдання.
Після того, як форма переміститься в обраному напрямку потрібно, щоб у заголовоку форми відобразився напрямок куди рухалась форма.
Якщо подумати, то нічого складного. Просто допишемо ще одну команду для кожної умови
Form1.Caption:='Вліво';
Так, щоб вийшов код як на малюнку нижче.
Запустіть проект і клацніть по кнопці вліво, а потім Go. Який результат Ви отримали?
Форма перемістилась вліво і в цьому нічого дивного немає. Але який текст ми маємо в заголовку вікна?
Як не дивно, але там буде слово Вгору. Чому так? Справа в тому, що оператор розгалуження використовує для себе лише одну команду яка записана після THEN чи ELSE. Якщо ж після THEN записати дві та більше команд і при цьому використати ELSE то Ви отримаєте помилку.
У нашому ж випадку ми використали неповний оператор розгалуження тому Програма взявши собі по одній команді, решту просто виконала.
Давайте розглянемо той же код, але записаний по іншому (нумерація для зручності.):
Pascal як і більшість мов програмування використовує символ ; для позначення кінця команди, а отже дозволяє записувати команди в одному рядку чи переносити їх на інший.
Тому код на малюнку вгорі та код записаний нижче є цілком ідентичними.
1. if n=1 then form1.left:=form1.left-10;
2. Form1.Caption:='Вліво';
3. if n=2 then form1.top:=form1.top-10;
4. Form1.Caption:='Вгору';
Отже, після того, як ми натиснули кнопку "Вліво", а потім кнопку "Go", спочатку програма перевірила істинність висловлювання n=1 ( Рядок №1). Воно виявилось істини, а значить виконався код позначений зеленим кольором. Після цього програма виконала команду з рядка №2 і перейшла до рядка №3. Висловлювання n=2 виявилось хибним, а отже код позначений синім кольором не виконувався і програма пішла далі, а отже виконала команду №4. Причому враховуючи швидкодію, зміни тексту в заголовку форми, а він був, ми не побачили.
Але як же бути з тим, що команда Form1.Caption:='Вліво'; повинна виконатись саме тоді коли n=1, а Form1.Caption:='Вгору'; взагалі не виконатись, якщо ми клацнули кнопку "Вліво"?
На допомогу прийдуть операторні дужки.
Операторні дужки
BEGIN END - це операторні дужки.
Так саме ця комбінація слів, вже до речі відома Вам дозволить виправити ситуацію з нашим і не тільки завданням.
Як і звичайні дужки у математиці, BEGIN END можна використовувати там, де потрібно чітко відмежувати якусь частину коду. І найчастіше це відбувається саме в конструкціях розгалуження.
А тому сам оператор розгалуження можна записати так:
IF <висловлювання> THEN
BEGIN
<дія1;>
<дія2;>
...
<діяN;>
END
ELSE
BEGIN
<дія1;>
<дія2;>
...
<діяN;>
END;
Зверніть увагу!
Після END, що стоїть перед ELSE, крапка з комою не ставиться!
ПРАВИЛО!
Якщо після THEN чи ELSE потрібно виконати дві чи більше команд, вони обов’язково повинні бути обгорнуті операторними дужками!
a:=5;
b:=4;
IF a=b+1 THEN
BEGIN
a:=1;
b:=a+1;
END
ELSE
BEGIN
a:=2;
b:=a+1;
END
Які значення матимуть змінні а та b?
Ну а тепер виправляти нашу програму!
Успіхів Вам! Маю надію, що у Вас все вийде!
Додаткові завдання
У попередньому проекті виконайте наступні завдання.
- Додайте на форму текстове поле, у яке можна буде ввести "відстань" на яку може переміститися форма.
- Подбайте про те, щоб програма перевіряла, що більше ніж на 50 кроків вона рухатись не може.
Немає коментарів:
Дописати коментар