Реализация класса для работы с комплексными числами

Министерствообразования Республики Беларусь
Оршанский колледж УО «ВГУ им. П.М. Машерова»
Специальность 2-40 01 01
«Программное обеспечениеинформационных технологий»
Курсовойпроект по дисциплине
«Конструирование программ и языкипрограммирования»
Реализация класса
для работы с комплексными числами
Разработала — Семашко Ю.А.Научный руководитель —
Троцкий М.А.
 
Орша 2010

Оглавление
 
ВВЕДЕНИЕ
Глава 1.ПОСТАНОВКА ЗАДАЧИ
1.1 Общая характеристика задачи
Глава 2. ПРОЕКТИРОВАНИЕПРОГРАММНОГО МОДУЛЯ
2.1 Входные данные
2.2 Выходные данные
2.3 Описание данных, используемых прирешении задачи
2.4 Описание схемы программы
Глава 3.РЕАЛИЗАЦИЯ ПРОГРАММНОГО МОДУЛЯ
3.1 Описание используемых типовданных
3.2 Проектирование интерфейса
3.3 Написание кода для ввода и выводаисходных данных
Глава 4.ТЕСТИРОВАНИЕ ПРОГРАММНОГО МОДУЛЯ
4.1 Тестирование программы
Глава 5.ЭНЕРГО И РЕСУРСОСБЕРЕЖЕНИЕ
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
ПРИЛОЖЕНИЯ

ВВЕДЕНИЕ
Математика – одна изсамых древних наук. Первые математические представление появились и понятияпоявились в доисторическое время. Они возникли в процессе практическойдеятельности людей. Из самой природы человек заимствовал геометрические формы;в процессе решения практических задач возникали понятия арифметики и геометрии.
В 17 веке в связи с запросамипрактики математические исследования необычайно расширяются, и возникаетнесколько новых направлений: аналитическая геометрия, анализ бесконечно малых,теория вероятностей и др. создание аналитической геометрии и анализа явилосьподлинной революцией в математике. В центре исследований оказались новыеобъекты и методы.
Математика перешла кизучению переменных величин и функций, как аналогов механического движения ивсякого изменения вообще.
21 век – векинформационных технологий. Информационные технологии используются как напредприятиях в производстве, так и организациях, связанных с наукой,образованием, искусством. Наиболее прочно программирование и созданиепрограммных продуктов взаимосвязано с математикой, с помощью которойосуществляется построение алгоритмов и поиск решений.
Темой данного курсовогопроекта является создание класса для работы с комплексными числами. В данномпроекте можно проследить взаимодействие математики и программирования.

Глава 1. ПОСТАНОВКА ЗАДАЧИ
 
1.1     Общаяхарактеристика задачи
Реализовать класс,который позволяет работать с типом данных  комплексные числа, представленномкак в арифметической, так и тригонометрических формах.
В классе должны бытьпредставлены следующие операции по работе  с комплексными числами:
1.        сложение двухкомплексных чисел;
2.        вычитание двухкомплексных чисел;
3.        умножение двухкомплексных чисел;
4.        деление двухкомплексных чисел;
5.        нахождение n-ой степени комплексного числа;
6.        вычисления корня n-ой степени комплексного числа;
7.        перевод чисел изарифметической формы в тригонометрическую и в показательную;

Глава 2. ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО МОДУЛЯ
 
2.1 Входныеданные
В данной программе вкачестве входных данных пользователю
необходимо ввести два комплексныхчисла, а также значение степени выполнения функции возведения в степень,степень для вычисления корня и номер корня комплексного числа. Ввод данныхосуществляется с помощью клавиатуры.
 
