вівторок, 14 лютого 2017 р.

Lazarus. Урок 12. ЯКЩО цей пост зрозумілий ТО чекай наступний ІНАКШЕ прочитай ще раз

Привіт. З’явилась хвилинка, тому спробую описати свої враження від наступної теми з якою Вам доведеться познайомитись в ході вивчення програмування - розгалуження.
Розгалуження - це можливість за допомогою коду описати ситуацію, у якій програма матиме зможе обрати один з двох, наперед описаних наборів команд.
Коли може трапитись така ситуація? Найпростішим прикладом може бути малюнок вікна поданий нижче.
Кожен користувач мережі Інтернет, співробітник якоїсь організації, учень якому заборонили гратись на ПК, зустрічались з подібним вікном.
Яким же чином працює алгоритм для даної задачі? Очевидно, що перше, що робить програма, це отримує з текстового поля пароль. Це можна зробити використавши змінну (назвемо її passw) рядкового типу.
Тоді отримати введений пароль можна буде створивши для кнопки обробник події OnClick та вписавши команду:
passw:=Edit1.text;
На наступному кроці програма повинна перевірити правильність введеного паролю. Яким чином вона це зробить і чи відрізняється це від того, як це робить людина?

Людина і розгалуження

Кожен з нас знаючи правильну комбінацію символів подумки порівнює правильний пароль і те, що ввів користувач. І кожен з нас у відповідь може видати одне з двох повідомлень: "Так" у випадку правильного паролю і "Ні" у випадку помилкового значення. 
Але сама перевірка відбувається мабуть якось на рівні підсвідомості і головне так швидко, що ми давши відповідь ТАК чи НІ не задумуємось над тим, іншим варіантом, який ми не назвали. Якщо людина каже ТАК то вже не думає про НІ і навпаки.
Але трапляються ситуації коли все ж таки ми плануємо наперед дії, які будемо робити у випадку, коли подія, на яку ми хочемо сказати ТАК, виявляється хибною. Часто мабуть траплялись ситуації, коли мама відправляла у магазин купити наприклад олію. Вона називала виробника товару і мабуть більшість із Вас задавала ключове запитання...  ЯКЩО "такої олії не буде?" ТО ....
Або ж сама мама говорила: ЯКЩО "така олія є" ТО...
І тепер ідучи до магазину Ви вже собі ставили завдання - ЯКЩО "така олія є" ТО куплю її ІНАКШЕ куплю іншу.  І якщо уважно придивитись до нашого життя то ось такі питання виникають чи не на кожному кроці. Звичайно ми не звертаємо на це уваги, але коли ми говоримо про робота який керується програмою, то мабуть варто розуміти те, що у цій програмі програміст повинен передбачити і описати УСІ можливі ситуації, вирішення яких ми починаємо зі слова ЯКЩО. А тому до справи.

Оператор розгалуження

В мові Pascal (мову Object Pascal використовує середовище Lazarus ) можливість перевірити істинність якогось висловлювання можна за допомогою конструкції
IF <висловлювання> THEN <дія1> ELSE <дія2>
IF - читається як ЯКЩО
THEN - читається як ТО
ELSE - читається як ІНАКШЕ
Приклад:
ЯКЩО олія є ТО купити олію ІНАКШЕ купити цукерки 
В даному прикладі висловлюванням є фраза "олія є". Вона може бути існинною (в магазині Ви це перевірите), а може бути хибною.
У випадку істинності висловлювання "олія є" Ви виконаєте дію "купити олію", а у випадку хибності цього висловлювання - "купите цукерки".
Виходячи з вище сказаного можна сказати, що при побудові конструкції де потрібно перевірити істинність висловлювання, ми після слова IF пишемо висловлювання, після слова THEN пишемо дії, які потрібно виконати у випадку істинності висловлювання, а після слова ELSE - дії, які потрібно виконати у випадку істинності цього висловлювання.

Важливо! 
Зверніть увагу, що при побудові конструкції розгалуження слово ЯКЩО слід вживати ОДИН РАЗ!

А тепер повернемось до нашого паролю. Ще раз нагадаємо, що ми його отримали з текстового поля і записали до змінної наступною командою: passw:=Edit1.text;

Як же скласти висловлювання для перевірки паролю? Дуже легко

ЯКЩО пароль правильний ТО сказати "Молодець" ІНАКШЕ сказати "Помилка!"

Зрозуміло, що в Lazarus ми не зможемо записати висловлювання на зразок "пароль правильний", але ми можемо порівняти значення де зберігається введений користувачем пароль із правильним паролем і тоді конструкція буде записана наступним чином.

passw:=Edit1.text;
IF passw='12345' THEN Label1.Caption:='Молодець!' ELSE Label1.Caption:='Помилка';

Отже ми для запису потрібного нам висловлювання скористались символом "=" (дорівнює) яке об’єднало висловювання зліва від = passw і висловлювання справа від = '12345'.
У більшості випадків висловлювання, істинність якого перевіряється в розгалуженні описується через порівняння (дорівнює, більше, менше, більше або дорівнює, менше або дорівнює, не дорівнює)
A=B
A>B
A
A>=B
A<=B
A<>B
Звичайно ж замість A та В можуть бути більш складні конструкції.
Наприклад розглянемо такий код:
a:=4;
IF a+2=6 THEN Label1.Caption:='YES' ELSE Label1.Caption:='NO';

Давайте спробуємо поглянути на висловлювання a+2=6. Як ми вже говорили, висловлювання може бути істинним або хибним. Як Ви вважаєте істинне це висловлювання чи хибне?
Якщо врахувати, що в першому рядку змінна а набула значення 4, а вже в самій умові ми додали до неї ще 2 то зліва від знака = вираз набув значення 6. І зрозуміло, що справа від = вираз також має значення 6. Логічно, що 6=6 є істинним висловлюванням. А це значить, що програма буде виконувати команди, що стоять після THEN, а отже властивість Caption напису Label1 набуде значення YES.

А якого значення набуде текстовий напис у випадку
a:=100;
IF a+2=6 THEN Label1.Caption:='YES' ELSE Label1.Caption:='NO';
Дуже хочу надіятись на те, що більшість із Вас скаже, що напис відобразить на формі слово NO.

Ще один приклад:

a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit1.Text);
IF a*a=b+b THEN Label1.Caption:='YES' ELSE Label1.Caption:='NO';

Спробуйте відгадати, які числа я повинен ввести в Edit1 та Edit2, щоб отримати слово YES.

Зверніть увагу

Уважно подивіться до запропонованих прикладів і зверніть увагу на символ ";". Після команди, що стоїть перед ELSE, крапка з комою не ставиться.

Завдання

  1. ЯКЩО пост зрозумілий ТО виконати завдання нижче ІНАКШЕ перечитати повільніше
  2. Створити проект у якому перевірити введений пароль (малюнок угорі) і у випадку правильного паролю, сховати всі елементи і відобразити на формі текстовий напис (мітку) у якому буде відображатись  код перевірки більшого з двох значень х та у який виведе у заголовок форми символ х або у в залежності від істиності записаного Вами висловлювання.