Розробка калькулятора для інженерних розрахунків

Аналіз етапів шифрування тексту. Програмно-апаратна характеристика комп’ютера. Створення кнопкової форми в Delphi. Розробка і опис алгоритму. Діаграма прецедентів проектованої системи. Інструкція роботи користувача з системою. Керівництво програміста.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 03.12.2014
Размер файла 999,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

КИЇВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ ІМЕНІ ТАРАСА ШЕВЧЕНКА

ОПТИКО-МЕХАНІЧНИЙ КОЛЕДЖ

Циклова комісія спеціальних дисциплін спеціальності

5.05010301 «Розробка програмного забезпечення» та математики

КУРСОВА РОБОТА

з дисципліни «Інструментальні засоби візуального програмування»

на тему: «Розробка калькулятора для інженерних розрахунків»

Студент 3-го курсу групи ПР-31

напряму підготовки 050103

«Програмна інженерія»

спеціальності 5.05010301

«Розробка програмного забезпечення»

Крикун Владислав Валерійович

м. Київ -- 2014 рік

Зміст

  • Реферат
  • Перелік скорочень, умовних позначень, символів, одиниць і термінів
  • вступ
  • Розділ 1. Загальна частина
    • 1.1 Постановка задачі
    • 1.2 Характеристика апаратно-програмної частини
    • 1.3 Опис мови і середовища програмування
    • 1.4 Опис предметної області і напрямків дослідження
  • Розділ 2. Реалізація системи
    • 2.1. Розробка алгоритму і його опис
    • 2.2 Розробка інтерфейсу користувача
    • 2.3 Інструкція роботи користувача з системою
    • 2.4 Керівництво програміста
  • Висновки
  • Список літератури
  • додатки
  • Реферат
  • Ключові слова:КАЛЬКУЛЯТОР, ГРАДУСИ, РАДІАНИ,МАСИВ.
  • Як об'єкт дослідження в курсовій роботи виступають «математичні розрахунки», а предметом дослідження -- «інженерний калькулятор».
  • Мета дослідження: розробити систему «Розробка застосування інженерний калькулятор» для автоматизації наочної роботи викладачів, студентів ВНЗ, а саме для важких розрахунків з використанням тригонометричних функцій, логарифмів та інше.
  • Завдання дослідження:

1) розглянути основні математичні методи вирішення рівнянь, прикладів;

2) дізнатися про різні способи отримання і перевірки результату

3) провести обстеження і аналіз отриманого результату;

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

Перелік скорочень, умовних позначень, символів, одиниць і термінів

ІК - інженерний калькулятор.

ПО - предметна область.

ЕМ- елементи масиву.

комп'ютер delphi програміст алгоритм

Вступ

Актуальність теми дослідження полягає в тому, що отримання результату вирішення (логарифмів, тригонометричних функцій, знаходження мінімальних/максимальних елементів масиву, виведення результату в градусах/радіанах)-- входить в курс вивчення Алгебри, Геометрії, Математичного аналізу, Математичних методів та інше.

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

Інженерний калькулятор дозволяє робити складні розрахунки із застосуванням різних тригонометричних функцій: синуса, косинуса, тангенса, котангенса. Калькулятор дозволяє зводити числа в ступінь, обчислювати логарифм числа.

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

Курсова робота складається з вступу, двох розділів, висновків, списку джерел та додатків.

У першому розділі: розглядаються основні математичні поняття , розглянуті різні підходи вирішення поставлених завдань, виділені і розглянуті основні етапи написання курсової роботи, проводиться обстеження і аналіз предметної області, обґрунтовується вибір архітектури для автоматизації наочної шахістів.

У другому розділі: наводиться опис розробки та впровадження застосування «Інженерний калькулятор» і розробляється інструкція користувача з експлуатації розробленої програми.

Розділ 1. Загальна частина

1.1 Постановка задачі

Проблемна ситуація виникає щоразу, коли має місце громіздкі функції/рівняння.

Виявлення та формулювання проблемної ситуації є одним з найбільш складних і відповідальних етапів процесу передпроектного обстеження організації. Чітке формулювання наявної проблемної ситуації є найбільш важливою сходинкою у вирішенні самої проблеми.

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

Виявлені проблеми, властиві обстеженій предметній області, представлені в таблиці 1.1.

Таблиця 1.1 -- Проблемні ситуації в шаховій грі

Найменування проблемної ситуації

Засоби рішення

Важкість реалізації вирішення великих за обсягом та важкістю прикладів

Створення відповідного оптимального алгоритму

Велика кількість затрати часу для вирішення та перевірки отриманого результату

Підвищення ефективності

Необхідність знаходити оптимальний алгоритм вирішення поставленого завдання

Автоматизація (машинне вирішення)

Все вищевикладене дозволяє зробити головний висновок, що для розв'язання важких прикладів необхідний потужний програмний продукт, який буде виконувати всі перераховані вище завдання.

Оскільки ІК має безліч функцій, то для цього необхідно було виконання додаткових завдань:

1) запам'ятовування отриманого результату;

2) вибір користувачем отримання результату (в радіанах чи в градусах);

3) знаходження максимального/мінімального елементу масивів;

4) можливість видалення введених даних;

5) розрахунок важких тригонометричних функцій;

6) введення числа у степінь;

7) знаходження факторіалу числа;

8) знаходження логарифму;

9) можливість введення дробу;

1.2 Характеристика апаратно-програмної частини

Програма даної курсової роботи розроблялась на комп'ютері з наступною апаратною і програмою конфігурацією (Таблиця 1.2).

Таблиця 1.2 -- Програмно-апаратна характеристика комп'ютера

Характеристики

Значення

Апаратна конфігурація

Тип центрального процесора

Intel Pentium E5200 2,5 GHz (socket 775)

Чіпсет системної плати

GigaByte GA-P31-DS3L

Системна пам'ять

2 x 2048 Мб (800 MHz DDR2)

Тип BIOS

Award Modular Bios v6.OOPG

Відеоадаптер

GeForce 9800GT (512 Mb)

Жорсткий диск

WesternDigital (640 Gb, 5400 RPM, SATA 2)

Програмна конфігурація

Операційна система

Microsoft Windows 7 Ultimate

Версія ОС

6.1.7601 (RTM)

Тип ядра ОС

64-bit

Пакет оновлення

Service Pack 1

Середовище програмування

Embarcadero RAD Studio

Версія середовища програмування

XE4

1.3 Опис мови і середовища програмування

Embarcadero ® RAD Studio XE6 -- повномасштабне рішення для розробки «нативних» застосувань для Windows, Mac, Android і iOS на основі єдиної бази вихідних кодів. Застосування можуть отримувати доступ до платформних API, датчиків та сервісів, забезпечуючи найкращий рівень взаємодії користувача, оскільки підтримують CPU і GPU.

RAD Studio збільшує продуктивність розробників в кілька разів, дозволяючи команді створювати «нативні» програми для ПК, планшетів, смартфонів і навіть гаджетів типу Google Glass на основі єдиного вихідного коду в рекордні терміни. Ця унікальна комбінація технологій розробки під різні платформи з генерацією «нативних» кодів означає, що швидке створення додатків без використання скриптових мов або віртуальних машин. Створювані додатки будуть виключно продуктивні.

