};
Complex.cpp:
#include "comPlex.h"
int Complex::counter;
double const Complex::pi = 3.1415926536;
Complex::Complex(): real(0.), image(0.) // конструктор по умолчанию
{
counter++;
}
Complex::Complex(double re, double im): real(re), image(im) // конструктор с параметрами
{
counter++;
}
Complex::Complex(const Complex &obj) : real(obj.real), image(obj.image) // конструктор копирования
{
counter++;
}
Complex::~Complex() // деструктор
{
counter--;
}
int Complex::getCounter() // возврат счётчика
{
return counter;
}
void Complex::edit() // редактирование объекта
{
cin>>*this;
return;
}
void Complex::del(Complex* &obj) // удаление объекта
{
if (obj!=NULL)
{
delete obj;
obj = NULL;
}
return;
}
void Complex::show() // вывод объекта
{
cout<<*this;
return;
}
double Complex::mod() // модуль |Z|
{
return sqrt(real*real+image*image);
}
double Complex::arg() // аргумент arg Z
{
if (real>0) return atan(image/real);
if (real<0)
{
if (image>0) return pi+atan(image/real);
if (image<0) return -pi+atan(image/real);
if (image==0) return pi;
}
if (real==0)
{
if (image>0) return pi/2;
if (image<0) return -pi/2;
}
return 0;
}
ostream & operator << (ostream &out, Complex &obj) // cout<<
{
out<<"Z="<<obj.real<<"+"<<obj.image<<"*i"<<"\t"<<"|Z|="<<obj.mod()<<"\t";
if (obj.arg()!=0)
out<<"arg Z="<<obj.arg()*180/obj.pi<<"\t\n";
else
out<<"\t"<<"n/a"<<endl;
return out;
}
istream & operator >> (istream &in, Complex &obj) // cin>>
{
cout<<"Введите real = \b\b\b\b";
in>>obj.real;
cout<<"Введите image = \b\b\b\b";
in>>obj.image;
return in;
}
main.cpp:
#include <conio.h>
#include <Windows.h>
#include <clocale>
#include "Complex.h"
#include "Stack.h"
#define ONE 49
#define TWO 50
#define ESCAPE 27
bool menu();
void gotoxy(int, int);
Stack<Complex> *objPtr=NULL;
int main()
{
setlocale(LC_ALL, "Russian");
int stackSize;
cout<<"Размер стека: ";
cin>>stackSize;
Stack<Complex> obj(stackSize);
objPtr = &obj;
while(menu());
}
bool menu()
{
gotoxy(0, 1); // оформление
cout<<"Содержимое стека:"; // вывода
gotoxy(50, 1); // содержимого
cout<<"Полученное значение:"; // стека
//
int elemCount = objPtr->getTop(); //
if (elemCount>0) //
{ //
for (int i = 0; i<elemCount; i++) //
{ //
gotoxy(0, 3+i); //
cout<<objPtr->getElement(i); //
}
}
gotoxy(0, 15);
cout<<"\t1 - вывод из стека"<<endl
<<"\t2 - ввод в стек"<<endl
<<"\tESCAPE - выход"<<endl
<<" "<<endl
<<" "<<endl;
gotoxy(0, 18);
while (!_kbhit()); // ожидание выбора клавиши
int choice;
choice = _getch();
switch (choice)
{
case ONE: // удаление
{
system("cls");
gotoxy(50, 3);
if (elemCount>0)
cout<<objPtr->pop();
else
{
system("cls");
gotoxy(50, 3);
cout<<"Стек пуст! "<<endl;
}
break;
}
case TWO: // ввод
{
if (objPtr->getTop()>objPtr->getSize())
break;
Complex object;
cin>>object;
objPtr->push();
break;
}
case ESCAPE:
{
return false;
}
default:
{
system("cls");
}
}
return true;
}
voidgotoxy(intx, inty) // перевод курсора в положение X,Y
{
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(hStdOut, coord);
return;
}
7. Дополнительные вопросы.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.