2.2Выходные данные
Выходные данныепользователь получает после введения всех входных данных и нажатия клавиши .
Выходными даннымиявляются комплексные числа в арифметической и (или) тригонометрической форме,полученные в результате выполнения операций над входными данными.
2.3Описание данных, используемых при решении задачи
Комплексным числом называетсявыражение вида a + ib, где a и b – любые действительные числа, i – специальноечисло, которое называется мнимой единицей. Для таких выражений понятияравенства и операции сложения и умножения вводятся следующим образом:
1.        два комплексныхчисла a + ib и c + id называются равными тогда и только тогда, когда a = b и c= d;
2.        суммой двухкомплексных чисел a + ib и c + id называется комплексное число a + c + i(b +d);
3.        произведениемдвух комплексных чисел a + ib и c + id называется комплексное число ac – bd +i(ad + bc).
Комплексные числа частообозначают одной буквой, например, z = a + ib. Действительное число aназывается действительной частью комплексного числа z, действительная частьобозначается a = Re z. Действительное число b называется мнимой частьюкомплексного числа z, мнимая часть обозначается b = Im z.
Модулем комплексногочисла называется длина вектора, соответствующего этому числу:
/>
Модуль комплексного числаz обычно обозначается или r. Указанная в определении формула легко выводитсяпри помощи теоремы Пифагора  (см. рис. 1).
/>
Рисунок1
Если />то />то есть длядействительного числа модуль совпадает с абсолютной величиной. Ясно, что /> для всех />При этом />тогда и толькотогда, когда />
Арифметические операциинад комплексными числами были определены в предыдущем пункте. Эти операцииобладают следующими свойствами:
1.        коммутативностьсложения: z1 + z2 = z2 + z1 для любых /> />/>.
2.        ассоциативностьсложения: (z1 + z2) + z3 = z1 + (z2 + z3) для любых /> />/>.
3.        существует такоечисло z = 0, которое обладает свойством z + 0 = z для любого z/>/>.
4.        для любых двухчисел z1 и z2 существует такое число z, что z1 + z = z2. Такое число zназывается разностью двух комплексных чисел и обозначается z = z2 – z1.
5.        коммутативностьумножения: z1z2 = z2z1 для любых /> />/>.
6.        ассоциативностьумножения: (z1z2)z3 = z1(z2z3)
для любых />/>/>.
7.        дистрибутивностьсложения относительно умножения: z1(z2 + z3) = z1z2 + z1z3 для любых/>/>/>.
8.        для любогокомплексного числа z:z · 1 = z.
9.        для любых двухчисел /> и />существуеттакое число z, что />Такое число z называется частнымдвух комплексных чисел и обозначается
/>Деление на 0 невозможно.
Все указанные свойствадоказываются с помощью определения операций сложения и умножения.
Если число z = a + bi, точисло /> называетсякомплексно сопряжённым с числом z.

/>
Рисунок2.
Пусть /> и φ = arg z. Тогдапо определению аргумента имеем:
/>
Отсюда получается
z = a + bi = r(cos φ+ i sin φ).
Такая форма называетсятригонометрической формой записи комплексного числа. Как видно, для того, чтобыперейти от алгебраической формы записи комплексного числа к тригонометрическойформе, нужно найти его модуль и один из аргументов.
Арифметические действиянад комплексными числами, записанными в тригонометрической форме, производятсяследующим образом. Пустьz1 = r1(cos φ1 + i sin φ1)и z2 = r2(cos φ2 + i sin φ2). Имеем:

/>
/>
Первая формула Муавра:
/>
Вторая формула Муавра:
/>

2.4 Описаниесхемы программы/> /> /> /> /> /> /> />
/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> />
Вычисление f2   />

/>
Глава 3 РЕАЛИЗАЦИЯ ПРОГРАММНОГОМОДУЛЯ
 

