Калькулятор комплексных чисел

Разработка программы для выполнения арифметических операций с комплексными числами. Разработка эскизного проекта. Диаграмма последовательностей и классов. Разработка и описание программы. Разработка программного кода и руководства пользователя.

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

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

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

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

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

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

ДОНБАССКАЯ ГОСУДАРСТВЕННАЯ МАШИНОСТРОИТЕЛЬНАЯ АКАДЕМИЯ

ЗАДАНИЕ

на выполнение курсовой работы по дисциплине

"Технология программирования и создания программных продуктов"

1. Индивидуальное задание: разработать программный продукт

«Калькулятор комплексных чисел»

2. Содержание курсовой работы: при выполнении курсовой работы должны быть реализованы следующие этапы:

- анализ и формализация требований заказчика;

- выбор модели взаимодействия с заказчиком и соответствующей модели разработки программного продукта;

- разработка правовых документов (договора) на создание программного продукта;

- разработка технического задания на создание программного продукта;

- планирование процесса создания программного продукта;

- разработка технического проекта программного продукта с использованием UML;

- выбор инструментальных средства и информационной платформы для реализации программного продукта;

- выполнить реализацию программных модулей;

- выполнить тестирование программных модулей;

- выполнить рефакторинг программного кода;

- выполнить интеграцию модулей - сборку программного продукта;

- выполнить целостное тестирование программного продукта;

- разработать комплекс мероприятий по внедрению и поддержке программного продукта, включая эксплуатационную документацию, приемочные тесты, правовые документы.

3. Оформление курсовой работы: пояснительная записка оформляется в соответствии с ДСТУ 3008.95 и должна содержать:

- титульный лист - 1 с.

- индивидуальное задание - 1 с.;

- аннотацию работы - 1 с.;

- содержание - 1 с.;

- введение, отражающее краткую характеристику работы, включая постановку задачи и способ ее решения - 1-2 с.

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

- техническое задание на создание программного продукта, включая расчет экономических показателей, в соответствии с ГОСТ 19.201-78 - 4-7 с.;

- проект программного продукта, включающий, как минимум, следующие UML-диаграммы: прецедентов использования, классов, последовательностей, а также соответствующие спецификации и описание использованных шаблонов проектирования - 5-7 с.;

- модульные тесты для каждого класса, тестирующие в полном объеме его функциональность - 3-5 с.;

- описание выполненных в процессе разработки операций рефакторинга - 2-4 с.;

- описание сценария сборки - 1-2 с. ;

- приемочные тесты - 1-3 с.;

- эксплуатационную документацию (руководство пользователя) - 2-4 с.;

- приложения: договор на создание программного продукта, полные исходные коды программы, акт тестирования.

Задание выдал

Министерство образования и науки Украины

Донбасская Государственная Машиностроительная Академия

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

по дисциплине

«Технология программирования и создания программных продуктов »

на тему: «Калькулятор комплексных чисел»

Краматорск 2011г.

РЕФЕРАТ

Расчетно-пояснительная записка содержит: 42 страниц, 6 рисунков, 12 источников.

Целью данного курсового проекта является разработка программы для выполнения арифметических операций с комплексными числами.

В течение проделанной работы были выполнены следующие задачи:

- рассмотрены и проанализированы требования к программному продукту(ПП);

- составлено техническое задание на разработку ПП, рассчитана стоимость разработки ПП;

- в соответствии с ТЗ разработаны диаграммы на языке моделирования UML;

- выполнена реализация ПП на языке программирования Delphi.

КОМПЛЕКСНОЕ ЧИСЛО, ДЕЙСТВИТЕЛЬНАЯ ЧАСТЬ, МНИМАЯ ЧАСТЬ, МОДУЛЬ, ПОВОРОТ, Алгоритм, Исполняемый файл, Файл, Компилятор, Массив, Программа, Переменная, Процедура, Событие, Функция, Цикл

Содержание

Введение

1. Анализ задания

2. Техническое задание

3. Разработка эскизного проекта

3.1 Use Case диаграмма

3.2 Диаграмма классов

3.3 Диаграмма последовательностей

4. Разработка и описание программы

4.1 Разработка программного кода

4.2 Руководство пользователя

Заключение

Список использованной литературы

Приложение А

Введение

Из курса математики известно, что отрицательные числа введены прежде всего для того, чтобы операция вычитания, обратная к операции сложения, была всегда возможна. По аналогичной причине в математике появились комплексные числа. Если рассматривать только действительные числа, то операция извлечения квадратного корня, обратная к операции возведения в квадрат, не всегда возможна, так как нельзя извлечь квадратный корень из отрицательного числа.

Оказалось, что если производить вычисления по обычным правилам над выражениями, в которых встречается корень квадратный из отрицательного числа, то можно прийти к результату, уже не содержащему корень квадратный из отрицательного числа. Обнаружилось таким образом, что производя вычисления с выражениями, содержащими корень квадратный из отрицательного числа, можно получить вполне понятные результаты. Поэтому эти корни стали употреблять в математике. Назвали их мнимыми числами - тем самым они как бы приобрели право на нелегальное существование.

