Калькулятор комплексных чисел
Оглавление
Цели
и основные задачи курсовой работы
Описание
предметной области
Используемые
подходы, методы и технологии программированиядиаграмма «Прецедентов» решаемой
задачидиаграмма «Классов» решаемой задачи
Текст
программы на языке программирования C#
Выводы
Используемая
литература
Цели и основные задачи курсовой
работы
Курсовая работа является комплексным
практическим заданием и решает следующие цели и задачи:
Цель - создание программы «Калькулятор
комплексных чисел».
Задачи:
. Описание предметной области
. Реализация функций сложения, вычитания,
умножения, деления, взятие комплексного числа по модулю, вычисление аргумента,
перевод числа, записанного в алгебраической форме в показательную форму.
Описание предметной области
Предметной областью решаемой задачи является
калькулятор комплексных чисел, реализующий операции сложения, умножения,
вычитания, деления, нахождение модуля и аргумента комплексного. Также имеется
возможность представить результат в показательной форме и изобразить
комплексное число на комплексной плоскости.
Используемые подходы, методы и
технологии программирования
Необходимость в комплексных числах появилась при
решении квадратных уравнений для случая D <0 (здесь D - дискриминант
квадратного уравнения). Долгое время эти числа не находили физического
применения, поэтому их и назвали «мнимыми» числами. Однако сейчас они очень
широко применяются в различных областях физики и техники: электротехнике,
гидро- и аэродинамике, теории упругости и др.
Комплексные числа записываются в виде: a+ bi.
Здесь a и b действительные числа, а i - мнимая единица, т.e. i 2 = -1. Число a
называется абсциссой, a b - ординатой комплексного числа a+ bi. Два комплексных
числа a+ bi и a bi называются сопряжёнными комплексными числами.
Сложение - рисунок 1. Суммой комплексных чисел
a+ bi и c+ di называется комплексное число ( a+ c ) + ( b+ d ) i. Таким
образом, при сложениикомплексных чисел отдельно складываются их абсциссы и
ординаты. Это определение соответствует правилам действий с обычными
многочленами.
Рисунок 1
Вычитание - рисунок 2. Разностью двух
комплексных чисел a+ bi (уменьшаемое) и c+ di (вычитаемое) называется
комплексное число ( a - c ) + ( b - d ) i. Таким образом, при вычитании двух
комплексных чисел отдельно вычитаются их абсциссы и ординаты.
Рисунок 2
Умножение - рисунок 3. Произведением комплексных
чисел a+ bi и c+ di называется комплексное число: ( ac - bd ) + ( ad + bc ) i .
Это определение вытекает из двух требований:
) числа a+ bi и c+ di должны перемножаться, как
алгебраические двучлены,
) число i обладает основным свойством: i 2 = -1.
Рисунок 3
Разделить комплексное число (рисунок 4) a+ bi
(делимое) на другое c+ di (делитель) - значит найти третье число e+ f i
(чатное), которое будучи умноженным на делитель c+ di, даёт в результате
делимое a+ bi.Если делитель не равен нулю, деление всегда возможно.
(a+bi/c+di) =
((a*c+b*d)/(c^2+d^2))+((b*c-a*d)/(c^2+d^2))*i.
Рисунок 4
Модулем комплексного числа (рисунок 5)
называется длина вектора OP, изображающего комплексное число на координатной
(комплексной) плоскости. Модуль комплексного числа a+ bi обозначается | a+ bi |
или буквой r и равен: r=|a+bi| = .
Рисунок 5
Аргумент комплексного числа (рисунок 6,7) - это
угол между осью OX и
вектором OP, изображающим это комплексное число. Отсюда, tan = b / a .
Рисунок 6
Рисунок 7
Uml-диаграмма «Прецедентов» решаемой
задачи
Рисунок 8
диаграмма «Классов» решаемой задачи
Рисунок 9
Текст программы на языке программирования
С#
Программа реализована в двух формах.
Текст программы
Form1:
using
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;WindowsFormsApplication49
{partial class
Form1 : Form
{Form1()
{();
}
/// <summary>
/// Переход на новую форму для
представления комплексного числа на плоскости
///
</summary>
/// <param
name="sender"></param>
/// <param
name="e"></param>
private void
button7_Click(object sender, EventArgs e)
{f1 = new
Form2();.Show();
}void оПрограммеToolStripMenuItem_Click(object
sender, EventArgs e)
{.Show("Программа
предназначена для работы с комплексными числами. Возможно реализовать сложение,
вычитание, умножение и деление числа, представленного в алгебраической форме, а
также перевод результата арифметических действий в показательную форму,
нахождение модуля и аргумента комплексного числа. В программе также имеется
возможность изображения комплексного числа на плоскости.");
}
/// <summary>
/// Обработка события
"нажатие на кнопку"
///
</summary>
/// <param
name="sender"></param>
/// <param
name="e"></param>void button1_Click(object sender, EventArgs
e)
{a =
Convert.ToInt32(textBox1.Text);b = Convert.ToInt32(textBox2.Text);c =
Convert.ToInt32(textBox3.Text);d = Convert.ToInt32(textBox4.Text);
int x = a + c;y = b
+ d;
textBox5.Text =
x.ToString();.Text = y.ToString();
}(checkBox2.Checked
== true) //Вычитание
{a =
Convert.ToInt32(textBox1.Text);b = Convert.ToInt32(textBox2.Text);c =
Convert.ToInt32(textBox3.Text);d = Convert.ToInt32(textBox4.Text);
int x = a - c;y = b
- d;
textBox5.Text =
x.ToString();.Text = y.ToString();
}(checkBox3.Checked
== true) // Умножение
{a =
Convert.ToInt32(textBox1.Text);b = Convert.ToInt32(textBox2.Text);c =
Convert.ToInt32(textBox3.Text);d = Convert.ToInt32(textBox4.Text);
int x = a * c - b *
d;y = a * d + b * c;
textBox5.Text =
x.ToString();.Text = y.ToString();
}(checkBox4.Checked
== true) // Деление
{a =
Convert.ToDouble(textBox1.Text);b = Convert.ToDouble(textBox2.Text);c =
Convert.ToDouble(textBox3.Text);d = Convert.ToDouble(textBox4.Text);x = (a * c
+ b * d) / (Math.Pow(c, 2) + Math.Pow(d, 2));y = (b * c - a * d) / (Math.Pow(c,
2) + Math.Pow(d, 2));.Text = x.ToString();
textBox6.Text =
y.ToString();
}(checkBox5.Checked
== true) // Модуль
{a =
Convert.ToInt32(textBox5.Text);b = Convert.ToInt32(textBox6.Text);mod =
Math.Sqrt(Math.Pow(a, 2) + Math.Pow(b, 2));.Text = mod.ToString();
}(checkBox6.Checked
== true) // Аргумент
{a =
Convert.ToDouble(textBox5.Text);b = Convert.ToDouble(textBox6.Text);KSI =
(Math.Atan(b / a) * 180) / Math.PI;.Text = KSI.ToString();
}
}
/// <summary>
/// Очистка
///
</summary>
/// <param
name="sender"></param>
/// <param
name="e"></param>void button3_Click(object sender, EventArgs
e)
{.Clear();.Clear();.Clear();.Clear();.Clear();.Clear();
textBox8.Clear();.Clear();.Clear();
textBox10.Clear();
}
/// <summary>
/// Представление результата
вычислений в показательной форме
///
</summary>
/// <param name="sender"></param>
/// <param
name="e"></param>void button2_Click(object sender, EventArgs
e)
{a =
Convert.ToDouble(textBox5.Text);b = Convert.ToDouble(textBox6.Text);A =
Math.Sqrt(Math.Pow(a, 2) + Math.Pow(b, 2));.Text = A.ToString();KSI =
(Math.Atan(b / a) * 180) / Math.PI;.Text = KSI.ToString();
}
/// <summary>
/// Выход из программы (кнопка
на форме)
///
</summary>
/// <param
name="sender"></param>
/// <param
name="e"></param>void button4_Click(object sender, EventArgs
e)
{(MessageBox.Show("Хотите
выйти из программы?",
"Завершение",
MessageBoxButtons.YesNo) == DialogResult.Yes).Exit();
}
/// <summary>
/// Выход из программы (в меню)
///
</summary>
/// <param
name="sender"></param>
/// <param
name="e"></param>void выходToolStripMenuItem_Click(object sender, EventArgs e)
{(MessageBox.Show("Хотите
выйти из программы?",
"Завершение",
MessageBoxButtons.YesNo) == DialogResult.Yes).Exit();
}
}
}
Текст программы Form2:
using
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;WindowsFormsApplication49
{partial class
Form2 : Form
{Form2()
{();
}
/// <summary>
/// Представление комплексного числа на комплексной плоскости
///
</summary>
/// <param
name="sender"></param>
/// <param
name="e"></param>void button1_Click(object sender, EventArgs
e)
{a =
Convert.ToDouble(textBox1.Text);b = Convert.ToDouble(textBox2.Text);A =
Math.Sqrt(Math.Pow(a, 2) + Math.Pow(b, 2));.Text = A.ToString();KSI =
(Math.Atan(b / a) * 180) / Math.PI;.Text = KSI.ToString();x, y, k=0, f1 = 0; f0
= Convert.ToDouble(textBox4.Text);(f0 > 0 && f0 < 90)
{= f0 * Math.PI /
180;= Math.Tan(f1);(x = 0; x <= 180; x += 0.01)
{= k *
x;.Series["Series1"].Points.AddXY(x, y);
}
}(f0 > 90
&& f0 < 180)
{= k *
x;.Series["Series1"].Points.AddXY(x, y);
}
}(f0 > 180
&& f0 < 270)
{= f0 * Math.PI /
180;= Math.Tan(f1);(x = -180; x <= 0; x += 0.01)
{= k *
x;.Series["Series1"].Points.AddXY(x, y);
}
}(f0 > 270
&& f0 < 360)
{= f0 * Math.PI /
180;= Math.Tan(f1);(x = 0; x <= 180; x += 0.01)
{= k *
x;.Series["Series1"].Points.AddXY(x, y);
}
}(f0 > 89
&& f0<91)
{(y = 0; y <=
180; y += 0.01)
{= 1;
chart2.Series["Series1"].Points.AddXY(x,
y);
}
}(f0 > 179 &&
f0 < 181)
{(x = -180; x
<=0 ; x += 0.01)
{=
1;.Series["Series1"].Points.AddXY(x, y);
}
}(f0 > 269
&& f0 < 271)
{(y = -180; y <=
0; y += 0.01)
{=
1;.Series["Series1"].Points.AddXY(x, y);
}
}(f0 > 359
&& f0 < 361)
{(x = 0; x <=
180; x += 0.01)
{= 1;.Series["Series1"].Points.AddXY(x,
y);
}
}
}
/// <summary>
/// Очистка графика
///
</summary>
/// <param
name="sender"></param>
/// <param
name="e"></param>void button2_Click(object sender, EventArgs
e)
{.Series[0].Points.Clear();
}
/// <summary>
/// Очистка
TextBox
///
</summary>
/// <param
name="sender"></param>
/// <param
name="e"></param>void button4_Click(object sender, EventArgs
e)
{.Clear();.Clear();.Clear();
textBox4.Clear();
}
}
}
Выводы
комплексный число программирование
В результате выполнения данной курсовой работы
были закреплены теоретические знания по дисциплине «Объектно-ориентированное
программирование», а именно созданы Uml-диаграмма прецедентов и Uml-диаграмма
классов, освоены новые приемы в комментировании и документировании текста программы.
Таким образом, был создан готовый программный продукт, на основе технологий
объектно-ориентированного программирования в срезе разработки Visual Studio
2012 Ultimate - калькулятор комплексных чисел, реализующий функции сложения,
вычитания, умножения, деления, взятие комплексного числа по модулю и вычисление
аргумента, а также реализована возможность изображения комплексного числа на
комплексной плоскости.
Используемая литература
1. С#
/ X. Дейтел, П. Дейтел, Д. Листфилд и др. - СПб.:БХВ-Петербург, 2006. - С.
1056.
2. Петцольд,
Ч. Программирование для Microsoft Windows на С# / Ч. Петцольд. - М.:
Издательско-торговый дом «Русская Редакция», 2002. - Т. 1. - С. 576.
. Петцольд,
Ч. Программирование для Microsoft Windows на С# / Ч. Петцольд, - М.: Издательско-торговый
дом «Русская Редакция», 2002. - Т. 2. - С. 624.
. Рамбо,
Д. UML 2.0. Объектно-ориентированное моделирование и разработка. 2-е изд. / Д.
Рамбо, М. Блаха. - СПб. Литер, 2007. - С. 544.
. Рихтер,
Д. CLR via С#. Программирование на платформе Microsoft .NET Framework 2.0 на
языке С#. Мастер-класс. / Пер. с англ. / Д. Рихтер. - М.: Издательско-торговый
дом «Русская Редакция»; СПб.: Питер, 2007. - С. 656.
. Фаулер,
М. UML. Основы.-Пер. с англ. / М. Фаулер, К. Скотт,- СПб.: Символ-Плюс, - С.
192.
. Шилдт,
Г. С#: учебный курс / Г. Шилдт. - СПб.: Питер: К.: Издательская группа BHV, 9 -
С. 512.