Середовище дозволяє модернізувати Windows-програми за рахунок нових компонентів для роботи з апаратними датчиками і додати їм вид Windows7/8 за рахунок нових стилів VCL і компонентів для панелі завдань. Розширення функціональності Windows-застосувань на основі VCL легке за рахунок зв'язку їх з мобільними додатками і додатками на гаджетах за допомогою компонентів забезпечення взаємодії. Нові компоненти для взаємодії застосування (App Tethering) дозволяють доповнити наявні Windows VCL застосування функціоналом для мобільної роботи без необхідності перенесення програми вцілому. Розробники можуть створювати мобільні застосування як доповнення до існуючих систем, розробленим під Windows.

Тепер в середовищі можна створювати 64-розрядні програми для Windows за допомогою Delphi і C+, щоб отримати всі переваги найсучаснішого апаратного забезпечення, використовувати великі обсяги пам'яті і досягти максимум продуктивності. Усі технології для розробки під Windows підтримують 64-розрядну архітектуру, включаючи VCL, FMX, RTL, компілятори і відладники. Це дозволяє спростити міграцію існуючих VCL-програм на 64-розрядну Windows.

Рішення спрощує використання всіх можливостей і стилів ОС Windows 7 або Windows 8. , забезпечуючи безболісний перехід від непідтримуваної більше Windows XP до даних операційних систем. За допомогою RAD Studio XE6 розробники можуть модернізувати VCL застосування Windows -- взаємодіяти з багато віконними програмами за допомогою нових компонентів панелі завдань Windows , надати їм сучасний вигляд в стилі Windows 7 і Windows 8.1 або навіть власний дизайн, повністю управляти стилями зовнішнього подання програм, включаючи меню і границі вікна.

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

Рисунок 1.1 -- Структура FireDAC

RAD Studio тепер включає FireDAC -- високопродуктивну бібліотеку універсального доступу до даних для розробки застосувань для різних пристроїв, що взаємодіють з базами даними масштабу підприємства. FireDAC забезпечує прямий високошвидкісний доступ з Dephi до InterBase, SQLite, MySQL, SQL Server, Oracle, PostgreSQL, DB2, SQL Anywhere, Advantage DB, Firebird, Access, Informix і багатьом іншим.

Підтримується інтеграція з хмарними сервісами від постачальників Back-end as a Service ( BaaS ), Kinvey і Parse, за рахунок готових компонентів. Ви зможете використовувати сервіси нотифікації, управління користувачами і зберігання. Для цього не знадобиться створювати власні сервіси або забезпечувати їх підтримку. З легкістю можна додати призначену для користувача автентифікацію до ваших програм, використовувати нотифікацію для залучення ваших користувачів, отримати доступ до даних і сховищ об'єктів «в хмарах». Бібліотека REST Client Library доступна для всіх платформ і спрощує виклик web-сервісів REST сторонніх постачальників.

За допомогою технології LiveBindings кожен компонент може взаємодіяти з даними. LiveBindings забезпечує простий механізм для зв'язування елементів управління інтерфейсу користувача з властивостями об'єктів і полями наборів даних. Візуальний дизайнер допомагає створювати зв'язки між даними і елементами інтерфейсу користувача, просто «рисуючи» лінії між властивостями компонентів. LiveBindings спрощує зв'язування даних і елементів інтерфейсу на основі інтуїтивно-зрозумілих маніпуляцій.

За допомогою RAD Studio команда може одночасно прототипувати і розробляти застосування на основі стандарту C++ або мови Object Pascal для різних пристроїв одночасно. Це означає, що у вас не буде різнорідних проектів з різними графіками виконання, а бюджети не потрібно буде розділяти між різними командами, що використовують різні інструменти, мови і бібліотеки для кожної апаратної платформи.

За допомогою платформи застосувань для різних пристроїв в RAD Studio можна створювати дійсно взаємодіючі з даними рішення. Програми забезпечать доступ в режимі реального часу до корпоративних даних і хмарних сервісів.

Рисунок 1.2 -- RAD Studio Multi-Device Application Platform

Delphi -- імперативна, структурована, об'єктно-орієнтована мова програмування, діалект Object Pascal. Починаючи з середовищв розробки Delphi 7.0, в офіційних документах Borland стала використовувати назву Delphi для позначення мови Object Pascal. Починаючи з 2007 року вже мова Delphi (похідна від Object Pascal ) почала жити своїм самостійним життям і зазнавала різні зміни, пов'язані з сучасними тенденціями (наприклад, з розвитком платформи .NET) розвитку мов програмування: з'явилися class helpers, перевантаження операторів та інше.

Спочатку середовище розробки Delphi було призначена виключно для розробки застосувань Microsoft Windows, потім був реалізований варіант для платформ Linux, однак після випуску в 2002 році Kylix 3 його розробка була припинена, і незабаром було оголошено про підтримку Microsoft .NET, яка, в свою чергу, була припинена з виходом Delphi 2007.

Незалежна, стороння реалізація середовища розробки проектом Lazarus (Free Pascal, компіляція в режимі сумісності з Delphi ) дозволяє використовувати його для створення застосувань на Delphi для таких платформ, як Linux, Mac OS X і Windows CE.

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

Так, складність об'єктного C++, в порівнянні з C, зросла вельми істотно і ускладнила його вивчення в якості першої мови програмування, чого не можна сказати про Object Pascal щодо Pascal .

