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

Министерство образования Республики Беларусь

Оршанский колледж УО «ВГУ им. П.М. Машерова»

Специальность 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. ПОСТАНОВКА ЗАДАЧИ

	

Общая характеристика задачи



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

В классе должны быть представлены следующие операции по работе  с комплексными числами:

сложение двух комплексных чисел;

вычитание двух комплексных чисел;

умножение двух комплексных чисел;

деление двух комплексных чисел;

нахождение n-ой степени комплексного числа;

вычисления корня n-ой степени комплексного числа;

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




Глава 2. ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО МОДУЛЯ



2.1 Входные данные



В данной программе в качестве входных данных пользователю

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



2.2 Выходные данные



Выходные данные пользователь получает после введения всех входных данных и нажатия клавиши <Enter>.

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



2.3 Описание данных, используемых при решении задачи



Комплексным числом называется выражение вида a + ib, где a и b – любые действительные числа, i – специальное число, которое называется мнимой единицей. Для таких выражений понятия равенства и операции сложения и умножения вводятся следующим образом:

два комплексных числа a + ib и c + id называются равными тогда и только тогда, когда a = b и c = d;

суммой двух комплексных чисел a + ib и c + id называется комплексное число a + c + i(b + d);

произведением двух комплексных чисел 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



Если то то есть для действительного числа модуль совпадает с абсолютной величиной. Ясно, что  для всех При этом тогда и только тогда, когда 

Арифметические операции над комплексными числами были определены в предыдущем пункте. Эти операции обладают следующими свойствами:

коммутативность сложения: z1 + z2 = z2 + z1 для любых  .

ассоциативность сложения: (z1 + z2) + z3 = z1 + (z2 + z3) для любых  .

существует такое число z = 0, которое обладает свойством z + 0 = z для любого z.

для любых двух чисел z1 и z2 существует такое число z, что z1 + z = z2. Такое число z называется разностью двух комплексных чисел и обозначается z = z2 – z1.

коммутативность умножения: z1z2 = z2z1 для любых  .

ассоциативность умножения: (z1z2)z3 = z1(z2z3)

для любых .

дистрибутивность сложения относительно умножения: z1(z2 + z3) = z1z2 + z1z3 для любых.

для любого комплексного числа z:z · 1 = z.

для любых двух чисел  и существует такое число 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 Описание схемы программы





Complex operator +

Вычисление re

Вычисление im

Вывод результата

Вычисление t

Return t

ShowComplex

Ввод 1 числа

Вывод результата

Ввод 2 числа

Вывод результата








































Complex operator &&

Вывод результата

Return t

Вычисление r

Вычисление rn

Вычисление f2

Complex operator &

Ввод n

Вычисление f3





Ввод m







Ввод k







Вычисление r







Вычисление rn







Вычисление f1







Вычисление f2













Return t

Вывод результата
Глава 3 РЕАЛИЗАЦИЯ ПРОГРАММНОГО МОДУЛЯ



Описание используемых типов данных



В программе используются следующие типы данных:

Double – тип данных с плавающей точкой двойной точности. Диапазон значений от 1,7Е-308 до 1,7Е+308. Длина типа double вне зависимости от используемого компилятора всегда больше или равна длине типа float и короче или равна длине типа long double.

Int – предназначен для хранения целых чисел, входящих в диапазон от -2147489648 до +2147483647, имеет размер 32-разрядное целое число со знаком. Над переменными типа int могут выполняться следующие операции: сложение, вычитание, умножение, деление, целочисленное деление, деление с остатком.



Проектирование интерфейса



Данная программа разрабатывалась с помощью среды программирования Microsoft Visual Studio 2005. Программа является консольным приложением. Интерфейс программы во время выполнения:






3.3 Написание кода для ввода и вывода исходных данных



Код для ввода и вывода данных:

void Complex::ShowComplex(){

cout << "Vvedite chislo" <<endl;

cin >> re;

cin >> im;

cout << "Arif. forma: " << re << " + " << im << "i" << endl;

double z=sqrt(re*re+im*im);

cout << "Modul' shisla:" << z << endl;

cout << "Trigonom form" << endl;

double f=re/z;

double f1=im/z;

cout << z << "(cos(" << f << ") + isin(" << f1 << "))" << endl;

}




Глава 4 ТЕСТИРОВАНИЕ ПРОГРАММНОГО МОДУЛЯ



4.1 Тестирование программы



Тестирование программы проводилось с целью проверки работоспособности программы.

Тестирование проводилось на персональном компьютере со следующими характеристиками:

Процессор Celeron(R);