Полные гражданские права мнимым числам на грани XVIII--XIX столетий дал Гаусс, который назвал их комплексными числами, дал им геометрическую интерпретацию и, что самое главное, доказал основную теорему алгебры, утверждающую, что каждый многочлен имеет хотя бы один действительный или комплексный корень.

Комплексные числа получили широкое применение в волновой физике и электротехнике.

На фоне вышесказанного возникает острая необходимость проведения вычислений с комплексными числами наравне с действительными.

1. Анализ задания

Необходимо написать программу, реализующую функцию калькулятора комплексных чисел. Данная программа должна полностью соответствовать требованиям технического задания. Необходимо, чтобы при запуске программы отображались поля для ввода комплексных чисел в одной из форм, алгебраической или экспоненциальной.

Над этими числами программа должна проводить простейшие арифметические действия: сложение, вычитание, умножение, деление. Все вычисления необходимо отобразить на экране, а также учесть возможность сохранения истории вычисления в файл для дальнейшего использования.

Для написания программы целесообразно использовать среду DELPHI. Использование среды DELPHI позволяет написать программу с удобным интерфейсом. Кроме того программы, написанные на DELPHI, хорошо сочетаются с широко распространенными на сегодняшний день операционными системами WINDOWS. Поскольку используется среда DELPHI, для удобной работы с программой необходим манипулятор "мышь".

Одним из основных требований к программе является требование не нарушения работы операционной системы и других приложений. Поэтому при, написании программы следует не работать или до минимума сократить работу с системными файлами.

2. Техническое задание на разработку программы "Калькулятор"

1 Введение

1.1 Наименование программы

Наименование программы: "Калькулятор комплексных чисел"

1.2 Назначение и область применения

Программа предназначена для выполнения арифметических действий над комплексными числами:

1.2.1. Сложение

1.2.2. Вычитание

1.2.3. Умножение

1.2.4. Деление

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

2 Требования к программе

2.1. Требования к функциональным характеристикам

Программа должна обеспечивать возможность выполнения перечисленных ниже функций:

2.1.1. Ввода комплексного числа в любой форме

2.1.1.1. Алгебраической

2.1.1.2. Экспоненциальной

2.1.2. Конвертирование комплексного числа из одной формы в другую

2.1.3. Выполнять алгебраические операции над комплексными числами

2.1.4. Выводить на экран историю вычислений, иметь возможность сохранения результатов в файл

2.2. Требования к надежности

2.2.1. Требования к обеспечению надежного функционирования программы

Надежное (устойчивое) функционирование программы должно быть обеспечено выполнением Заказчиком совокупности организационно-технических мероприятий, перечень которых приведен ниже:

а) организацией бесперебойного питания технических средств;

б) регулярным выполнением требований ГОСТ 51188-98. Защита информации. Испытания программных средств на наличие компьютерных вирусов

2.2.2. Время восстановления после отказа

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

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

2.2.3. Отказы из-за некорректных действий пользователей системы

Отказы программы вследствие некорректных действий пользователя при взаимодействии с программой недопустимы.

3 Условия эксплуатации

3.1. Климатические условия эксплуатации

Не регламентируются

3.2. Требования к составу и параметрам технических средств

Минимальная конфигурация ПК:

- процессор Pentium100 или выше;

- операционная система Windows 9x или выше;

- манипулятор мышь;

- 2 Мб внешней памяти;

3.3. Требования к информационной и программной совместимости

Программа должна обеспечивать совместимость с ОС Windows

4. Требования к программной документации

4.1. Предварительный состав программной документации

Состав программной документации должен включать в себя:

4.1.1. техническое задание;

4.1.2. исходный код программы и методики испытаний;

4.1.3. руководство пользователя;

5. Технико-экономические показатели

5.1. Экономические преимущества разработки

Ориентировочная экономическая эффективность не рассчитываются. Экономическая отдача достигается за счет экономии времени на рутинные и громоздкие расчеты.

6. Стадии и этапы разработки

6.1. Стадии разработки

Разработка должна быть проведена в три стадии:

1. разработка технического задания;

2. рабочее проектирование;

3. внедрение.

6.2. Этапы разработки

На стадии разработки технического задания должен быть выполнен этап разработки, согласования и утверждения настоящего технического задания.

На стадии рабочего проектирования должны быть выполнены перечисленные ниже этапы работ:

1. разработка программы;

2. разработка программной документации;

3. испытания программы.

На стадии внедрения должен быть выполнена подготовка и передача программы, составлен акт приема/сдачи работ.

6.3. Содержание работ по этапам

На этапе разработки технического задания должны быть выполнены перечисленные ниже работы:

1. постановка задачи;

2. определение и уточнение требований к техническим средствам;

3. определение требований к программе;

4. определение стадий, этапов и сроков разработки программы и документации на неё;

5. согласование и утверждение технического задания.

На этапе разработки программы должна быть выполнена работа по программированию (кодированию) и отладке программы.

На этапе разработки программной документации должна быть выполнена разработка программных документов в соответствии с требованиями к составу документации.

На этапе испытаний программы должны быть выполнены перечисленные ниже виды работ:

1. разработка, согласование и утверждение и методики испытаний;

2. проведение приемо-сдаточных испытаний;

3. корректировка программы и программной документации по результатам испытаний.

На этапе подготовки и передачи программы должна быть выполнена работа по подготовке и передаче программы и программной документации в эксплуатацию на компьютере Заказчика.