3.1     Описаниеиспользуемых типов данных
В программе используютсяследующие типы данных:
1)        Double – тип данных с плавающей точкойдвойной точности. Диапазон значений от 1,7Е-308 до 1,7Е+308. Длина типа double вне зависимости от используемогокомпилятора всегда больше или равна длине типа float и короче или равна длине типа long double.
2)        Int – предназначен для хранения целыхчисел, входящих в диапазон от -2147489648 до +2147483647, имеет размер32-разрядное целое число со знаком. Над переменными типа int могут выполняться следующиеоперации: сложение, вычитание, умножение, деление, целочисленное деление,деление с остатком.
3.2     Проектированиеинтерфейса
Данная программаразрабатывалась с помощью среды программирования Microsoft Visual Studio 2005. Программа является консольным приложением.Интерфейс программы во время выполнения:
/>

3.3 Написаниекода для ввода и вывода исходных данных
Код для ввода и выводаданных:
void Complex::ShowComplex(){
cout
cin >> re;
cin >> im;
cout
double z=sqrt(re*re+im*im);
cout
cout
double f=re/z;
double f1=im/z;
cout
}
 

Глава 4 ТЕСТИРОВАНИЕ ПРОГРАММНОГО МОДУЛЯ
 
4.1Тестирование программы
Тестирование программыпроводилось с целью проверки работоспособности программы.
Тестирование проводилосьна персональном компьютере со следующими характеристиками:
–          Процессор Celeron(R);
–          Видеокарта SIS650/651/740/661FX/741/760 series;
–          Оперативнаяпамять 256 Mb;
— Материнская плата ECS NForce3-A;
–          Монитор LG Flatron T750BH Plus;
— Винчестер 80Gb.
Результаты тестированияприведены в приложении Б.

Глава 5 ЭНЕРГО И РЕСУРСОСБЕРЕЖЕНИЕ
Энергосбережение – этосистема мер, направленных на уменьшение потребления энергии путем внедренияновых энергосберегающих технологий и рационального использованияэнергоресурсов.
Экономия материальныхресурсов при разработке программного продукта может быть достигнута за счетследующих мероприятий:
–         использованияждущего режима;
–         использованияспящего режима;
–         использования LCD мониторов;
–         приобщения кменее ресурсоемким передовым технологиям.
В настоящее времяэнергетическая проблема является одной из наиболее актуальных для РеспубликиБеларусь. Степень самообеспечения энергоресурсами в последние годы в среднемсоставляет около 15%. Миллиарды долларов ежегодно тратит наша республика назакупки энергоносителей за рубежом. Одним из основных направлений решенияэнергетической проблемы является энергосбережение. По некоторым оценкам, егопотенциал на нынешний момент составляет до 30 % от всех средств,расходуемых на приобретение энергоносителей. В комплексе мероприятий,направленных на повышение эффективности использования энергии, важнейшая рольотводится формированию информационно-образовательной системы по вопросамэнергосбережения.
Режимы труда и отдыха приработе с ЭВМ, ПЭВМ и ВДТ должны определятся видом и категорией трудовойдеятельности.
Виды трудовойдеятельности разделяются на 3 группы:
–         группа А – работапо считыванию информации с экрана ВДТ, ПЭВМ или ЭВМ с предварительным запросом;
–         группа Б – работапо вводу информации;
–         группа В –творческая работа в режиме диалога с ЭВМ.
Категории работы с ВДТ, ЭВМ и ПЭВМ Уровень нагрузки за рабочую смену при видах работ с ВДТ Суммарное время регламентированных перерывов, мин группа А, количество знаков группа Б, количество знаков группа В, час. при 8-ми часовой смене при 12-ти часовой смене 1 до 20000 до 1500 до 2,0 30 70 11 до 40000 до 3000 до 4,0 50 90 111 до 60000 до 4000 до 6,0 70 120
Время регламентированныхперерывов в течение рабочей смены следует устанавливать в зависимости от еепродолжительности, вида и категории трудовой деятельности.
Стандарт управленияэнергопотреблением компьютеров, описывает три различных режима работыкомпьютера. Эти режимы отличаются потребляемой мощностью электроэнергии.
Ждущий режим — позволяетэкономить энергию, за счет отключения всех периферийных устройств, кроме ЦПУ,ОЗУ и материнской платы.
Спящий режим — позволяет экономитьэлектроэнергию на 100%, так как отключаются все периферийные устройства.
Основной режим — при этомрежиме экономии нет. Потребляемая мощность около 400Ватт.
Для нахождения количестварабочих дней, в течение которых разрабатывался программный продукт, используемформулу
n = Тпк /(8-tрп),
где Тпк– время работыкомпьютера, ч;
Тпк =80 ч.;
tрп– суммарное время регламентированныхперерывов, в течение
рабочего дня, ч;
tрп =80 мин=4/3 часа.
n=80/(8-1.33) = 12 дней.
Для нахождения суммарнойпродолжительности регламентированных перерывов в течение всего времениразработки программного модуля
Трп = n ´ tрп,(2)
где Трп – суммарнаяпродолжительность регламентированных перерывов в течение всего времениразработки программного модуля.
Трп = 12 ´ 1.33=15,96 ч.
Экономия электроэнергиирассчитывается по формуле:
Сэн=Трп´(Wпк-Wсп)´250,(3)
где Wпк– потребляемая мощность ПК, кВт;
Wпк = 0,6 кВт;
Wсп– потребляемая мощность компьютерав ждущем режиме;
Wсп = 0,1 кВт.
Сэн=15,96´(0,6-0,1)´250=1995 руб.
Использование мер поэнерго- и ресурсосбережению, при разработке программного модуля, позволилосэкономить денежные средства в размере 1995 рублей.