Видеокарта SIS 650/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. перевод чисел из арифметической формы в тригонометрическую и в показательную формы;

Курсовой проект содержит программу со всеми необходимыми файлами, хранящуюся на диске, а также блок-схему, иллюстрирующую работу программы.




СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ



Павловская Т. А., Щупак Ю. А. «C++. Объектно-ориентированное программирование: Практикум.» — СПб.: Питер, 2006. — 265 с: ил.

Шилдт Г. «Самоучитель C++» : Пер. с англ. — 3-е изд. — СПб.: БХВ-Петербург, 2005. — 688 с.

Бишоп ДЖ., Хорспул Н. «C в кратком изложении»: Пер. с англ. – М.: БИНОМ. Лаборатория знаний, 2005. – 472 с., ил.

Агуров П.В. «C. Сборник рецептов». – СПб.: БХВ-Петербург, 2007. – 432 с.: ил.

Павловская Т. А., Щупак Ю. А. «С/C++. Структурное программирование: Практикум.» — СПб.: Питер, 2003. — 240 с: ил.

Седжвик Р. «Фундаментальные алгоритмы на C++.»: Пер. с англ. – К.: Издательство «ДиаСофт», 2001. – 688с.

«Основы Microsoft Visual Studio.NET.»: Пер. С англ. – М.: Издательско-торговый дом «Русская Редакция», 2003. – 464 стр.: ил.

Гусак А.А. «Высшая математика» - Минск : ТетраСистемс, 2007. – 544 с.

Кунцевич С.П. «Языки С и С++» - Витебск: Издательство УО «ВГУ им. П. М. Машерова», 2004. – 64 с.

Роберт С. «Фундаментальные алгоритмы на С++»: Пер. с англ. – К.: Издательство «ДиаСофт», 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:

double re;

double im;

};

#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 << "Summa arif.forma: " << re << " + " << im << "i" << endl;

double f1=sqrt(re*re+im*im);

double f2=re/f1;

double f3=im/f1;

cout << "Trigonom summa" << endl;

cout << f1 << "(cos(" << f2 << ") + isin(" << f3 << "))" << endl;

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 << "Raznost': " << re << " + " << im << "i" << endl;

double f1=sqrt(re*re+im*im);

double f2=re/f1;

double f3=im/f1;

cout << "Trigonom raznost'" << endl;

cout << f1 << "(cos(" << f2 << ") + isin(" << f3 << "))" << endl;

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 << "Proizvedenie: " << re << " + " << im << "i" << endl;

double f1=sqrt(re*re+im*im);

double f2=re/f1;

double f3=im/f1;

cout << "Trigonom proiz." << endl;

cout << f1 << "(cos(" << f2 << ") + isin(" << f3 << "))" << endl;

Complex t(re,im);

return t;

}

Complex operator / (Complex &a, Complex &b){

if(b.re*b.re+b.im*b.im==0)

{

cout <<"Delenie na 0";

}

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 << "Chasnoe: " << re << " + " << im << "i" << endl;

double f1=sqrt(re*re+im*im);

double f2=re/f1;

double f3=im/f1;

cout << "Trigonom chastnoe" << endl;

cout << f1 << "(cos(" << f2 << ") + isin(" << f3 << "))" << endl;

Complex t(re,im);

return t;

}

}

Complex operator &(Complex &a, Complex &b){

int n;

cout << "Vvedite chislo stepeni:" << endl;

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 << "Trigonom form vozvedenie v stepen' a:" << endl;

cout << rn << "(cos(" << f2 << ") + isin(" << f3 << "))" << endl;

Complex t(n,rn);

return t;

}

Complex operator &&(Complex &a,Complex &b){

int m;

int k;

cout << "Vvedite chislo ctepeni korny:" << endl;

cin >> m;

cout << "Vvedite nomer korny:" << endl;

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 << "Trigonom form vyshislenie korny a:" << endl;

cout << rn << "(cos(" << f1 << ") + isin(" << f2 << "))" << endl;

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 << "Eksponenta a:" << endl;

cout << r << "e^(i*" << f2 << ")" << endl;

Complex t(r,f2);

return t;

}

void Complex::ShowComplex(){

cout << "Vvedite chislo" <<endl;

cin >> re;

cin >> im;

cout << "Arif. forma: " << re << " + " << im << "i" << endl;

double z=sqrt(re*re+im*im);

cout << "Modul' shisla:" << z << endl;

cout << "Trigonom form" << endl;

double f=re/z;

double f1=im/z;

cout << z << "(cos(" << f << ") + isin(" << f1 << "))" << endl;

}

#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