7. Порядок контроля и приемки

7.1. Виды испытаний

Приемо-сдаточные испытания должны проводиться на компьютере Заказчика в оговоренные сроки.

7.2. Общие требования к приемке работы

На основании Протокола проведения испытаний Исполнитель совместно с Заказчиком подписывает Акт приемки-сдачи программы в эксплуатацию

Стадии и этапы разработки.

Таблица 1 - Стадии разработки

Этап

Содержание работы

Срок

1

Техническое задание

Анализ и формализация требования к ПП,
планирование работ.

1 день

2

Эскизный проект

Предварительная разработка проекта ПП с использованием UML: диаграммы прецедентов использования, диаграммы классов и последовательности.

2 дней

3

Технический проект

Реализация рабочей версии ПП с основной функциональностью; модульные тесты.

4 дней

4

Рабочий проект

Корректировка и доработка программного обеспечения; разработка документации.

2 дней

5

Внедрение

Разработка мероприятий по внедрению и сопровождению ПП

1 дней

Расчет капитальных затрат на разработку ПП

Затраты на создание программного продукта определяются как:

,

где К1 - затраты на оборудование;

К2 - затраты на лицензионное программное обеспечение;

К3 - затраты, необходимые для создания программного изделия.

Поскольку для данной разработки не требуется покупка специализированного оборудования и программного обеспечения, то К1=0 и К2=0. Таким образом, затраты на создание программного изделия составят:

,

где З1 - затраты труда разработчиков;

З2 - затраты компьютерного времени;

З3 - накладные расходы.

В соответствии с планом работ данные о затратах на заработную плату приведены в таблице 2.

Таблица 2 - Затраты на заработную плату

Этап создания ПП

К-во разработчиков (чел.)

Средн. время разработки (час/чел.)

Средн. стоимость разработки (грн.час/чел.)

Всего
(грн.)

1

Техническое задание

1

8

15

120

2

Эскизный проект

1

16

15

300

3

Технический проект

1

32

10

320

4

Рабочий проект

1

16

10

160

5

Внедрение

1

8

20

160

З1=

1060

Затраты компьютерного времени составят:

З2 = СkF0 ,

где Сk - себестоимость компьютерного часа, грн.;

F0 - затраты компьютерного времени на разработку программы.

В соответствии с таблицей 1, данные о затратах, связанных с эксплуатацией ЭВМ, приведены в таблице 3.

Таблица 3 - Затраты на эксплуатацию ЭВМ

Этап создания ПМК

К-во разработчиков (чел.)

Затраты комп-ного времени (час/чел.)

Средн. себестоим. комп-ного (грн./час)

Всего
(грн.)

1

Техническое задание

1

8

1,5

12

2

Эскизный проект

1

16

1,5

24

3

Технический проект

1

32

1,5

48

4

Рабочий проект

1

16

1,5

24

5

Внедрение

1

8

1,5

12

З2=

120

Накладные расходы, связанные с затратами на содержание помещений и затратами на расходные материалы, принимаются в размере 10% от фонда заработной платы, что составит З3= 106 грн.

Капитальные затраты на разработку программного продукта составят:

= 1060 + 120 + 106 = 1386 грн.

3. Разработка эскизного проекта

Разработку UML диаграмм будем производить в среде IBM Rational Software Architect.

Rational Software Architect версии 7.5 включает в себя следующие возможности:

1. Поддержка Unified Modeling Language версии 2.1

2. Поддержка преобразований типа модель-код и код-модель

3. Возможность прямых преобразований:

3.1. UML в Java

3.2. UML в C#

3.3. UML в C++

3.4. UML в EJB

3.5. UML в WSDL

3.6. UML в XSD

3.7. UML в CORBA IDL

3.8. UML в SQL на основе логической модели данных, поддерживаемой программным обеспечением IBM Rational(сейчас называется Rational Software).

4. Возможность обратных преобразований:

4.1. Java в UML

4.2. C++ в UML

5. Включает в себя все возможности IBM Rational Application Developer

6. Позволяет управлять моделями для параллельной разработки и архитектурного рефакторинга, например, разделять, объединять, сравнивать, производить слияние моделей и частей модели.

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

3.1 Use Case диаграмма

Диаграмма прецедентов (англ. use case diagram, диаграмма вариантов использования) -- диаграмма, на которой отражены отношения, существующие между актерами и прецедентами.

Основная задача -- представлять собой единое средство, дающее возможность заказчику, конечному пользователю и разработчику совместно обсуждать функциональность и поведение системы.

В нашем случае заказчик, он же пользователь (User), является актером по отношению к системе.

Для работы с системой пользователю нужны следующие прецеденты:

- ввести число

- рассчитать

Вариант использования Ввести число включает в себя дополнительно два варианта использования:

- Ввести Z1

- Ввести Z2

Т.е. для расчетов User должен ввести как минимум 2 комплексных числа. Пользователь может ввести комплексное число в какой-то одной форме, экспоненциальной или алгебраической, либо в обоих сразу. В зависимости от того введет он число в обех формах или в какой-либо одной, вариант использования Рассчитать расширяется вариантами преобразования комплексных чисел из алгебраической формы в экспоненциальную и обратно (соответственно AlgToExp и ExpToAlg).

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