Нижче перераховані деякі відмінності синтаксичних конструкцій Delphi від сімейства C-подібних мов (C/C++/Java/C#):

· У Delphi формальний початок будь-якої програми чітко відрізняється від інших ділянок коду, і розташований в певному, єдиному в рамках проекту, вихідному файлі з розширенням dpr (тоді як інші файли вихідних текстів програми розташовані у файлах з раширением pas). У С-подібних мовах програмування у якосты входу зазвичай використовується глобальна функція або статичний метод з ім'ям main і певним списком параметрів, причому така функція може бути розташована в будь-якому з файлів вихідного тексту проекту.

· У Delphi ідентифікатори типів, змінних і ключові слова читаються незалежно від регістру: наприклад ідентифікатор SomeVar повністю еквівалентний somevar. Регістрозалежні ідентифікатори на початку комп'ютерної епохи прискорювали процес компіляції, і крім того, дозволяли використовувати дуже короткі імена. І хоча до теперішнього часу обидві ці практики, використання декількох ідентифікаторів, що розрізняються лише регістром, так само як і надмірна їх лаконічність, засуджені і не рекомендовані до застосування, практично всі успадковані від С мови, C++, Java, C# є регістрозалежними, що, з одного боку вимагає досить великої уважності до оголошення та використання ідентифікаторів, а з іншого, допускається написання коду у вельми важкому стилі.

· У Delphi, у вихідних файлах pas (які, як правило, і містять основне тіло програми), на рівні мовних засобів запроваджено суворий поділ на інтерфейсний розділ і розділ реалізації. У інтерфейсній частині містяться лише оголошення типів і методів, тоді як код реалізації в інтефейсної частини не допускається на рівні компіляції. Подібне розділення властиво також мовам C/C++, де умовно, в рамках культури та парадигми програмування вводиться поділ на заголовні і файли реалізації, але подібний поділ не забезпечується на рівні цієї мови або компілятора. У C# і Java такий поділ усунуто зовсім: реалізація методу, як правило, слідує відразу ж після його оголошення. Інкапсуляція забезпечується лише приналежністю методу до тієї чи іншої області видимості. Для перегляду однієї тільки інтерфейсної частини модуля вихідного коду використовуються спеціальні засоби.

· У Delphi метод або функція чітко визначаються зарезервованими для цього ключовими словами procedure або function, тоді як в C-подібних мовах позначається лише дужками.

· У Delphi початок і кінець програмного блоку виділяються ключовими словами begin і end , тоді як в C-подібних мовах програмування для цих цілей використовуються фігурні дужки {}. Таким чином, в Delphi досягається краща читаність коду.

· У Delphi цикли з передумовою і постумовоювідрізняються: кінець циклу з постумовою не можна прийняти за початок циклу з передумовою .

· У Delphi операція присвоєння значення змінної позначається за допомогою двокрапки зі знаком рівності :=, що є запозиченням з математичної нотації. Знак рівності без двокрапки --це оператор перевірки рівності, який повертає булеве значення. Навпаки, у C-подібних мовах оператором присвоювання є знак одинарний знак рівності, а оператором перевірки рівності -- подвійний == .

· У Delphi об'єктне і об'єктно-орієнтоване програмування хоч і заохочується, проте не є єдино можливим. Так, припустимо (на відміну від C#) оголошення і використання глобальних або статичних функцій і змінних. Мова C# примусово об'єктна. Глобальні, без прив'язки до класу, функції заборонені. Value-типи, на зразок структур struct, успадковані від загального типу C#, незважаючи на те, що самі по собі вони не можуть бути успадковані (тобто, спадкування структур в C# заборонено). Разом з тим, екземпляри класів C# є неявно-посилальними типами, як і в Delphi.

· Для найбільш гнучкої й ефективної реалізації об'єктно-орієнтованого підходу в Delphi введені два механізму поліморфного виклику: класичний віртуальний, а також динамічний: якщо у випадку класичного віртуального виклику адреси всіх віртуальних функцій міститимуться в таблиці віртуальних методів кожного класу, то в разі з динамічним викликом, покажчик на метод існує лише в таблиці того класу, в якому він був заданий або перекритий.

Кожна написана програма мовою Delphi складається з заголовка програми (program NewApplication;), поля використаних модулів Uses (наприклад, Uses Windows, Messages, SysUtils і т.ін.), який може не входити в саму структуру, а також блоків опису та виконання (починаються складеним оператором begin і закінчуються end.).

Розширення файлів:

· .pas -- вихідний код модуля (pascal);

· .dpr -- вихідний код проекту (pascal);

· .dproj -- вихідний код проекту (xml);

· .dproj.local -- вихідний код проекту (xml);

· .dfm -- вихідний код форми;

· .dpk -- скомпільований пакет;

· .dcu -- скомпільований модуль;

· .exe -- скомпільоване застосування;

· .res -- ресурси;

· .dsk -- прив'язки до файлів;

· .identcache -- кешування прив'язки до файлів.

1.4 Опис предметної області і напрямків дослідження

У даній курсовій роботі поставлено завдання щодо створення застосування інженерний калькулятор. Розроблена програма повинна автоматизувати вирішення різноманітних важких математичних завдань і бути універсальною. Також програма повинна надавати інформацію про:

- Максимальний/мінімальний елемент масиву;

- Виведення результату в радіанах/градусах;

- Отримання чіткого результату.

Програма повинна мати можливість легко, для користувача-непрофесіонала отримувати результат.

Розділ 2. Реалізація системи

2.1 Розробка алгоритму і його опис

Аналіз визначених вище завдань дозволяє виділити об'єкти проектованої системи і, побудувати її функціональну схему в нотації UML (рис. 2.1) -- діаграма прецедентів, яка призначена для опису поведінки системи та її функціональності

Рисунок 2.1 -- Діаграма прецедентів проектованої системи

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

Актор (на рис. 2.1 графічно позначений «чоловічком») - це множина логічно пов`язаних ролей, які виконуються при взаємодії з прецедентами або сутностями. Будь-які системи проектуються з розрахунку на те, що в процесі своєї роботи вони будуть використовуватись людьми і/або взаємодіяти з іншими системами. Сутності, з якими взаємодія система в процесі своєї роботи, називаються акторами, причому кожен актор очікує, що система буде вести себе виключно передбаченим чином.

2.2 Розробка інтерфейсу користувача

При написанні подібних систем зазвичай використовується метод спадаючого проектування.

Програмна система складається з проекту Project.dpr в який входить 3 модулів: Unit1,Unit2,Unit3(розширення *.pas).

Модулі, що реалізують основні функції, викликаються з основного модуля. Специфікація модулів відображена в таблиці 2.4. Допоміжні модулі використовуються в процесі роботи основного модуля. Ієрархічна підпорядкованість модулів програмного комплексу представлена на рис. 2.3.

Рисунок 2.3 - ієрархія модулів розроблюваної програми

Таблиця 2.4 -- Специфікація модулів ІС

Модуль

Призначення

Вхідні дані

Вихідні дані

Unit1

Форма математичних розрахунків (головний модуль)

Вибір дій користувачем

Отримання результату

Unit2

Форма для вибору оптимального алгоритму

Вибір дій користувачем

Результат дії вибір методу

Unit3

Форма розрахунків(допоміжна форма)

Вибір дій користувачем

Результат дії - отримання результату

2.3 Інструкція роботи користувача з системою

Запуск програмної системи здійснюється з запуску файлу Project1.exe. (рис. 2.4).

Рисунок 2.4 - Інженерний калькулятор

На формі Unit1 передбачено виведення результату в градусах (рис.2.5).

Рисунок 2.5 - отримання результату в градусах

2.4 Керівництво програміста

Таблиця 2.5

Характеристика

Значення

Назва програми

«Інженерний калькулятор»

Версія

1.0.0.0

Автор

КрикунВладиславОтчество

Мова програмування

Delphi (Object Pascal)

Рядків коду

1246

Розмір виконуваного файлу і DLLбез інформація відладника

3305560 байт

Об'єм пам'яті, що займають глобальні змінні

49452 байт

Об'єм пам'яті, що займають локальні змінні

16384 байт

Розмір виконуваного файлу

4,7 Mb (4780032 байт)

Мінімальні системні вимоги

Процесор

Intel Pentium 2 GHz

Оперативна пам'ять

512 Mb

Операційна система

MicrosoftWindows XP

Місце на жорсткому диску

8Mb

Додатково

Клавіатура, миша

Висновки

У процесі виконання курсової роботі була створена автоматизована система «Інженерний калькулятор», яка дозволить автоматизувати вирішення рівнянь/функцій.

У першому розділі розглянуто теоретичні питання розробки застосування. Розглянуто основні етапи проектування застосування шифру простої перестановки: дослідження предметної області, розробка архітектури системи, виконано проектування та створення системи для автоматизації наочної роботи шахових турнірів. Після обґрунтування необхідності автоматизації визначена загальна архітектура.

Другій розділ роботи містить опис розробки застосування «реалізації інженерного калькулятора», описується створення кнопкової форми в Delphi 7, яка визначає інтерфейс роботи з системою.

Застосування «Інженерний калькулятор» розроблена на основі аналізу основних етапів і технологій шифрування тексту.

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

Список літератури

1. ГОСТ 19.103-77 ЕСПД. Обозначение программ и программных документов.

2. ГОСТ 19.402-78 ЕСПД. Описание программы.

3. ГОСТ 19.505-79 ЕСПД. Руководство оператора. Требования к содержанию и оформлению.

4. ГОСТ 34.201-89. Информационная технология. Комплекс стандартов на автоматизированные системы. Виды, комплектность и обозначение документов при создании автоматизированных систем.

5. Климова Л.М. Delphi 7.Основы программирования. Решение типовых задач. Самоучитель. Издание третье. - М.: КУДИЦ- ОБРАЗ, 2006. - 480с.

6. Рубанцев А. Самоучитель Delphi в примерах, играх и программах. -Наука и техника.2011.-672с.

7. Санников Е.В.Курс практического программирования в Delphi. Объектно-ориентированное программирование.-Солон.2013-188с.

8. Фаронов В. Delphi. Программирование на языке высокого уровня: Учебник для вузов.СПБ.:Питер,2012.-640с.

9. Фленов М.А. Библия Delphi,3-е издание.- СПб.: БХВ-Петербург,2011.-388 с.

10. Хомоненко А.Д. Delphi 7. - СПб.: БХВ-Петербург, 2004. - 346 с.

Додаток А

СПЕЦИФІКАЦІЯ UA.ОМК.620111-05 93

Аркушів 2

Позначення

Найменування

Примітки

Документація

UA.ОМК.620111-02 81 01-1

KURSOVA.docx Пояснювальна записка

UA.ОМК.620111-02 34 01-1

HELP.pdf Інструкція користувача

Компоненти

UA.ОМК.620111-02 12 01-1

Project1.dpr Текст програми

UA.ОМК.620111-02 12 01-2

Unit1.pas Текст програми

UA.ОМК.620111-02 12 01-3

Unit2.pas Текст програми

UA.ОМК.620111-02 12 01-4

Unit3.pas Текст програми

UA.ОМК.620111-02 13 01-1

About.pdf Опис програми

Додаток Б

Текст програми UA.ОМК.620111-05 12

//Основний код проекту

program Project1;

uses

Forms,

Unit1 in 'Unit1.pas' {Form1},

Unit2 in 'Unit2.pas' {Form2},

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.CreateForm(TForm2, Form2);

Application.Run;

end.

//головниймодуль

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, StdCtrls, ExtCtrls, Buttons, Mask, Math, zoomingRN, XPMan,

ComCtrls,clipbrd;

type

TForm1 = class(TForm) //class(TMemo)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

Panel1: TPanel;

Panel2: TPanel;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

RadioButton3: TRadioButton;

RadioButton4: TRadioButton;

RadioButton5: TRadioButton;

RadioButton6: TRadioButton;

RadioButton7: TRadioButton;

SpeedButton1: TSpeedButton;

SpeedButton2: TSpeedButton;

SpeedButton3: TSpeedButton;

SpeedButton4: TSpeedButton;

SpeedButton5: TSpeedButton;

SpeedButton6: TSpeedButton;

SpeedButton7: TSpeedButton;

RadioButton10: TRadioButton;

RadioButton11: TRadioButton;

Inv: TCheckBox;

Hyp: TCheckBox;

Memo1: TMemo;

Panel3: TPanel;

XPManifest1: TXPManifest;

Panel4: TPanel;

Panel5: TPanel;

procedure FormCreate(Sender: TObject);

procedure RadioButton4Click(Sender: TObject);

procedure SpeedButton51Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure SpeedButton40Click(Sender: TObject);

procedure SpeedButton55Click(Sender: TObject);

procedure SpeedButton17Click(Sender: TObject);

procedure SpeedButton5Click(Sender: TObject);

procedure SpeedButton1Click(Sender: TObject);

procedure SpeedButton2Click(Sender: TObject);

procedure SpeedButton3Click(Sender: TObject);

procedure SpeedButton11Click(Sender: TObject);

procedure SpeedButton12Click(Sender: TObject);

procedure SpeedButton13Click(Sender: TObject);

procedure SpeedButton14Click(Sender: TObject);

procedure SpeedButton15Click(Sender: TObject);

procedure SpeedButton23Click(Sender: TObject);

procedure SpeedButton56Click(Sender: TObject);

procedure SpeedButton4Click(Sender: TObject);

procedure SpeedButton46Click(Sender: TObject);

procedure SpeedButton10Click(Sender: TObject);

procedure SpeedButton9Click(Sender: TObject);

procedure SpeedButton7Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure N5Click(Sender: TObject);

private

{ Private declarations }

{ Public declarations }

end;

var

Form1: TForm1;

prover, glob_check,skob,nev,trig:boolean;

obrazec1,obrazec2:extended;

znac_oper:char;

obrazec12,zn1,zn2,zn: ZReal;

big: int64;

zt,zt1,zt2,pamet:string;

i,j,i_local,c,meraisch,t,sk: integer;

a:array [0..1000] of string;

b:array [0..1000] of char;

implementation

uses Unit2;

{$R *.dfm}

function zr_e (stroka: string): string;

var n:integer;

begin

zn:=strtozr(stroka);

zn2:=ZRToLongInt(zn,-1);

zn1:= subzr(zn,zn2);

if ( ComparisonZR(zn1,realtozr(0.0000001))=-1) then

begin

zn:= ZRToLongInt(zn,-1);

stroka:=zrtostr(zn);

end;

if ( ComparisonZR(zn1,realtozr(0.9999))=1) and ( ComparisonZR(zn1,realtozr(1))=-1) then

begin

zn:= ZRToLongInt(zn,1);

stroka:=zrtostr(zn);

end;

for n:=1 to length(stroka) do

if stroka[n]='+' then

begin

stroka[n-1]:='e';

delete(stroka,n,1);

end;

for n:=1 to length(stroka) do

if stroka[n]='-' then

begin

stroka[n-1]:='e';

end;

zr_e:=stroka;

end;

function Rezul2 (q:integer): string;

var d,n,z,r,p:integer;

begin

repeat

d:=0;

z:=0;

for i:=1 to q do

if b[i]='(' then d:=i;

for i:=d to q do

if b[i]=')' then

begin

z:=i;

break;

end;

b[d]:='0';

b[z]:='0';

if ((z<>0) and (d<>0)) then begin

for i:=d+1 to z-1 do

begin

if ((a[i]<>'|') and (b[i]='^')) then

begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

zn2:=powerzr(zn1,zn2);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

end;

for i:=d+1 to z-1 do

begin

if (a[i]<>'|') then

begin

case b[i] of

'*': begin

n:=i+1

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

zn2:=multzr(zn1,zn2);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'l': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[n]);

zn1:=ZRToLongInt(zn1,-1);

zn2:=srtozr(a[i]);

zn2:=ZRToLongInt(zn2,-1);

zn:=inttozr(0);

while (ComparisonZR(zn,zn1)=(-1)){ or (ComparisonZR(zn,zn1)=0))} dо

begin

zn:=sumzr(zn,inttozr(1));

zn2:=multzr(zn2,inttozr(2));

end;

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'h': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[n]);

zn1:=ZRToLongInt(zn1,-1);

zn2:=strtozr(a[i]);

zn2:=ZRToLongInt(zn2,-1);

zn:=inttozr(0);

while (ComparisonZR(zn,zn1)=(-1)){ or (ComparisonZR(zn,zn1)=0))} do

begin

zn:=sumzr(zn,inttozr(1));

zn2:=divzr(zn2,inttozr(2));

end;

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'/': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

if (a[n]<>'0') then

begin

zn2:=divzr(zn1,zn2);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end

else begin rezul2:='Делитьнанульнельзя'; exit; end;

end;

'm': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

if (a[n]<>'0') then

begin

zn1:=divzr(zn1,zn2);

zn:=ZRToLongInt(zn1,-1);

zn:=multzr(zn,zn2);

zn1:=strtozr(a[i]);

zn2:=subzr(zn1,zn);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end

else begin rezul2:='Делитьнанульнельзя'; exit; end;

end;

'a': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zt2:='';

zt:='';

zt1:='';

zn1:=strtozr(a[i]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt:=zrtostr(zn2)+zt;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

zn1:=strtozr(a[n]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt1:=zrtostr(zn2)+zt1;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

obrazec1:=length(zt);

obrazec2:=length(zt1);

if (obrazec1>obrazec2) then

begin

obrazec1:=obrazec1-obrazec2;

for r:=1 to trunc(obrazec1) do

zt1:='0'+zt1;

end

else

begin

obrazec1:=obrazec2-obrazec1;

for r:=1 to trunc(obrazec1) do

zt:='0'+zt;

end;

obrazec1:=length(zt);

for r:=trunc(obrazec1) downto 1 do

zt2:= inttostr( strtoint( zt[r]) and strtoint (zt1[r]))+zt2;

p:=1;j:=0;

zn2:=inttozr(0);

zn1:=inttozr(1);

for r:=length(zt2) downto 1 do

begin

zn2:=sumzr(zn2,MultZR(zn1,strtozr(zt2[r])));

zn1:=multzr(zn1,inttozr(2));

end;

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

end;

end;

end;

for i:=d+1 to z-1 do

begin

if (a[i]<>'|') then

begin

case b[i] of

'+': begin n:=i+1

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

zn2:=sumzr(zn1,zn2);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'-': begin n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

zn2:=subzr(zn1,zn2);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'x': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zt2:='';

zt:='';

zt1:='';

zn1:=strtozr(a[i]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt:=zrtostr(zn2)+zt;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

zn1:=strtozr(a[n]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt1:=zrtostr(zn2)+zt1;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

obrazec1:=length(zt);

obrazec2:=length(zt1);

if (obrazec1>obrazec2) then

begin

obrazec1:=obrazec1-obrazec2;

for r:=1 to trunc(obrazec1) do

zt1:='0'+zt1;

end

else

begin

obrazec1:=obrazec2-obrazec1;

for r:=1 to trunc(obrazec1) do

zt:='0'+zt;

end;

obrazec1:=length(zt);

for r:=trunc(obrazec1) downto 1 do

zt2:= inttostr( strtoint( zt[r]) xor strtoint (zt1[r]))+zt2;

p:=1;j:=0;

zn2:=inttozr(0);

zn1:=inttozr(1);

for r:=length(zt2) downto 1 do

begin

zn2:=sumzr(zn2,MultZR(zn1,strtozr(zt2[r])));

zn1:=multzr(zn1,inttozr(2));

end;

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'o': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zt2:='';

zt:='';

zt1:='';

zn1:=strtozr(a[i]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt:=zrtostr(zn2)+zt;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

obrazec1:=length(zt);

obrazec2:=length(zt1);

if (obrazec1>obrazec2) then

begin

obrazec1:=obrazec1-obrazec2;

for r:=1 to trunc(obrazec1) do

zt1:='0'+zt1;

end

else

begin

obrazec1:=obrazec2-obrazec1;

for r:=1 to trunc(obrazec1) do

zt:='0'+zt;

end;

obrazec1:=length(zt);

for r:=trunc(obrazec1) downto 1 do

zt2:= inttostr( strtoint( zt[r]) or strtoint (zt1[r]))+zt2;

p:=1;j:=0;

zn2:=inttozr(0);

zn1:=inttozr(1);

for r:=length(zt2) downto 1 do

begin

zn2:=sumzr(zn2,MultZR(zn1,strtozr(zt2[r])));

zn1:=multzr(zn1,inttozr(2));

end;

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

end;

end;

end;

end;

until d=0 ;

rezul2:=a[t];

a[t]:='|';

end;

function Rezul (q:integer) : string;

var z,d,n,r,p:integer;

begin

repeat

d:=0;

z:=0;

for i:=1 to q do

if b[i]='(' then d:=i;

for i:=d to q do

if b[i]=')' then

begin

z:=i;

break;

end;

b[d]:='0';

b[z]:='0';

if ((z<>0) and (d<>0)) then begin

for i:=d+1 to z-1 do

begin

if ((a[i]<>'|') and (b[i]='^')) then

begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

zn2:=powerzr(zn1,zn2);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

end;

for i:=d+1 to z-1 do

begin

if (a[i]<>'|') then

begin

case b[i] of

'*': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

zn2:=multzr(zn1,zn2);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'/': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

if (a[n]<>'0') then

begin

zn2:=divzr(zn1,zn2);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end

else begin rezul:='Делитьнанульнельзя'; exit; end;

end;

'l': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[n]);

zn1:=ZRToLongInt(zn1,-1);

zn2:=strtozr(a[i]);

zn2:=ZRToLongInt(zn2,-1);

zn:=inttozr(0);

while (ComparisonZR(zn,zn1)=(-1)){ or (ComparisonZR(zn,zn1)=0))} do

begin

zn:=sumzr(zn,inttozr(1));

zn2:=multzr(zn2,inttozr(2));

end;

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'h': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[n]);

zn1:=ZRToLongInt(zn1,-1);

zn2:=strtozr(a[i]);

zn2:=ZRToLongInt(zn2,-1);

zn:=inttozr(0);

while (ComparisonZR(zn,zn1)=(-1)){ or (ComparisonZR(zn,zn1)=0))} do

begin

zn:=sumzr(zn,inttozr(1));

zn2:=divzr(zn2,inttozr(2));

end;

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'm': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

if (a[n]<>'0') then

begin

zn1:=divzr(zn1,zn2);

zn:=ZRToLongInt(zn1,-1);

zn:=multzr(zn,zn2);

zn1:=strtozr(a[i]);

zn2:=subzr(zn1,zn);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end

else begin rezul:='Делитьнанульнельзя'; exit; end;

end;

'a': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zt2:='';

zt:='';

zt1:='';

zn1:=strtozr(a[i]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt:=zrtostr(zn2)+zt;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

zn1:=strtozr(a[n]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt1:=zrtostr(zn2)+zt1;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

obrazec1:=length(zt);

obrazec2:=length(zt1);

if (obrazec1>obrazec2) then

begin

obrazec1:=obrazec1-obrazec2;

for r:=1 to trunc(obrazec1) do

zt1:='0'+zt1;

end

else

begin

obrazec1:=obrazec2-obrazec1;

for r:=1 to trunc(obrazec1) do

zt:='0'+zt;

end;

obrazec1:=length(zt);

for r:=trunc(obrazec1) downto 1 do

zt2:= inttostr( strtoint( zt[r]) and strtoint (zt1[r]))+zt2;

p:=1;j:=0;

zn2:=inttozr(0);

zn1:=inttozr(1);

for r:=length(zt2) downto 1 do

begin

zn2:=sumzr(zn2,MultZR(zn1,strtozr(zt2[r])));

zn1:=multzr(zn1,inttozr(2));

end;

a[n]:=zr_e(zrtostr(zn2)); //a[n]:=Floattostr(Zrtoreal(zn2));

a[i]:='|';

end;

end;

end;

end;

for i:=d+1 to z-1 do

begin

if (a[i]<>'|') then

begin

case b[i] of

'+': begin n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

zn2:=sumzr(zn1,zn2);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'-': begin n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

zn2:=subzr(zn1,zn2);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'x': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zt2:='';

zt:='';

zt1:='';

zn1:=strtozr(a[i]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt:=zrtostr(zn2)+zt;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

zn1:=strtozr(a[n]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt1:=zrtostr(zn2)+zt1;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

obrazec1:=length(zt);

obrazec2:=length(zt1);

if (obrazec1>obrazec2) then

begin

obrazec1:=obrazec1-obrazec2;

for r:=1 to trunc(obrazec1) do

zt1:='0'+zt1;

end

else

begin

obrazec1:=obrazec2-obrazec1;

for r:=1 to trunc(obrazec1) do

zt:='0'+zt;

end;

obrazec1:=length(zt);

for r:=trunc(obrazec1) downto 1 do

zt2:= inttostr( strtoint( zt[r]) xor strtoint (zt1[r]))+zt2;

p:=1;j:=0;

zn2:=inttozr(0);

zn1:=inttozr(1);

for r:=length(zt2) downto 1 do

begin

zn2:=sumzr(zn2,MultZR(zn1,strtozr(zt2[r])));

zn1:=multzr(zn1,inttozr(2));

end;

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'o': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zt2:='';

zt:='';

zt1:='';

zn1:=strtozr(a[i]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt:=zrtostr(zn2)+zt;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

zn1:=strtozr(a[n]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt1:=zrtostr(zn2)+zt1;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

obrazec1:=length(zt);

obrazec2:=length(zt1);

if (obrazec1>obrazec2) then

begin

obrazec1:=obrazec1-obrazec2;

for r:=1 to trunc(obrazec1) do

zt1:='0'+zt1;

end

else

begin

obrazec1:=obrazec2-obrazec1;

for r:=1 to trunc(obrazec1) do

zt:='0'+zt;

end;

obrazec1:=length(zt);

for r:=trunc(obrazec1) downto 1 do

zt2:= inttostr( strtoint( zt[r]) or strtoint (zt1[r]))+zt2;

p:=1;j:=0;

zn2:=inttozr(0);

zn1:=inttozr(1);

for r:=length(zt2) downto 1 do

begin

zn2:=sumzr(zn2,MultZR(zn1,strtozr(zt2[r])));

zn1:=multzr(zn1,inttozr(2));

end;

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

end;

end;

end;

end;

until d=0 ;

for i:=1 to q do

begin

if ((a[i]<>'|') and (b[i]='^')) then

begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

zn2:=powerzr(zn1,zn2);

a[n]:=zr_e(zrtostr(zn2)); //a[n]:=Floattostr(Zrtoreal(zn2));

a[i]:='|';

end;

end;

for i:=1 to q do

if (a[i]<>'|') then

begin

case b[i] of

'*': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

zn2:=multzr(zn1,zn2);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'/': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

if (a[n]<>'0') then

begin

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

zn2:=divzr(zn1,zn2);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end else begin rezul:='Делениенанульнельзя'; exit; end;

end;

'm': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

if (a[n]<>'0') then

begin

zn1:=divzr(zn1,zn2);

zn:=ZRToLongInt(zn1,-1);

zn:=multzr(zn,zn2);

zn1:=strtozr(a[i]);

zn2:=subzr(zn1,zn);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end

else begin rezul:='Делитьнанульнельзя'; exit; end;

end;

'a': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zt2:='';

zt:='';

zt1:='';

zn1:=strtozr(a[i]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt:=zrtostr(zn2)+zt;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

zn1:=strtozr(a[n]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt1:=zrtostr(zn2)+zt1;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

obrazec1:=length(zt);

obrazec2:=length(zt1);

if (obrazec1>obrazec2) then

begin

obrazec1:=obrazec1-obrazec2;

for r:=1 to trunc(obrazec1) do

zt1:='0'+zt1;

end

else

begin

obrazec1:=obrazec2-obrazec1;

for r:=1 to trunc(obrazec1) do

zt:='0'+zt;

end;

obrazec1:=length(zt);

for r:=trunc(obrazec1) downto 1 do

zt2:= inttostr( strtoint( zt[r]) and strtoint (zt1[r]))+zt2;

p:=1;j:=0;

zn2:=inttozr(0);

zn1:=inttozr(1);

for r:=length(zt2) downto 1 do

begin

zn2:=sumzr(zn2,MultZR(zn1,strtozr(zt2[r])));

zn1:=multzr(zn1,inttozr(2));

end;

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'l': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[n]);

zn1:=ZRToLongInt(zn1,-1);

zn2:=strtozr(a[i]);

zn2:=ZRToLongInt(zn2,-1);

zn:=inttozr(0);

while (ComparisonZR(zn,zn1)=(-1)){ or (ComparisonZR(zn,zn1)=0))} do

begin

zn:=sumzr(zn,inttozr(1));

zn2:=multzr(zn2,inttozr(2));

end;

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'h': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[n]);

zn1:=ZRToLongInt(zn1,-1);

zn2:=strtozr(a[i]);

zn2:=ZRToLongInt(zn2,-1);

zn:=inttozr(0);

while (ComparisonZR(zn,zn1)=(-1)){ or (ComparisonZR(zn,zn1)=0))} do

begin

zn:=sumzr(zn,inttozr(1));

zn2:=divzr(zn2,inttozr(2));

end

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

end;

end;

for i:=1 to q do

if (a[i]<>'|') then

begin

case b[i] of

'+': begin n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

zn2:=sumzr(zn1,zn2);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'-': begin n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zn1:=strtozr(a[i]);

zn2:=strtozr(a[n]);

zn2:=subzr(zn1,zn2);

a[n]:=zr_e(zrtostr(zn2));

a[i]:='|';

end;

'x': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zt2:='';

zt:='';

zt1:='';

zn1:=strtozr(a[i]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt:=zrtostr(zn2)+zt;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

zn1:=strtozr(a[n]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt1:=zrtostr(zn2)+zt1;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

obrazec1:=length(zt);

obrazec2:=length(zt1);

if (obrazec1>obrazec2) then

begin

obrazec1:=obrazec1-obrazec2;

for r:=1 to trunc(obrazec1) do

zt1:='0'+zt1;

end

else

begin

obrazec1:=obrazec2-obrazec1;

for r:=1 to trunc(obrazec1) do

zt:='0'+zt;

end;

obrazec1:=length(zt);

for r:=trunc(obrazec1) downto 1 do

zt2:= inttostr( strtoint( zt[r]) xor strtoint (zt1[r]))+zt2;

p:=1;j:=0;

zn2:=inttozr(0);

zn1:=inttozr(1);

for r:=length(zt2) downto 1 do

begin

zn2:=sumzr(zn2,MultZR(zn1,strtozr(zt2[r])));

zn1:=multzr(zn1,inttozr(2));

end;

a[n]:=zr_e(zrtostr(zn2)); //a[n]:=Floattostr(Zrtoreal(zn2));

a[i]:='|';

end;

'o': begin

n:=i+1;

while (a[n]='|') do

begin

n:=n+1;

end;

zt2:='';

zt:='';

zt1:='';

zn1:=strtozr(a[i]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt:=zrtostr(zn2)+zt;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

zn1:=strtozr(a[n]);

zn1:=ZRToLongInt(zn1,-1);

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

zt1:=zrtostr(zn2)+zt1;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

obrazec1:=length(zt);

obrazec2:=length(zt1);

if (obrazec1>obrazec2) then

begin

obrazec1:=obrazec1-obrazec2;

for r:=1 to trunc(obrazec1) do

zt1:='0'+zt1;

end

else

begin

obrazec1:=obrazec2-obrazec1;

for r:=1 to trunc(obrazec1) do

zt:='0'+zt;

end;

obrazec1:=length(zt);

for r:=trunc(obrazec1) downto 1 do

zt2:= inttostr( strtoint( zt[r]) or strtoint (zt1[r]))+zt2;

p:=1;j:=0;

zn2:=inttozr(0);

zn1:=inttozr(1);

for r:=length(zt2) downto 1 do

begin

zn2:=sumzr(zn2,MultZR(zn1,strtozr(zt2[r])));

zn1:=multzr(zn1,inttozr(2));

end;

a[n]:=zr_e(zrtostr(zn2)); //a[n]:=Floattostr(Zrtoreal(zn2);

a[i]:='|';

end;

end;

end;

rezul:=a[t];

end;

function DestoDr(x2: string;y:integer): string;

var

str:string;

x,x1:extended;

m:int64;

begin

x:=strtofloat(x2);

zn1:=strtozr(x2);

zn1:=ZRToLongInt(zn1,-1);

zn1:=abszr(zn1);

case y of

8: begin

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(8));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(8));

zn2:= SubZR(zn1,zn2);

str:=zrtostr(zn2)+str;

zn1:=divzr(zn1,inttozr(8));

zn1:=ZRToLongInt(zn1,-1);

end;

end;

{while (trunc (x)<>0) do

begin

str:=floattostr(trunc (x) mod 8)+str;

x:=trunc (x) div 8;

end;

end; }

2: begin

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(2));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(2));

zn2:= SubZR(zn1,zn2);

str:=zrtostr(zn2)+str;

zn1:=divzr(zn1,inttozr(2));

zn1:=ZRToLongInt(zn1,-1);

end;

end;

16: begin

while (ComparisonZR(zn1,inttozr(0))<>0) do

begin

zn2:=divzr(zn1,inttozr(16));

zn2:=ZRToLongInt(zn2,-1) ;

zn2:=multzr(zn2,inttozr(16));

zn2:= SubZR(zn1,zn2);

case zrtoint(zn2) of

10:str:='A'+str;

11:str:='B'+str;

12:str:='C'+str;

13:str:='D'+str;

14:str:='E'+str;

15:str:='F'+str;

else str:=zrtostr(zn2)+str;//str:=floattostr(trunc (x) mod 16)+str;

end;

zn1:=divzr(zn1,inttozr(16));

zn1:=ZRToLongInt(zn1,-1);

end;

end;

end;

DestoDr:=str;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

trig:=false;

nev:=false;

meraisch:=10;

skob:=false;

sk:=0;

panel3.Caption:='';

memo1.Text:='0';

glob_check:=True;

t:=0;

for i:=1 to 1000 do

begin

a[i]:='|';

b[i]:='0';

end;

Memo1.Alignment := taRightJustify;

Memo1.MaxLength := 32;

Memo1.WantReturns := false;

Memo1.WordWrap := false;

speedbutton52.Enabled:=false;

speedbutton53.Enabled:=false;

speedbutton54.Enabled:=false;

speedbutton55.Enabled:=false;

speedbutton30.Enabled:=false;

end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);

begin

MultiLineMemoToSingleLine(Memo1);

if (glob_check=true) then memo1.Text:='';

case key of

'0'..'9': ;

'a'..'z': chr(0);

#8: begin

if memo1.Text='' then memo1.Text:='0';

glob_check:=true;

end;

',': begin

for i:=length(memo1.Text) downto 1 do

if pos(memo1.Text[i],',')=1 then key:=chr(0);

end ;

else key:= chr(0);

end;

glob_check:=false;

end; }

procedure TForm1.SpeedButton17Click(Sender: TObject);

begin

if meraisch=10 then begin

if (memo1.Text='0') or (memo1.Text='') then begin memo1.Text:='0,'; end

else

begin

j:=0;

for i:=length(memo1.Text) downto 1 do

if pos(memo1.Text[i],',')=1 then j:=j+1;

if (j=0) then memo1.Text:=memo1.Text+',';

end ;

glob_check:=false;

end;

{if (memo1.Text='0') or (memo1.Text='') then begin memo1.Text:='0,'; end;

glob_check:=false; }

end;

procedure TForm1.SpeedButton5Click(Sender: TObject);

begin

if (glob_check=true) then memo1.Text:='';

memo1.Text:=memo1.Text+'6';

glob_check:=false;

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

if (glob_check=true) then memo1.Text:='';

memo1.Text:=memo1.Text+'7';

glob_check:=false;

end;

procedure TForm1.SpeedButton2Click(Sender: TObject);

begin

if (glob_check=true) then memo1.Text:='';

memo1.Text:=memo1.Text+'8';

glob_check:=false;

end;

procedure TForm1.SpeedButton3Click(Sender: TObject);

begin

if (glob_check=true) then memo1.Text:='';

memo1.Text:=memo1.Text+'9';

glob_check:=false;

end;

procedure TForm1.SpeedButton11Click(Sender: TObject);

begin

if (glob_check=true) then memo1.Text:='';

memo1.Text:=memo1.Text+'4';

glob_check:=false;

end;

procedure TForm1.SpeedButton12Click(Sender: TObject);

begin

if (glob_check=true) then memo1.Text:='';

memo1.Text:=memo1.Text+'5';

glob_check:=false;

end;

procedure TForm1.SpeedButton13Click(Sender: TObject);

begin

if (glob_check=true) then memo1.Text:='';

memo1.Text:=memo1.Text+'1';

glob_check:=false;

end;

procedure TForm1.SpeedButton14Click(Sender: TObject);

begin

if (glob_check=true) then memo1.Text:='';

memo1.Text:=memo1.Text+'2';

glob_check:=false;

end;

procedure TForm1.SpeedButton15Click(Sender: TObject);

begin

if (glob_check=true) then memo1.Text:='';

memo1.Text:=memo1.Text+'3';

glob_check:=false;

end;

procedure TForm1.SpeedButton23Click(Sender: TObject);

begin

if (glob_check=true) then memo1.Text:='';

memo1.Text:=memo1.Text+'0';

glob_check:=false;

if meraisch=10 then

begin

if (strtofloat(memo1.Text)=0) then

begin

memo1.Text:='0';

glob_check:=true;

end;

end;

end;

procedure TForm1.SpeedButton56Click(Sender: TObject);

begin

skob:=false;

sk:=0;

panel3.Caption:='';

memo1.Text:='0';

glob_check:=True;

trig:=false;

t:=0;

for i:=1 to 1000 do

begin

a[i]:='|';

b[i]:='0';

end;

end;

procedure TForm1.SpeedButton4Click(Sender: TObject);

begin

case meraisch of

2: memo1.Text:=DrtoDes(memo1.Text,2);

8: memo1.Text:=DrtoDes(memo1.Text,8);

16: memo1.Text:=DrtoDes(memo1.Text,16);

end;

t:=t+1;

a[t]:=memo1.Text;

b[t]:='/';

if (((b[2]<>'0') and ((b[1]<>'+') and (b[1]<>'-')) and ((b[t-1]<>'+')and(b[t-1]<>'-') )) and (skob=false)) then

memo1.Text:=rezul(t-1);

glob_check:=true;

case meraisch of

2: memo1.Text:=DesToDr(memo1.Text,2);

8: memo1.Text:=DesToDr(memo1.Text,8);

16: memo1.Text:=DesToDr(memo1.Text,16);

end;

end;

procedure TForm1.SpeedButton6Click(Sender: TObject);

begin

case meraisch of

2: memo1.Text:=DrtoDes(memo1.Text,2);

8: memo1.Text:=DrtoDes(memo1.Text,8);

16: memo1.Text:=DrtoDes(memo1.Text,16);

end;

t:=t+1;

a[t]:=memo1.Text;

b[t]:='*';

if (((b[2]<>'0') and ((b[1]<>'+') and (b[1]<>'-')) and ((b[t-1]<>'+') and(b[t-1]<>'-') )) and (skob=false)) then

memo1.Text:=rezul(t-1);

glob_check:=true;

case meraisch of

2: memo1.Text:=DesToDr(memo1.Text,2);

8: memo1.Text:=DesToDr(memo1.Text,8);

16: memo1.Text:=DesToDr(memo1.Text,16);

end;

end;

procedure TForm1.SpeedButton16Click(Sender: TObject);

begin

case meraisch of

2: memo1.Text:=DrtoDes(memo1.Text,2);

8: memo1.Text:=DrtoDes(memo1.Text,8);

16: memo1.Text:=DrtoDes(memo1.Text,16);

end;

t:=t+1;

a[t]:=memo1.Text;

b[t]:='-';

if ((b[2]<>'0') and (skob=false)) then

memo1.Text:=rezul(t-1);

glob_check:=true;

case meraisch of

2: memo1.Text:=DesToDr(memo1.Text,2);

8: memo1.Text:=DesToDr(memo1.Text,8);

16: memo1.Text:=DesToDr(memo1.Text,16);

end;

end;

procedure TForm1.SpeedButton32Click(Sender: TObject);

begin

skob:=true;

t:=t+1;

b[t]:='(';

sk:=sk+1;

panel3.Caption:='(='+inttostr(sk);

end;

procedure TForm1.SpeedButton33Click(Sender: TObject);

begin

if (sk<>0) then


Подобные документы

  • Створення програми для роботи з веб-камерою з автоматичним визначенням встановленої камери на комп'ютері. Характеристика апаратної конфігурації програми. Опис мови і середовища програмування. Розробка алгоритму, інструкції для програміста та користувача.

    курсовая работа [1,2 M], добавлен 26.07.2013

  • Створення програми для роботи зі зв'язаними списками засобами Delphi. Причини використання динамічної пам'яті комп’ютера. Розробка технічного завдання. Аналіз вимог та визначення специфікації. Етап реалізації та розробка документації користувача.

    курсовая работа [487,5 K], добавлен 08.08.2011

  • Розробка та налагодження програми "Заробітна плата" на мові високого рівня С++ для комп'ютерів з операційною системою Windows 7. Текстуальний опис алгоритму. Створення UML-діаграми та обробка інформації з бази даних. Інструкція по роботі з програмою.

    курсовая работа [698,4 K], добавлен 14.10.2012

  • Загальні відомості про програмний засіб, його внутрішній зміст та головні вимоги, що висуваються, функціональні особливості. Керівництво користувача та програміста. Розробка алгоритму розв’язку задачі, опис стриктури вихідної інформації, умови виконання.

    курсовая работа [5,6 M], добавлен 06.08.2013

  • Програми, які виводять на екран характеристики комп'ютера. Розробка програми "Монітор використання ресурсів комп’ютера" на мові програмування ASM-86. Алгоритм програми та її реалізація. Системні вимоги, інструкція для користувача, лістинг програми.

    курсовая работа [22,2 K], добавлен 08.08.2009

  • Аналіз предметної області і постановка задачі на розробку програми для автоматизації роботи автопідприємства. Перелік та опис використаних компонентів та основних процедур програми. Опис структур та методів обробки даних. Інструкція для користувача.

    курсовая работа [2,3 M], добавлен 15.02.2012

  • Розробка та схема алгоритму проектованої гри. Особливості мови програмування та середовища "Microsoft Visual Studio C++ 2008 Express Edition". Лістинг програми та загальний опис її роботи, аналіз отриманих результатів та оцінка практичної ефективності.

    курсовая работа [762,8 K], добавлен 03.05.2015

  • Особливості системи онлайн-агрегаторів новин, універсальної програмної платформи Microsoft Window. Використання мови програмування C#, створення бази даних. Розробка програмного продукту, алгоритм його створення. Вихідний код та інструкція користувача.

    дипломная работа [730,9 K], добавлен 21.01.2016

  • Основні відомості з лінійної алгебри. Власні значення і вектори матриці. Метод обертання Якобі. Засоби формування інтерфейсу користувача. Текст програми алгоритму методу обертання Якобі. Вимоги до програмно-технічного забезпечення. Інструкція користувача.

    курсовая работа [306,0 K], добавлен 18.11.2015

  • Різновиди архітектур баз даних. Архітектура "файл-сервер" і локальні бази даних. Обґрунтування вибору архітектури стосовно проектованої системи. Основні концепції мови SQL. Структура запитів до окремих таблиць. Інтерфейс користувача проектованої системи.

    дипломная работа [972,5 K], добавлен 26.10.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.