Простий калькулятор Delphi

З жовтня 2016 року Embarcadero пропонує безкоштовну версію Delphi (Delphi 10.1 Berlin Starter Edition). Є кілька обмежень, але це бажаний крок до того, щоб більше програмістів усвідомило радощі Delphi. Вони кажуть: "Пропозицію можна відкликати в будь-який час", тому не зволікайте, якщо хочете перевірити її. Будь ласка, використовуйте посилання для зворотного зв'язку, щоб повідомити мене, якщо посилання перестане працювати.

delphi

Підтримка DFF - Магазин

Якщо ви купуєте в Амазонка у будь-якому випадку, подумайте про використання цього посилання.

Ми отримуємо кілька центів від кожної покупки. Спасибі


Підтримати DFF - Пожертвувати

Якщо ви користуєтеся веб-сайтом з точки зору знань, вартості розваг чи чогось іншого, корисного, подумайте про пожертву через PayPal, щоб допомогти покрити витрати. (Для пожертви за допомогою кредитної картки не потрібен рахунок PayPal.) Транзакція безпечна.

Менса ® Щоденні головоломки

Протягом більше 15 років календарі «Менса Page-A-Day» пропонують кілька головоломок на рік для мого задоволення від програмування. Кодування "вирішувачів" - найцікавіше, але багато програм також дозволяють вирішувати користувачеві, зручно для типу "заповнення пропусків". Нижче наведено посилання Amazon на два останні роки.

(Підказка: Якщо ви можете почекати, календарі поточного року, як правило, продаються в січні.)

Зв'язок

Відгук: Надішліть електронне повідомлення з коментарями щодо цієї програми (або чогось іншого).

опис проблеми

Ось проста 4-функційна програма-калькулятор, написана для задоволення деяких специфічних вимог. Це цікава історія: Калькулятор написаний для факультету психології університету для тестування дітей молодшого шкільного віку. Оскільки для використання на екрані з презентацією PowerPoint (PowerPoint - це програма слайд-шоу від Microsoft), вимога полягала в тому, щоб вона була якоюсь широкою та короткою. Таким чином він поміститься в нижній частині екрана. Окрім того, оскільки хлопчики можуть не дуже добре натискати клавіші, вони хотіли, щоб натискання клавіш відображалося так само, як і відповіді.

Версія 2 цієї програми виявилася значно вишуканішою, включаючи можливість показу або приховування кнопок, ні * або / наприклад, якщо проблеми були всі + і - типу. Також нам потрібен файл журналу для запису натискань клавіш та часу між записами (не питайте мене чому, я просто програміст). І зараз я додаю можливість керувати слайд-шоу з програми, дозволяючи дітям натискати на Далі, щоб перейти до наступного слайда.

Але наразі давайте попрацюємо над простою версією.

Передумови та методи

Ми збираємося побудувати звичайний калькулятор зліва направо, який обробляє числа при введенні. Далі ми обговоримо, як вимога відображати записи робить справи трохи складнішими.

Я просто витратив 30 хвилин на документування алгоритму тут, але стер все, бо зрозумів це програма є алгоритмом. Паскаль досить читабельний, що перегляд коду буде більш зрозумілим описом процесу, ніж будь-що, що я можу написати природною мовою. Просто визнайте, що Windows - це система обміну повідомленнями, тому зазвичай програми просто бовтаються, нічого не роблячи, поки не отримають повідомлення. Коли ви бачите підпрограми типу DigitBtnClick, PlusBtnClick, і т. д. ця процедура - це та, яка була викликана при натисканні на цю кнопку.

Немає великої різниці в обробці цифрових клавіш, тому я написав AddDigit процедура відображення цифри та додавання до рядкової версії числа, що будується. Подібним чином, більша частина обробки операцій схожа, поки ми пам’ятаємо складати, віднімати, множити або ділити, коли прийде час. Отже, ми маємо HandleOp процедура для цих речей. Зверніть увагу, що ми не можемо нічого зробити, коли користувач входить в операцію, оскільки у нас ще немає другого значення. Отже, ми просто триматимемося доти, поки нам це не знадобиться. Ми також знаємо, що користувач закінчив вводити значення, коли бачимо код операції, тому ми можемо обробити його відповідно до оператора, який передував йому, і підготуватися до побудови наступного числа.

Є Скинути процедура, яка викликається для очищення дисплеїв та скидання внутрішніх прапорів тощо. Ми маємо це робити при початковому введенні або якщо користувач натискає Ясно, або коли користувач натискає наступну цифру після натискання = ключ.

Програма має 55 або близько того, написаного користувачем рядків коду, більше, ніж я міг би здогадатися. Але тут є кілька хитрих речей.

Нам потрібно утримувати користувача від введення в число більше однієї десяткової коми.
Нам потрібно розумно поводитися з дисплеєм, коли * або/змішуються з + або -. У вашому звичайному калькуляторі і в цьому, якщо ви введете 1, +, 2, *, 3, результат буде 9, оскільки 1 + 2 = 3 і 3 * 3 дорівнює 9. Але через правила пріоритету арифметики, множення та ділення у виразах виконуються перед додаванням та відніманням, тому 1 + 2 * 3, записане як вираз, повинно = 7. У цій програмі ми вирішуємо проблему, вставляючи дужки в вираз, тому наведений приклад відображається як (1+ 2) * 3 = 9.
Щоб зменшити кількість рядків коду, я використав трюк, який я, мабуть, не використовував би в більш складному проекті: Замість того, щоб мати 10 різних процедур для обробки кнопок від 0 до 9, я назвав їх Btn0, Btn1, Btn2 тощо і витягніть 4-й символ імені як бажану цифру в загальній процедурі.

Я думаю, що це повинно пояснити достатню кількість логіки програми, тому продовжуйте і дивіться.

Запуск/вивчення програми

Перегляньте екстракт джерела
Завантажити джерело
Завантажте виконуваний файл

Пропозиції щодо подальших досліджень

Логічні розширення включають додавання клавіші "живлення" (зазвичай відображається як Exp або ^ на клавішах калькулятора). Інші загальні клавіші, які ви можете додати, включають Sqrt та 1/x, кнопки пам'яті, а також будь-які інші, про які ви можете подумати. Хіба це не чудово? У вас може бути перший калькулятор з клавішею Фібоначчі, клавішею "Отримати наступне велике просте число" або клавішею "Розмножити це число".
Можливо, вам захочеться переставити кнопки в більш нормальну конфігурацію. Підказка: Утримуючи клавішу Shift, натискаючи купу кнопок, і всі вони будуть вибрані. Тоді, якщо ви клацніть правою кнопкою миші та виберіть меню "Вирівняти", щоб кнопки вишикувались, розмістили їх порівну тощо.
Тут немає перевірки діапазону, тому, можливо, можна зробити погані речі, якщо розділити на 0 або спробувати дуже великі результати. Ми поговоримо про обробку помилок у майбутньому, але якщо ви хочете заглянути вперед, перевірте Спроби/Крім структур.

Веселіться та надішліть мені будь-які цікаві результати!