ЗАКЛЮЧЕНИЕ
В результате выполненияданного курсового проекта был реализован класс Complex, позволяющий работать с комплексными числами.
Программа позволяетпроизводить следующие операции с комплексными числами:
1. сложение двухкомплексных чисел;
2. вычитание двухкомплексных чисел;
3. умножение двухкомплексных чисел;
4. деление двухкомплексных чисел;
5. нахождение n-ой степени комплексного числа;
6. вычисления корня n-ой степени комплексного числа;
7. перевод чисел изарифметической формы в тригонометрическую и в показательную формы;
Курсовой проект содержитпрограмму со всеми необходимыми файлами, хранящуюся на диске, а также блок-схему,иллюстрирующую работу программы.

СПИСОКИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
1.        Павловская Т. А.,Щупак Ю. А. «C++. Объектно-ориентированное программирование: Практикум.» —СПб.: Питер, 2006. — 265 с: ил.
2.        Шилдт Г.«Самоучитель C++»: Пер. с англ. — 3-е изд. — СПб.: БХВ-Петербург, 2005. — 688с.
3.        Бишоп ДЖ.,Хорспул Н. «C в кратком изложении»: Пер. с англ. – М.: БИНОМ. Лабораториязнаний, 2005. – 472 с., ил.
4.        Агуров П.В. «C.Сборник рецептов». – СПб.: БХВ-Петербург, 2007. – 432 с.: ил.
5.        Павловская Т. А.,Щупак Ю. А. «С/C++. Структурное программирование: Практикум.» — СПб.: Питер,2003. — 240 с: ил.
6.        Седжвик Р.«Фундаментальные алгоритмы на C++.»: Пер. с англ. – К.: Издательство «ДиаСофт»,2001. – 688с.
7.        «Основы Microsoft Visual Studio.NET.»: Пер. С англ. – М.: Издательско-торговый дом «Русская Редакция»,2003. – 464 стр.: ил.
8.        Гусак А.А.«Высшая математика» — Минск: ТетраСистемс, 2007. – 544 с.
9.        Кунцевич С.П.«Языки С и С++» — Витебск: Издательство УО «ВГУ им. П. М. Машерова», 2004. – 64 с.
10.     Роберт С.«Фундаментальные алгоритмы на С++»: Пер. с англ. – К.: Издательство «ДиаСофт»,2001. – 688 с.

ПРИЛОЖЕНИЯ
 