- Рассчитать Z1+Z2

- Рассчитать Z1-Z2

- Рассчитать Z1*Z2

- Рассчитать Z1/Z2

Тогда диаграмма вариантов использования приймет следующий вид:

Рисунок 1 - Диаграмма прецедентов использования

3.2 Диаграмма классов

Класс (class) в языке UML служит для обозначения множества объектов, которые обладают одинаковой структурой, поведением и отношениями с объектами из других классов. Графически класс изображается в виде прямоугольника, который дополнительно может быть разделен горизонтальными линиями на разделы или секции. В этих разделах могут указываться имя класса, атрибуты (переменные) и операции (методы).

Базовый класс нашей программы - форма TForm, которая содержит в себе остальные объекты.

На форму выводятся объекты TEdit (поля для ввода данных), TButton (кнопки для обработки команд пользователя), TLabel (метки для передачи информации пользователю), а также в неявном виде TComplex (комплексные числа введенные пользователем, а также результаты вычислений).

Рассмотрим подробнее эти классы.

Class TForm

Основное окно проекта, имеет все соответствующие атрибуты стандартной формы Windows (Width, Height, Top etc.). В проекте используется процедура Create() для инициализации объектов на форме.

Class TEdit

Основной класс на форме для ввода и вывода информации от пользователя. Основной атрибут - Text, строкового типа. Класс содержит процедуру KeyPress в которой обрабатывается корректность ввода числа с клавиатуры.

Class TLabel

Вспомогательный класс для уточнения пользователю назначения тех или иных полей ввода/вывода.

Class TComplex

Базовый класс проекта, содержащий в себе атрибуты комплексных чисел и процедуры конвертации комплексного числа и одной формы в другую.

Атрибуты класса:

Real - вещественная часть комплексного числа в алгебраической форме

Imag - мнимая часть комплексного числа в алгебраическом виде

Modul- модуль вектора числа в экспоненциальном виде

Arg - угол поворота вектора комплексного числа в экспоненциальной форме

Процедуры конвертации комплексного числа из одной формы в другую:

ArgToExp() - перевод числа из алгебраической формы в экспоненциальную

ExpToArg() - перевод числя из экспоненциальной формы в алгебраическую.

Class TButton

Кнопка для инициализации расчетов. Основная процедура - Click, нажате кнопки мышкой.

Диаграмма классов представлена ниже.

Рисунок 2 - Диаграмма классов

3.3 Диаграмма последовательностей

Раскроем последовательность действий для прецедента РАССЧИТАТЬ.

Действующий актер User1 активирует команду Button1.Click через нажатие мышкой.

После этого итет считывание соответствующих полей ввода формы и создание комплексных чисел Z1 и Z2.

Последовательно создаются и рассчитываются результаты арифметических действий над этими числами. Результаты представлены в виде объектов класса TComplex, В соответствующие поля формы выводятся результаты вычислений в комплексной и алгебраической форме.

Диаграмма подледовательности действий для варианта РАССЧИТАТЬ представлена на рис. 3.

Рисунок 3 - Диаграмма последовательности РАССЧИТАТЬ

4 Разработка и описание программы

Проектирование будем выполнять в среде Delphi.

Delphi -- среда программирования, в которой используется язык программирования Object Pascal. Начиная со среды разработки Delphi 7.0, в официальных документах Borland стала использовать название Delphi для обозначения языка Object Pascal. Начиная с 2007 года уже язык Delphi (производный от Object Pascal) начал жить своей самостоятельной жизнью и претерпевал различные изменения связанные с современными тенденциями (например, с развитием платформы .net) развития языков программирования: появились class helpers, перегрузки операторов и другое

4.1 Разработка программного кода

Вид формы в окне проектирования представлен на рис.4.

Рисунок 4 - Внешний вид формы в среде Delphi

Классы и процедуры, используемые в программе:

type

TForm1 = class(TForm)

Edit1: TEdit;

GroupBox1: TGroupBox;

MainMenu1: TMainMenu;

MenuClear: TMenuItem;

MenuExit: TMenuItem;

Label1: TLabel;

Edit2: TEdit;

Label5: TLabel;

Edit9: TEdit;

Edit3: TEdit;

Edit4: TEdit;

GroupBox3: TGroupBox;

Label2: TLabel;

Edit5: TEdit;

Edit6: TEdit;

Edit7: TEdit;

Edit8: TEdit;

Label3: TLabel;

Edit10: TEdit;

Label8: TLabel;

Edit11: TEdit;

Label6: TLabel;

Edit12: TEdit;

Button1: TButton;

Label4: TLabel;

MenuSave: TMenuItem;

procedure Button1Click(Sender: TObject);

