вівторок, 31 січня 2017 р.

Lazarus. Урок 11. Edit1 і Пекельний калькулятор

Привіт. Минулого разу ми познайомилися з текстовим полем і поняттям змінної величини. Розглянули як можна описати змінну, щоб вона була "видимою" у будь-якій процедурі. Також у попередньому пості було зазначено, що для того, щоб позначити змінну або як ми її ще можемо назвати "комірка пам’яті" містила в собі ціле число слід вказати для неї тип даних int64. Тобто у тексті програми ми повинні написати:
firstnumber:int64;
Але ще раз хочу звернути увагу, на те, що такий запис дозволить використати змінну firstnumber для зберігання тільки цілих чисел. А якщо нам потрібно зберігати у ній цілі числа і числа, що містять дробову частину (десятковий дріб) то потрібно буде використати інший тип даних - real.  І тоді опис змінної матиме вже вигляд:
firstnumber:real;
І звичайно слід зауважити, що і int64 i real не єдині службові слова які описують як цілі так і дійсні числа. Але про це як завжди пізніше.
Сьогодні у нас на черзі "Пекельний калькулятор"
Нашою задачею буде навчитися обробляти числа введені в текстове поле так, щоб ми мали змогу використовувати їх при обчисленні.
Перш за все потрібно пригадати, що текстове поле Edit містить дані у текстовому форматі. І перш за все ці дані програма розуміє як текст, а не число. Але звичайно існує можливість перетворити текст на число. Для цього в  Lazarus існує дві команди (функції).
StrToInt() - переводить текстові дані у ціле число.
StrToFloat() - переводить текстові дані у дійсне число (і ціле і дробове)
Приклад:
firstnumber:=StrToInt(Edit1.text);
secondnumber:=StrToFloat(Edit2.text);
Як бачимо у прикладах використовуються дві змінні яким надається значення з текстових полів. У першому прикладі у змінну firstnumber записується ціле число з текстового поля Edit1, а у другому - змінна secondnumber набуде значення, що зберігається у текстовому полі Edit2. 
Обидві змінні повинні бути описані після слова var і обом повинен бути присвоєний відповідний тип даних.
Після подібних операцій можна буде скористатись кодом:
sum:=a+b;
Записуючи цей приклад ми розуміємо, що у нашій програмі ми описали три змінні: a, b, sum і надали змінним a, b значень з текстових полів.
Але ж після того, як програма запише у змінну sum суму чисел які зберігаються у a та b, було б непогано якби отримане число відобразилось у текстовому полі. 
І тут знову є маленьке зауваження. У змінній sum зберігається число, а текстове поле може містити тільки текст. Отже нам потрібно конвертувати число в текст. Для цього існують обернені функції:
IntToStr() та FloatToStr()
а прикладом може слугувати команда: 
Edit1.text:=IntToStr(sum);

Таким чином викорстовуючи ці чотири функції ми можемо отримувати дані з текстових полів та зберігати їх у змінних, а при необхідності можемо значення змінної перевести в текст та відобразити у текстовому полі.


Завдання

Подивіться відео, щоб зрозуміти як повинен працювати Ваш "Пекельний калькулятор"




Маленька підказка.
Пекельним калькулятор є тому, що в ньому використовуються лише ті дії і ті компоненти та їх властивості які розглянуті у попередніх уроках. Це не є правильним бо існують набагато простіші способи реалізації цього завдання. Але для тренування я думаю буде корисно.
А тому  ось сама підказка. У програмі використано ТРИ текстові поля, ДВІ кнопки Далі (ті, що зі знаком >) ну і нарешті чотири кнопки які означають відповідні операції. А ще дві змінні : а та b.
А ще скріншот дизайнера форми.
І нарешті додаткове завдання.
На відео після натискання "другої" кнопки "далі" текстове поле не "очистилось". Виправте цей недолік. ;-)