ПриложениеА (обязательное)
Текстпрограммы
#pragma once
class Complex
{
public:
friend Complex operator + (Complex &a1, Complex &b1);
friend Complex operator — (Complex &a1, Complex &b1);
friend Complex operator * (Complex &a1, Complex &b1);
friend Complex operator / (Complex &a1, Complex &b1);
friend Complex operator & (Complex &a1, Complex &b1);
friend Complex operator &&(Complex &a1,Complex &b1);
friend Complex operator == (Complex &a1,Complex &b1);
void ShowComplex();
public:
Complex(void);
Complex(double a1, double b1);
~Complex(void);
int n;
private:
doublere;
doubleim;
};
#include «stdafx.h»
#include «Complex.h»
#include «iostream»
#include «math.h»
using namespace std;
Complex::Complex(void)
{
}
Complex::Complex(double a, double b)
{
re=a;
im=b;
}
Complex::~Complex(void)
{
}
Complex operator + (Complex &a, Complex &b){
double re = a.re + b.re;
double im = a.im + b.im;
cout
double f1=sqrt(re*re+im*im);
double f2=re/f1;
double f3=im/f1;
cout
cout
Complex t(re,im);
return t;
}
Complex operator — (Complex &a, Complex &b){20
double re = a.re — b.re;
double im = a.im — b.im;
cout
double f1=sqrt(re*re+im*im);
double f2=re/f1;
double f3=im/f1;
cout
cout
Complex t(re,im);
return t;
}
Complex operator * (Complex &a, Complex &b){
double re = a.re*b.re — a.im*b.im;
double im = a.im*b.re+a.re*b.im;
cout
double f1=sqrt(re*re+im*im);
double f2=re/f1;
double f3=im/f1;
cout
cout
Complex t(re,im);
return t;
}
Complex operator / (Complex &a, Complex &b){
if(b.re*b.re+b.im*b.im==0)
{
cout
}
else{
double re=(a.re*b.re+a.im+b.im)/(b.re*b.re+b.im*b.im);
double im=(a.im*b.re-a.re*b.im)/(b.re*b.re+b.im*b.im);
cout
double f1=sqrt(re*re+im*im);
double f2=re/f1;
double f3=im/f1;
cout
cout
Complex t(re,im);
return t;
}
}
Complex operator &(Complex &a, Complex &b){
int n;
cout
cin >> n;
double r=sqrt(a.re*a.re+a.im*a.im);
double rn=pow(2,r);
double f2=n*a.re/rn;
double f3=n*a.im/rn;
cout
cout
Complex t(n,rn);
return t;
}
Complex operator &&(Complex &a,Complex &b){
int m;
int k;
cout
cin >> m;
cout
cin >> k;
double r=sqrt(a.re*a.re+a.im*a.im);21
double rn=pow(2,r);
double f1=(m*a.re/rn+2*3,14*k)/m;
double f2=(m*a.im/rn+2*3.14*k)/m;
cout
cout
Complex t(m,k);
return t;
}
Complex operator == (Complex &a,Complex &b){
double r=sqrt(a.re*a.re+a.im*a.im);
double f2=a.re/r;
cout
cout
Complex t(r,f2);
return t;
}
void Complex::ShowComplex(){
cout
cin >> re;
cin >> im;
cout
double z=sqrt(re*re+im*im);
cout
cout
double f=re/z;
double f1=im/z;
cout
}
#include «stdafx.h»
#include «Complex.h»
#include «conio.h»
#include «iostream»
#include «math.h»
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
Complex a;
Complex b;
Complex ob;
a.ShowComplex();
b.ShowComplex();
a+b;
a-b;
a*b;
a/b;
a&b;
a&&b;
a==b;
getch();
return 0;
}22

ПриложениеБ (Справочное)
Результатытестирования
/>/>
/>/>/>23
/>/>/>

/>/> /> /> /> /> /> /> /> />

24
/>/>
/>/>/>25