procedure MenuExitClick(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

procedure Edit3KeyPress(Sender: TObject; var Key: Char);

procedure Edit4KeyPress(Sender: TObject; var Key: Char);

procedure Edit5KeyPress(Sender: TObject; var Key: Char);

procedure Edit6KeyPress(Sender: TObject; var Key: Char);

procedure Edit7KeyPress(Sender: TObject; var Key: Char);

procedure Edit8KeyPress(Sender: TObject; var Key: Char);

procedure MenuClearClick(Sender: TObject);

procedure MenuSaveClick(Sender: TObject);

end;

TComplex=record

Real: Extended;//Вещественная часть комплексного числа

Imag: Extended;//Мнимая часть комплексного числа

Modul: Extended;//модуль комплексного числа

Angle: Extended;//угол поворота

end;

В основном модуле хранятся процедуры доступа к базе данных. Листинг полного кода модуля приведен в Приложении А.

4.2 Руководство пользователя

После запуска программы происходит инициализация полей формы.

Внешний вид запущенной программы на рис.4.

В верхней правой части экрана находится панель навигации. Команды меню:

- Очистить - очищает поля ввода, удаляет объекты комплексных чисел

- Сохранить - сохраняются результаты вычислений в файл в виде

- Выход - выход из программы

Рисунок 5 - Окно программы

В центре формы поля для ввода комплексных чисел Z1 и Z2. Вводить можно как в алгебраической форме a+jb, так и в экспоненциальной форме.

В нижней части экрана 4 поля для вывода результатов вычислений и кнопка для инициализации расчетов. При нажатии кнопки расчет производится конвертирование чисел из одной формы в другую, а потом расчитываются алгебраические действия с ними.

Пример расчетов приведен на рисунке 6.

Рисунок 6 - Окно программы с результатами

программа арифметический комплексный число

Заключение

В результате выполнения курсовой работы была разработана прикладная программа «Калькулятор комплексных чисел». Она упрощает конвертацию комплексных чисел из одной формы в другую, а также производит простые арифметические действия над комплексными числами. Ход вычислений выводится в поле вывода, результаты можно сохранить в текстовый файл.

Список использованной литературы

1. Тонкий Л. В. Системное программное обеспечение. Программа учебной дисциплины и методические указания к выполнению курсовой работы [текст] 2006. - 23 с.

2. Гофман В. Delphi 7. Полное руководство [текст] - Санкт-Петербург, 2002. - 340 с.

3. Юниты «Программирование высокого уровня»-Москва-2005г

4. Т.А.Павловская «Программирование высокого уровня»-2009г- Санкт-Петербург

5. Т.А.Павловская «Языки программирования»- 1-ое издаение-2007г

6. Немнюгин С.А. «Программирование высокого уровня»-2008г- Санкт-Петербург-учебники для вузов.

7. Фаронов В.В. «Программирование высокого уровня»-2009г- Санкт-Петербург

8. Книги » Нехудожественная литература » Учебная литература » C#. Программирование на языке высокого уровня: Учебник для вузов. Автор: Павловская Т. Издатель: Питер.

9. «Информатика и вычислительная техника»- Павловская Т.А. Издательство - Питер- Год - 2007.

10. Каймин В. А., Питеркин В. М. Основы информатики и ВТ. Учебник для студентов, 1985.

11. «Информатика и ИКТ. Базовый уровень» для 10 класса. Автор Угринович Н. Д.-2005г.

12. Трофимов С.А. CASE-технологии. Практическая работа в Rational Rose

Приложение А

Листинг кода основной программы

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, Menus, Mask;

const Digit: set of Char=['1'..'9', '0'];

//Множество символов, воспринимаемых как символ-разделитель:

Separator: set of Char=['/', '.', ',', 'ю', 'Ю', 'б', 'Б'];

firstdigit: set of char=['-','1'..'9', '0'];

type

TForm1 = class(TForm)

Edit1: TEdit;

GroupBox1: TGroupBox;

MainMenu1: TMainMenu;

MenuClear: TMenuItem;

MenuExit: TMenuItem;

Label1: TLabel;

Edit2: TEdit;

Label5: TLabel;

Edit9: TEdit;

Edit3: TEdit;

Edit4: TEdit;

GroupBox3: TGroupBox;

Label2: TLabel;

Edit5: TEdit;

Edit6: TEdit;

Edit7: TEdit;

Edit8: TEdit;

Label3: TLabel;

Edit10: TEdit;

Label8: TLabel;

Edit11: TEdit;

Label6: TLabel;

Edit12: TEdit;

Button1: TButton;

Label4: TLabel;

MenuSave: TMenuItem;

procedure Button1Click(Sender: TObject);

procedure MenuExitClick(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

procedure Edit3KeyPress(Sender: TObject; var Key: Char);

procedure Edit4KeyPress(Sender: TObject; var Key: Char);

procedure Edit5KeyPress(Sender: TObject; var Key: Char);

procedure Edit6KeyPress(Sender: TObject; var Key: Char);

procedure Edit7KeyPress(Sender: TObject; var Key: Char);

procedure Edit8KeyPress(Sender: TObject; var Key: Char);

procedure MenuClearClick(Sender: TObject);

procedure MenuSaveClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

TComplex=record

Real: Extended;//Вещественная часть комплексного числа

Imag: Extended;//Мнимая часть комплексного числа

Modul: Extended;//модуль комплексного числа

Angle: Extended;//угол поворота

end;

var

Form1: TForm1;

Z1,Z2: TComplex;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var Modul,Angle:extended;

begin

if Edit1.Text<>'' then Z1.Real:=StrToFloat(Edit1.Text);

if Edit2.Text<>'' then Z1.Imag:=StrToFloat(Edit2.Text);

if Edit3.Text<>'' then Z1.Modul:=StrToFloat(Edit3.Text);

if Edit4.Text<>'' then Z1.Angle:=StrToFloat(Edit4.Text);

if Edit5.Text<>'' then Z2.Real:=StrToFloat(Edit5.Text);

if Edit6.Text<>'' then Z2.Imag:=StrToFloat(Edit6.Text);

if Edit7.Text<>'' then Z2.Modul:=StrToFloat(Edit7.Text);

if Edit8.Text<>'' then Z2.Angle:=StrToFloat(Edit8.Text);

if (Edit1.Text<>'') and (Edit2.Text<>'') then

begin

Z1.Modul:=SQRT(SQR(Z1.Real)+SQR(Z1.Imag));

if Z1.Real=0 then Z1.Angle:=1.57

else if(Z1.Real>0) then Z1.Angle:=arctan(Z1.Imag/Z1.Real)

else Z1.Angle:=3.14+arctan(Z1.Imag/Z1.Real);

Edit3.Text:=floatToStrF(Z1.Modul,ffFixed,6,1);

Edit4.Text:=floatToStrF(Z1.Angle,ffFixed,6,1);

end;

if (Edit3.Text<>'') and (Edit4.Text<>'') then

begin

Z1.Real:=Z1.Modul*cos(Z1.Angle);

Z1.Imag:=Z1.Modul*sin(Z1.Angle);

Edit1.Text:=floatToStrF(Z1.Real,ffFixed,6,1);

Edit2.Text:=floatToStrF(Z1.Imag,ffFixed,6,1);

end;

if (Edit5.Text<>'') and (Edit6.Text<>'') then

begin

Z2.Modul:=SQRT(SQR(Z2.Real)+SQR(Z2.Imag));

if Z2.Real=0 then Z2.Angle:=1.57

else if (Z2.Real>0) then Z2.Angle:=arctan(Z2.Imag/Z2.Real)

else Z2.Angle:=3.14+arctan(Z2.Imag/Z2.Real);

Edit7.Text:=floatToStrF(Z2.Modul,ffFixed,6,1);

Edit8.Text:=floatToStrF(Z2.Angle,ffFixed,6,1);

end;

if (Edit7.Text<>'') and (Edit8.Text<>'') then

begin

Z2.Real:=Z2.Modul*cos(Z2.Angle);

Z2.Imag:=Z2.Modul*sin(Z2.Angle);

Edit5.Text:=floatToStrF(Z2.Real,ffFixed,6,1);

Edit6.Text:=floatToStrF(Z2.Imag,ffFixed,6,1);

end;

{Z1+Z2}

If Z1.Imag>=0 then Edit9.Text:=floatToStrF(Z1.Real,ffFixed,6,1)+'+j'+floatToStrF(Z1.Imag,ffFixed,6,1)

else Edit9.Text:=floatToStrF(Z1.Real,ffFixed,6,1)+'-j'+floatToStrF(-Z1.Imag,ffFixed,6,1);

If Z2.Real>=0 then Edit9.Text:=Edit9.Text+'+'+floatToStrF(Z2.Real,ffFixed,6,1)

else Edit9.Text:=Edit9.Text+floatToStrF(Z2.Real,ffFixed,6,1);

If Z2.Imag>=0 then Edit9.Text:=Edit9.Text+'+j'+floatToStrF(Z2.Imag,ffFixed,6,1)

else Edit9.Text:=Edit9.Text+'-j'+floatToStrF(-Z2.Imag,ffFixed,6,1);

Edit9.Text:=Edit9.Text+'='+floatToStrF(Z1.Real+Z2.Real,ffFixed,6,1);

If (Z1.Imag+Z2.Imag)>=0 then Edit9.Text:=Edit9.Text+'+j'+floatToStrF(Z1.Imag+Z2.Imag,ffFixed,6,1)

else Edit9.Text:=Edit9.Text+'-j'+floatToStrF(-(Z1.Imag+Z2.Imag),ffFixed,6,1);

modul:=SQRT(SQR(Z1.Real+Z2.Real)+SQR(Z1.Imag+Z2.Imag));

if (Z1.Real+Z2.Real)=0 then Angle:=1.57

else if (Z1.Real+Z2.Real)>0 then Angle:=arctan((Z1.Imag+Z2.Imag)/(Z1.Real+Z2.Real))

else Angle:=3.14+arctan((Z1.Imag+Z2.Imag)/(Z1.Real+Z2.Real));

Edit9.Text:=Edit9.Text+'='+floatToStrF(modul,ffFixed,6,1)+'exp('+floatToStrF(Angle,ffFixed,6,1)+'j)';

{Z1-Z2}

If Z1.Imag>=0 then Edit10.Text:=floatToStrF(Z1.Real,ffFixed,6,1)+'+j'+floatToStrF(Z1.Imag,ffFixed,6,1)

else Edit10.Text:=floatToStrF(Z1.Real,ffFixed,6,1)+'-j'+floatToStrF(-Z1.Imag,ffFixed,6,1);

If (-Z2.Real)>=0 then Edit10.Text:=Edit10.Text+'+'+floatToStrF(-Z2.Real,ffFixed,6,1)

else Edit10.Text:=Edit10.Text+floatToStrF(-Z2.Real,ffFixed,6,1);

If (-Z2.Imag)>=0 then Edit10.Text:=Edit10.Text+'+j'+floatToStrF(-Z2.Imag,ffFixed,6,1)

else Edit10.Text:=Edit10.Text+'-j'+floatToStrF(Z2.Imag,ffFixed,6,1);

Edit10.Text:=Edit10.Text+'='+floatToStrF(Z1.Real-Z2.Real,ffFixed,6,1);

If (Z1.Imag-Z2.Imag)>=0 then Edit10.Text:=Edit10.Text+'+j'+floatToStrF(Z1.Imag-Z2.Imag,ffFixed,6,1)

else Edit10.Text:=Edit10.Text+'-j'+floatToStrF(-(Z1.Imag-Z2.Imag),ffFixed,6,1);

modul:=SQRT(SQR(Z1.Real-Z2.Real)+SQR(Z1.Imag-Z2.Imag));

if (Z1.Real-Z2.Real)=0 then Angle:=1.57

else if (Z1.Real-Z2.Real)>0 then Angle:=arctan((Z1.Imag-Z2.Imag)/(Z1.Real-Z2.Real))

else Angle:=3.14+arctan((Z1.Imag-Z2.Imag)/(Z1.Real-Z2.Real));

Edit10.Text:=Edit10.Text+'='+floatToStrF(modul,ffFixed,6,1)+'exp('+floatToStrF(Angle,ffFixed,6,1)+'j)';

{Z1*Z2}

Edit11.Text:=floatToStrF(Z1.Modul,ffFixed,6,1)+'exp('+floatToStrF(Z1.Angle,ffFixed,6,1)+

'j)*'+floatToStrF(Z2.Modul,ffFixed,6,1)+'exp('+floatToStrF(Z2.Angle,ffFixed,6,1)+'j)='+

floatToStrF(Z1.Modul*Z2.Modul,ffFixed,6,1)+'exp('+floatToStrF(Z1.Angle+Z2.Angle,ffFixed,6,1)+'j)='+

floatToStrF(Z1.Modul*Z2.Modul*cos(Z1.Angle+Z2.Angle),ffFixed,6,1);

if sin(Z1.Angle+Z2.Angle)>=0 then Edit11.Text:=Edit11.Text+'+j'+floatToStrF(Z1.Modul*Z2.Modul*sin(Z1.Angle+Z2.Angle),ffFixed,6,1)

else Edit11.Text:=Edit11.Text+'-j'+floatToStrF(-Z1.Modul*Z2.Modul*sin(Z1.Angle+Z2.Angle),ffFixed,6,1);

{Z1/Z2}

Edit12.Text:=floatToStrF(Z1.Modul,ffFixed,6,1)+'exp('+floatToStrF(Z1.Angle,ffFixed,6,1)+

'j)/'+floatToStrF(Z2.Modul,ffFixed,6,1)+'exp('+floatToStrF(Z2.Angle,ffFixed,6,1)+'j)='+

floatToStrF(Z1.Modul/Z2.Modul,ffFixed,6,1)+'exp('+floatToStrF(Z1.Angle-Z2.Angle,ffFixed,6,1)+'j)='+

floatToStrF(Z1.Modul/Z2.Modul*cos(Z1.Angle-Z2.Angle),ffFixed,6,1);

if sin(Z1.Angle-Z2.Angle)>=0 then Edit12.Text:=Edit12.Text+'+j'+floatToStrF(Z1.Modul/Z2.Modul*sin(Z1.Angle-Z2.Angle),ffFixed,6,1)

else Edit12.Text:=Edit12.Text+'-j'+floatToStrF(-Z1.Modul/Z2.Modul*sin(Z1.Angle-Z2.Angle),ffFixed,6,1);

end;

procedure TForm1.MenuExitClick(Sender: TObject);

begin

Form1.Close;

end;

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

begin

if (length(edit1.Text)=0) then

if (key in firstdigit) then exit

else key:=#0;

if (Key in Separator)

then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows

else

if (not(Key in Digit))

then Key:=#0;

if ((Key=DecimalSeparator)and(pos(DecimalSeparator, Edit1.Text)<>0))

then Key:=#0;

end;

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

begin

if (length(edit12.Text)=0) then

if (key in firstdigit) then exit

else key:=#0;

if (Key in Separator)

then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows

else

if (not(Key in Digit))

then Key:=#0;

if ((Key=DecimalSeparator)and(pos(DecimalSeparator, Edit1.Text)<>0))

then Key:=#0;

end;

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

begin

if (Key in Separator)

then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows

else

if (not(Key in Digit))

then Key:=#0;

if ((Key=DecimalSeparator)and(pos(DecimalSeparator, Edit1.Text)<>0))

then Key:=#0;

end;

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

begin

if (length(edit4.Text)=0) then

if (key in firstdigit) then exit

else key:=#0;

if (Key in Separator)

then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows

else

if (not(Key in Digit))

then Key:=#0;

if ((Key=DecimalSeparator)and(pos(DecimalSeparator, Edit1.Text)<>0))

then Key:=#0;

end;

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

begin

if (length(edit5.Text)=0) then

if (key in firstdigit) then exit

else key:=#0;

if (Key in Separator)

then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows

else

if (not(Key in Digit))

then Key:=#0;

if ((Key=DecimalSeparator)and(pos(DecimalSeparator, Edit1.Text)<>0))

then Key:=#0;

end;

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

begin

if (length(edit6.Text)=0) then

if (key in firstdigit) then exit

else key:=#0;

if (Key in Separator)

then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows

else

if (not(Key in Digit))

then Key:=#0;

if ((Key=DecimalSeparator)and(pos(DecimalSeparator, Edit1.Text)<>0))

then Key:=#0;

end;

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

begin

if (Key in Separator)

then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows

else

if (not(Key in Digit))

then Key:=#0;

if ((Key=DecimalSeparator)and(pos(DecimalSeparator, Edit1.Text)<>0))

then Key:=#0;

end;

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

begin

if (length(edit8.Text)=0) then

if (key in firstdigit) then exit

else key:=#0;

if (Key in Separator)

then Key:=DecimalSeparator //Delphi-константа типа Char, равная символу-разделителю Windows

else

if (not(Key in Digit))

then Key:=#0;

if ((Key=DecimalSeparator)and(pos(DecimalSeparator, Edit1.Text)<>0))

then Key:=#0;

end;

procedure TForm1.MenuClearClick(Sender: TObject);

begin

Edit1.Text:='';

Edit2.Text:='';

Edit3.Text:='';

Edit4.Text:='';

Edit5.Text:='';

Edit6.Text:='';

Edit7.Text:='';

Edit8.Text:='';

Edit9.Text:='';

Edit10.Text:='';

Edit11.Text:='';

Edit12.Text:='';

end;

procedure TForm1.MenuSaveClick(Sender: TObject);

var F: TextFile;

FName: TOpenDialog;

begin

FName:=TOpenDialog.Create(self);

FName.InitialDir := GetCurrentDir;

// Разрешено выбрать только .txt

FName.Filter :='Текстовый файл|*.txt';

// Выбор файлов Паскаля как стартовый тип фильтра

FName.FilterIndex := 1;

// Показ диалог открытия файла

if not FName.Execute then exit;

assignfile(f,FName.FileName);

if not FileExists(FName.FileName) then

begin

Rewrite(f);

CloseFile(f);

end;

Append(f);

Writeln(f,DateTimeToStr(now));

Writeln(f,'Z1+Z2='+edit9.Text);

Writeln(f,'Z1-Z2='+edit10.Text);

Writeln(f,'Z1*Z2='+edit11.Text);

Writeln(f,'Z1/Z2='+edit12.Text);

Flush(f);

CloseFile(f);

// Освобождение диалога

FName.Free;

end;

end.

Размещено на Allbest.ru


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

  • Понятие и функции комплексных чисел. Правила выполнения арифметических операций с комплексными числами. Действия с комплексными числами: сложение, вычитание, произведение, деление. Программная реализация решения задачи. Пример выполнения программы.

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

  • Разработка программного кода и алгоритма действий приложения "калькулятор". Использование функций в программе Matlab. Разработка кнопок, опций, интерфейса, оформление. Части кода Matlab и тестовый набор. Инструкция пользователя по работе программы.

    курсовая работа [527,1 K], добавлен 27.09.2014

  • Изучение основ программирования и создание полноценного приложения в среде программирования Delphi. Разработка эскизного и технического проектов программы. Внедрение выполнения программы. Разработка рабочего проекта, спецификация и текст программы.

    курсовая работа [560,1 K], добавлен 18.07.2012

  • Разработка эскизного и технического проекта программы игры "Собери картинку". Назначение и область применения, основные технические характеристики. Разработка рабочего проекта, разработка и спецификация программы игры. Описание и тестирование программы.

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

  • Разработка структуры объекта "Калькулятор" - электронного вычислительного устройства для выполнения операций над числами или алгебраическими формулами. Текст программы, результат ее работы. Свойство реального объекта. Блок-схема, алгоритм приложения.

    контрольная работа [68,8 K], добавлен 11.04.2015

  • Разработка программы "Калькулятор" для работы с вещественными числами. Алгоритм работы программы. Набор тестов и варианты исполнения программы. Порядок ввода текста, стандартные ошибки в работе программы. Программная документация, текст программы.

    курсовая работа [225,9 K], добавлен 13.10.2013

  • Разработка эскизного и технического проектов программы, ее назначение и область применения, описание алгоритма, организация входных и выходных данных. Выбор состава технических и программных средств, разработка рабочего проекта, спецификация программы.

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

  • Разработка алгоритма выполнения операций умножения двоичных чисел в формате расширенной точности на сумматоре обратного кода. Преобразование входной строки в десятичное число. Разработка алгоритма арифметической операции. Тестирование программы-эмулятора.

    курсовая работа [119,1 K], добавлен 24.06.2012

  • Особенности объектно-ориентированного программирования. Основные возможности языка программирования Java, классификация платформ. Создание программы, обеспечивающей вычисление арифметических выражений. Руководство пользователя и характеристика функций.

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

  • Разработка программы с использованием языка программирования Pascal для выполнения алгебраических действий с действительными числами без знака в шестнадцатеричной системе счисления. Описание хода выполнения, схема алгоритма, листинг программы, ее функции.

    реферат [687,5 K], добавлен 28.10.2011

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