понеділок, 6 березня 2017 р.

Lazarus. Урок 17. Калькулятор як у Windows. Частина 3.

Привіт. Сьогодні у нас "фінальна" частина нашого калькулятора. У двох попередніх постах ми розглянули як за допомогою змінних величин запам’ятати наші попередні дії. На черзі у нас фінальна дія - клік по кнопці "=".

Алгоритм роботи калькулятора

Тож давайте ще раз опишемо алгоритм роботи нашого калькулятора
1. Клік по кнопці "1" - три рази. Тут ми перевіряємо чи була натиснута якась клавіша, що означає операцію і якщо вона таки була натиснута, то вимикаємо її, щоб наступний клік дав можливість дописати 1 в кінець числа.
2. Клік по "+". У ньому ми надали деякій змінній значення 1. Ця змінна і зволила у п. 1 перевірити чи клікали ми по кнопці. А ще ми запам’ятали у іншу змінну перше число. Бо наступний клік по кнопці цифри повинен нам розпочати введення нового числа.
3. Знову клік по кнопці "1". Цього разу вже все у нас прописано.
4. Клацаємо по кнопці "=".

Тож давайте розглянемо, що повинно буди прописано в обробнику, до речі якої події для кнопки "=" ?

Правильно в обробнику для події OnClick.
Отож перше, на що ми повинні звернути увагу, так це на те, що клацаючи по кнопці "=" ми завершили ввдення 2-го числа. А отже хоч і не обов’язково, але я думаю буде зрозуміліше ми збережемо це число, а воно в нас лежить на екрані, у змінну.
Тому в розділі опису змінних, після слова var ми допишемо ще одну змінну. Якщо для першого числа ми визначали змінну з ім’ям ch1, то для другого числа назвемо ch2. А отже і наш код матиме вигляд аналогічний до попереднього
ch2:=StrToFloat(Edit1.Text);
Але ця команда вже буде записана в обробнику OnClick для кнопки "=".
Залишилось тепер виконати ту дію, кнопку для якої ми натискали. Але яку? Звідки програма знає, що ми клацнули "+", а не "-". 
Якщо подумати швидко і неправильно то в голову прийде думка, що коли ми натискали "+" в обробнику події записали команду op:=1;  для того, щоб увімкнути дію. Але якщо подумати правильно, то ми тут же скажемо, що ми її ж і вимикали (op:=0; ) тоді коли клацали по "1". А оскільки ми її вимкнули, то програма вже не буде знати, що ми натискали дію. Тому нам потрібно ще якось запам’ятати те, що ми клікали по кнопці "+".

Нічого кращого не приходить в голову як скористатись ще однією змінною. Назвемо її diya. 

Тепер давайте подумаємо де вона повинна увімкнутися, щоб у обробнику події OnClic для кнопки "=" ми могли перевірити яку ж саме дію потрібно виконувати зі змінними ch1 та ch2.

Мабуть більшість уже здогадалися, що це потрібно зробити у обробнику події OnClick для кнопки "+". 
А яке значення надати змінній diya, щоб програма знала, що ми натиснули саме "+". Відкрию таємницю! Програмі абсолютно байдуже яке значення Ви покладете у змінну. Адже саме це значення Ви і будете перевіряти у обробнику OnClick для кнопки "=".

Досить слів більше дій.

Щоб у програмі існувала можливість пам’ятати кнопку з якою дією ми клацнули нам потрібно у обробнику події OnClick для кнопки "+" дописати ще одну команду.
diya:=1;
Тепер наш код для цієї процедури міститиме наступні команди:
ch1:=StrToFloat(Edit1.Text);op:=1; diya:=1;

Ось тепер ми матимемо змогу перевірити, для кнопки "=", яку ж саме дію потрібно виконувати! 
Після отримання другого числа, ми можемо перевірити значення змінної diya.  На допомогу знову прийде оператор розгалуження. А тому маємо наступний код.
ch2:=StrToFloat(Edit1.Text);
IF diya=1 THEN Edit1.Text:=FloatToStr(ch1+ch2);

Впишіть ці дві команди у обробник події OnClick для кнопки "=" і ви побачите результат додавання двох чисел.


А тепер самостійно

1. Після того, як Ви побачите результат своєї роботи (суму чисел 111 і 11) після натискання кнопки "=" Наступне клацання по кнопці "1" повинно розпочати введення нового числа замінивши старе значенн. Подумайте, що потрібно додати до обробника для кнопки "=", щоб це відбулося.
2. Продублюйте код із обробника для кнопки "1" на решту кнопок, але зверніть увагу на кнопку "0".
3. Як побачити на екрані "від’ємне" число? Додайте відповідну кнопку до свого калькулятора.
4. Коли можна натискати кнопку "," (Для дійсних чисел використовується не кома, а крапка) і як повинна працювати процедура-обробник події OnClick для кнопки "," якщо ми клацнемо по ній двічі?
5. Допишіть обробники події до решти  дій.
6. У калькулятора є кнопка "С" яка означає скидання результату. Що при цьому з’являється на екрані?
7. Якщо наважились зробити кнопку "С" то як зміниться обробник події для кнопок-цифр?

Ну це поки що все. Якщо будуть потрібні підказки пишіть про це у коментарях!ґ

А ще питання, який з калькуляторів пекельніший? ;-)

До зустрічі і успіхів у вивченні програмування!