Разработка приложения для работы с комплексными числами на языке С#
РОССИЙСКАЯ
ФЕДЕРАЦИЯ
МИНИСТЕРСТВО
ОБРАЗОВАНИЯ И НАУКИ РФ
ФЕДЕРАЛЬНОЕ
ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ
ВЫСШЕГО,
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«ТЮМЕНСКИЙ
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
ИНСТИТУТ
МАТЕМАТИКИ И КОМПЬЮТЕРНЫХ НАУК
Кафедра
программного обеспечения
Курсовая
работа
по
дисциплине «Объектно-ориентированное программирование»
Тема:
Разработка приложения для работы с комплексными числами на языке С#
Тюмень -
2014
Введение
Комплексные числа были введены в математику для
того, чтобы сделать возможной операцию извлечения квадратного корня из любого
действительного числа.
Целью курсовой работы является разработка
приложения для работы с комплексными числами, представленными в арифметической
форме.
В программе должны быть реализованы следующие
операции по работе с комплексными числами:
сложение двух комплексных чисел;
вычитание двух комплексных чисел;
умножение двух комплексных чисел;
деление двух комплексных чисел;
нахождение n-ой степени комплексного числа;
вычисления модуля комплексного числа.
Для достижения целей были поставлены следующие
задачи:
изучение предметной области;
изучение концепции объектно-ориентированного
программирования;
изучение существующих аналогичных программ;
создание иерархии классов;
поиск алгоритма программы;
реализация алгоритма;
тестирование программы.
Глава 1. Описание предметной области
Комплексным числом называется выражение вида:
|
(1.1)
|
где число а называется действительной частью
комплексного числа, bi-мнимой частью этого числа, b- коэффициентом мнимой части
комплексного числа [1]. Суммой двух комплексных чисел
|
(1.2)
|
|
(1.3)
|
называется комплексное число
|
(1.4)
|
Комплексное число равно нулю тогда, когда его
действительная часть и коэффициент мнимой части равны нулю, т.е.
|
(1.5)
|
если.
Действительные числа являются частным случаем комплексных чисел. Если ,
то
действительное число.
(1.5)
|
|
Если ,
то
(1.6)
|
|
мнимое число.
Для комплексных чисел справедливы
переместительный и сочетательный законы сложения. Их справедливость следует из
того, что сложение комплексных чисел по существу сводится к сложению
действительных частей и коэффициентов мнимых частей, а они являются
действительными числами, для которых справедливы указанные законы.
Вычитание комплексных чисел определяется как
действие, обратное сложению: разностью двух комплексных чисел
|
(1.7)
|
|
(1.8)
|
называется комплексное число
|
(1.9)
|
которое в сумме с вычитаемым дает уменьшаемое.
Отсюда, исходя из определения сложения и равенства комплексных чисел получим
два уравнения, из которых найдем, что
|
(1.10)
|
|
.
|
(1.11)
|
|
|
|
|
Произведение комплексных чисел
|
(1.12)
|
называется комплексное число
|
.
|
(1.14)
|
|
|
|
Для умножения комплексных чисел также
справедливы переместительный и сочетательный законы, а также распределительный
закон умножения по отношению к сложению.
Деление комплексных чисел определяется как
действие, обратное умножению. Конкретное правило деления получим, записав
частное в виде дроби и умножив числитель и знаменатель этой дроби на число,
сопряженное со знаменателем:
Модулем комплексного числа называется длина
вектора, соответствующего этому числу:
|z|=
|
(1.16)
|
Возведение в степень комплексного числа делается
ровно также, как и возведение в степень действительного числа. Надо лишь
помнить, что мнимая единица в квадрате равна минус единице:
|
(1.17)
|
В настоящее время существует большое количество
онлайн-сервисов для выполнения операций над комплексными числами. Это
webmath.ru, mathsolution.ru, matemonline.com и т.д. Большинство из них
выполняют базовые арифметические функции над комплексными числами.
Глава 2. Описание классов
Для реализации алгоритма используются следующие
классы: Form1, Number и два наследующих класса RationalNumberOperation и
ComplexNumber. (Рисунок.2.1 и Рисунок.2.2).
Рисунок 2.1 - Класс Form1
Рисунок 2.2 - Класс Number и два наследующих
класса RationalNumberOperation и ComplexNumber
Описание созданных классов приведено в Таблице
2.1.
Таблица 2.1 - Классы
Класс
|
Назначение
|
Form1
(Рисунок.1.1)
|
Отвечает
за работу главного окна приложения
|
Number(Рисунок.1.3)
|
Класс,
от которого наследуются классы RationalNumberOperation и ComplexNumber.
|
RationalNumberOperation(Рисунок.1.4)
|
Класс
для реализации действительной части комплексного числа.
|
ComplexNumber(Рисунок.1.5)
(см. Приложение 1)
|
Класс
для реализации мнимой единицы и операций над комплексными числами. [2]
|
Поля классаForm1представлены на Рисунке 2.1: Это
поля, хранящие значения действительной и мнимой частей комплексных чисел.
Методы класса Form1 приведены в Таблице 2.2.
Таблица 2.2 - Методы класса Form1
Метод
|
Назначение
|
Secondnumber
(параметры отсутствуют)
|
Активация
поля второго комплексного числа
|
Zamena
(параметры отсутствуют)
|
Замена
значения первого комплексного числа на значение второго.
|
Calculate
(параметры отсутствуют)
|
Возвращение
результата вычислений.
|
Абстрактный класс Numberс модификатором доступа
public (Рисунок 2.3).
Поля:
не имеет полей.
Методы класса Number представлены в Таблице 2.3.
Таблица 2.3 - Методы класса Number
Метод
|
Назначение
|
Info
|
пустой
метод для переопределения в наследующих классах.
|
Рисунок 2.3 - Класс Number
Класс RationalNumberOperation(модификатор
доступа public-Рисунок 2.4).
Поля:действительная часть комплексного числа
(модификатор доступа protected).
Свойства:- управляет доступом к полю re (модификатор
доступа public).
Методы класса RationalNumberOperation
представлены в Таблице 2.4.
Таблица 2.4 - Методы класса
RationalNumberOperation
Метод
|
Назначение
|
Info
|
Переопределенный
метод Info для вывода информации о действительной части комплексного числа.
|
RationalNumberOperation
(спараметром Double n)
|
Инициализация
поля re.
|
~RationalNumberOperation()
|
Деструктор.[3]
|
Рисунок 2.4 - КлассRationalNumberOperation
Класс ComplexNumber (модификатордоступаpublic -
Рисунок 2.5).
Поля:- мнимая часть комплексного числа.
Методы класса ComplexNumber приведены в Таблице
2.5.
Таблица 2.5 - Методы класса ComplexNumber
Метод
|
Назначение
|
|
Abs(ComplexNumber
cn)
|
Возвращает
модуль комплексного числа
|
|
Delen(ComplexNumber cn1, ComplexNumber cn2)
|
Возвращает
частное комплексных чисел
|
|
Summa(ComplexNumber cn1, ComplexNumber cn2)
|
Возвращает
сумму комплексных чисел
|
|
Raznost(ComplexNumber cn1, ComplexNumber cn2)
|
Возвращает
разность комплексных чисел
|
|
Pow (ComplexNumber cn, float n)
|
Возводит
комплексное число в степень
|
|
Multiply (ComplexNumber cn1, ComplexNumber
cn2)
|
Возвращает
произведение комплексных чисел
|
|
Info
|
Переопределенный
метод, выводит конечные данные о результатах вычислений (действительную и
мнимую части).
|
|
operator *(ComplexNumber a, ComplexNumber b)
|
Возвращает
произведение комплексных чисел
|
|
ToString()
|
Возвращает
значение действительной и мнимой частей.
|
|
~
ComplexNumber
|
Деструктор.
|
|
ComplexNumber(Double re, Double im) : base(re)
|
Производит
инициализацию поля im.
|
Рисунок 2.5 - Класс ComplexNumber
Обработка исключений
В целях воспрепятствования некорректной работе
приложения предусмотрена обработка исключений типа ArgumentException. При
возникновении этого исключения пользователь получает соответствующее
оповещение: «Неверный формат данных!».
Собственные классы исключений
Рисунок 2.6 - Схема наследования классов
исключений
- класс, являющийся наследующим для класса ApplicationExсeption
и реализующий исключение, которое срабатывает при неверном задании аргумента
(пользователь для обозначения десятичной дроби использовал точку, попытка
ввода, как числа, так и литеры). Программа уведомляет пользователя об ошибке в
записи комплексного числа.[4]
Глава 3. Алгоритм выполнения работы
программы
Блок-схема выполнения выбранной пользователем
операции представлена на Рисунке 3.1.
Рисунок 3.1 -Алгоритм выполнения вычислений
3.1 Тестирование программы
Тестирование программы было произведено рядом
студентов, в ходе которого возникла исключительная ситуация:
операция вычисления модуля и возведения в
степень производилась над первым числом z1,тогда как число z2 в это время
оставалось активным. Это могло бы в будущем привести к непониманию
пользователем результатов вычислений (модуль какого значения вычисляется).
Ошибка была немедленно исправлена (обработка исключительных ситуаций в пункте
Описание классов).
3.2 Минимальные технические
требования к компьютеру
Для корректной работы программы необходимо
соблюдение следующих условий:
процессор IntelPentium/Celeron 2400 МГц и выше;
объём ОЗУ 512 Мб и больше;
Мб свободного пространства на жёстком диске;
операционная система
MicrosoftWindowsXP/Vista/Windows7;
наличие устройств ввода-вывода: монитор, мышь,
клавиатура.
3.3 Схема работы приложения
Блок - схема работы приложения представлена на
Рисунке 3.2.
Рисунок 3.2 - Блок-схема работы приложения
Глава 4. Интерфейс программы
Программа должна обеспечить ввод с клавиатуры
одного или двух комплексных чисел и вычисление требуемых параметров одного
числа или осуществление арифметических операций с двумя числами.
Программа позволяет складывать, вычитать,
умножать, делить комплексные числа и выводить результат. На форме располагаются
шесть текстовых полей. Верхние четыре поля, для ввода чисел z1 и z2, а нижнее
для вывода расчетов. В нижнем правом углу поле для указания в степени n
(Рисунок 4.1).
Рисунок 4.1- Интерфейс программы
Инструкция пользователя
Вычисление модуля комплексного числа (Рисунок.
4.2):
Рисунок 4.2 - Вычисление модуля комплексного
числа
Для ввода значения действительных и мнимых
частей первого комплексного числа (z1) необходимо нажать на соответствующие
текстовые окна. По умолчанию введены значения 1 и 2. При недоступном втором
комплексном числе возможно только вычисление модуля и возведение в степень
единственного значения. Для выбора соответствующей опции необходимо выбрать
один из переключателей.[5] После нажатия кнопки «Вычислить» результат
вычислений отображается в нижнем текстовом поле, также отображается информация
о числе внизу решения.
Для активации полей ввода второго комплексного
числа нужно нажать на флажок около значения z2 (Рисунок4.3) . После активации
поля становятся доступными операции сложения, вычитания, умножения и деления.
Рисунок 4.3 - Вычисление суммы комплексных чисел
Заключение
программа тестирование комплексный
число
В результате работы была разработана программа,
которая осуществляет выполнение операций над комплексными числами на языке
программирования С#.
Программа обеспечивает ввод с клавиатуры одного
или двух комплексных чисел и вычисление требуемых параметров одного числа или
осуществление арифметических операций с двумя числами.
Программа рассчитана на любого пользователя, в
том числе непрофессионального, т.к. программа является легкой в использовании.
В дальнейшем планируется увеличение функционала
программы. Будет добавлена возможность выполнения операций с комплексными
числами, представленными в тригонометрической форме.
1. Комплексные
числа и работа с ними. URL:
http://www.dsplib.ru/content/complex/complex.html(дата обращения: 25.11.2014).
. Ашарина
И. В. Объектно-ориентированное программирование в C++: лекции и упражнения :
учеб. пособие//. - М: Горячая линия: Телеком, 2008. - 320с.
. Основы
объектно-ориентированного программирования. URL:
http://professorweb.ru/my/csharp/charp_theory/level3/3_1.php (дата обращения:
20.11.2014).
. Фленов
М. Библия С# //. - БХВ-Петербург, 2011.-560 с.
. Ушаков,
М. Инструментарий разработчика C# [Текст] / М. Ушаков // Системный
администратор. - 2013. - №10. - С. 85-91.
Приложение
: RationalNumberOperation
{im = 1f;Im
{
{im;
}
{= value;
}
}ComplexNumber() {
}ComplexNumber(Double re, Double im) : base(re)
{= im;
}
~ComplexNumber();Abs(ComplexNumber
cn)
{m = (float)Math.Sqrt(cn.Re * cn.Re
+ cn.Im * cn.Im);m;
}Summa(ComplexNumber cn1,
ComplexNumber cn2)
{CN = newComplexNumber();.Re =
cn1.Re + cn2.Re;.Im = cn1.Im + cn2.Im;CN;
}Raznost(ComplexNumber cn1,
ComplexNumber cn2)
{CN = newComplexNumber();.Re =
cn1.Re - cn2.Re;.Im = cn1.Im - cn2.Im;CN;
}Multipli(ComplexNumber cn1,
ComplexNumber cn2)
{CN = newComplexNumber();.Re =
cn1.Re * cn2.Re - cn1.Im * cn2.Im;.Im = cn1.Re * cn2.Im + cn1.Im * cn2.Re;CN;
}Delen(ComplexNumber cn1,
ComplexNumber cn2)
{CN = newComplexNumber();.Re =
(cn1.Re * cn2.Re + cn1.Im * cn2.Im) / (cn2.Re * cn2.Re + cn2.Im * cn2.Im);.Im =
(cn1.Im * cn2.Re - cn1.Re * cn2.Im) / (cn2.Re * cn2.Re + cn2.Im * cn2.Im);CN;
}Pow(ComplexNumber cn, float n)
{CN = newComplexNumber(1, 0);(int i
= 0; i < n; i++)= Multipli(CN, cn);CN;
}ToString()
{(this.Re + " + i" +
this.Im).ToString();
}Info()
{"Действительнаячасть:
" + re + "\nМнимаячаcть:
" + im;
}*(ComplexNumber a, ComplexNumber b)
{c = newComplexNumber();.Re = a.Re *
b.Re - a.Im * b.Im;.Im = a.Re * b.Im + a.Im * a.Re;
return c;
}
}