Форум программистов, компьютерный форум CyberForum.ru

Нужно исправить класс комплексных чисел - C++

Восстановить пароль Регистрация
 
Coon532
Сообщений: n/a
31.10.2012, 19:56     Нужно исправить класс комплексных чисел #1
Программа написана в среде visual studio 2010, прошу помочь исправить ошибку, а именно выводит на значения, а лишь указатель на некоторый раздел памяти (программа должна выполнять сложение и умножение векторов из комплексных чисел, любой размерности):


#include <iostream>
using namespace std;
typedef unsigned int ripper;
typedef const int N;
class Complex
{
private:
double real;
double image;
public:
Complex();
Complex(N n);
Complex operator+(Complex );
Complex operator-(Complex );
Complex operator*(Complex );
Complex operator/(Complex );
Complex &operator=(Complex );
friend ostream &operator<<(ostream &, Complex &);
friend istream &operator>>(istream &, Complex &);
};
class SqMatrublic Complex
{
private:
Complex **p;
ripper nStr, nStolb;
public:

SqMatr (ripper row, ripper col );
SqMatr (const SqMatr &obj);
~SqMatr ();
void fill (ripper N);
void getSize (ripper &row, ripper &col);
void print();
SqMatr multiplication (const SqMatr &obj);
SqMatr operator +(SqMatr );
SqMatr &operator =(SqMatr );
SqMatr Sum(SqMatr obj);
};
#include <iostream>
#include <ctime>
#include "headerVect.h"
using namespace std;
Complex::Complex()
{
if((real==0)&&(image==0))
{
cout<<"Empty spaces"<<endl;
system("pause");
return;
}
image=rand()+7;
real=rand()-10;

}
Complex::Complex(N n)
{
N k=5;
srand(k-1);
if((real==0)&&(image==0))
{
cout<<"Empty spaces"<<endl;
system("pause");
return;
}
real=rand()-k;
image=rand()+k;
}
Complex Complex::operator+(Complex fp1)
{
Complex b;
b.real=real+fp1.real;
b.image=image+fp1.image;

return b;

}
Complex Complex::operator-(Complex fp1)
{
Complex b;
b.real=real-fp1.real;
b.image=image-fp1.image;
return b;
}
Complex Complex::operator*(Complex fp1)
{
double i, j;
i= real * fp1.real- image * fp1.image;
j = real * fp1.image + fp1.real * image;
fp1.real = i;
fp1.image = j;
return fp1;
}
Complex Complex::operator/(Complex fp1)
{
double k, i, j;
k = fp1.real * fp1.real + fp1.image * fp1.image;
i = (real * fp1.real + image * fp1.image) / k;
j = (fp1.real * image - real * fp1.image) / k;
fp1.real = i;
fp1.image = j;
return fp1;
}
Complex &Complex::operator=(Complex ob)
{
real=ob.real;
image=ob.image;
return *this;
}
ostream &operator<< (ostream &fo, Complex &fp)
{
fo<<" coordinate :" << fp.real <<"+(" << fp.image<< ")*i"<<endl<< "\n";
return fo;
}
istream &operator>>(istream &fi, Complex &fp)
{
cout << "Введите действительную часть :";
fi>>fp.real;
cout << "Введите мнимую часть :";
fi>>fp.image;
cout<<"\n";
return fi;
}

SqMatr::SqMatr (ripper str, ripper stolb): nStr(str>0 && stolb>0 ? str:0),nStolb(str> 0 && stolb>0 ? stolb:0)
{
if (nStr==0)
{
p=NULL;
return;
}
p=new Complex* [nStr];
*p=new Complex [nStr*nStolb+1];
for (ripper i=1; i<nStr; i++)
p[i]=p[i-1]+nStolb;
}

SqMatr::SqMatr (const SqMatr &obj):
nStr(obj.nStr),
nStolb(obj.nStolb)
{
if (nStr==0)
{
p=NULL;
return;
}

p=new Complex*[nStr];
*p=new Complex[nStr*nStolb+1];
for(ripper i=1; i<nStr; i++)
{
if (i==0)
p[i]=p[i-1]+nStolb;

for(ripper j=0; j<nStolb; j++)
p[i][j]=obj.p[i][j];
}
}

SqMatr::~SqMatr()
{
if (p!=NULL)
{
delete[] *p;
delete[] p;
}
}

void SqMatr::fill (ripper N)
{
for (ripper i=0; i<nStr; i++)
for (ripper j=0; j<nStolb; j++)
{
cout<<"Vvedite ["<<i+1<<"]"<<"["<<j+1<<"]"<<" element massiva: ";
cin>>p[i][j];
}
}

void SqMatr::getSize (ripper &row, ripper &col)
{
row=nStr;
col=nStolb;
}

void SqMatr:rint()
{
for (ripper i=0; i<nStr; i++)
{
for (ripper j=0; j<nStolb; j++)
{
cout.width(5);
cout<<this->p[i][j];
}
cout<<endl;
}
}
SqMatr SqMatr::multiplication(const SqMatr &obj)
{
if ( this->nStolb!= obj.nStr )
{
cout << "Different sizes" << endl;
throw "Error";
}
Complex **c = new Complex* [this->nStr];
*c = new Complex [this->nStr*obj.nStolb+1];
for (ripper i = 1; i < this->nStr; i++)
c[i] = c[i-1] + obj.nStolb;

for (ripper i = 0; i < this->nStr; i++)
for (ripper j = 0; j < this->nStolb; j++)
{
c[i][j] = 0;
for (ripper k = 0; k < this->nStolb; k++)
c[i][j] =c[i][j] + this->p[i][k] * obj.p[k][j];
}
delete[] *p;
delete[] p;
this->p = c;
*(this->p)=*c;
this->nStolb = obj.nStolb;
return *this;
}
SqMatr SqMatr::operator+(SqMatr ob)
{

if ((this->nStr!= ob.nStr)&&(this->nStolb!=ob.nStolb))
{
cout << "Different sizes" << endl;
//throw "Error";
}
SqMatr C(nStr, nStolb);
for(ripper i=0; i<nStr; ++i)
for(ripper j=0; j<nStolb; ++j)
C.p[i][j]=p[i][j]+ ob.p[i][j];
return *this;
}
SqMatr SqMatr::Sum(SqMatr ob)
{
if ((this->nStr!= ob.nStr)&&(this->nStolb!=ob.nStolb))
{
cout << "Different sizes" << endl;
}
SqMatr C(nStr, nStolb);
for(ripper i=0; i<nStr; ++i)
for(ripper j=0; j<nStolb; ++j)
C.p[i][j]=p[i][j]+ob.p[i][j];
return *this;
}
SqMatr &SqMatr::operator=(SqMatr obj)
{
SqMatr c(nStr, nStolb);
for(ripper i=0 ;i<nStr; ++i)
for(ripper j=0; j<nStolb; ++j)
c.p[i][j]=obj.p[i][j];
return *this;
}

#include<iostream>
#include "headerVect.h"
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
int n;
cout<<"Put in the number of n coordinates of both vectors :"<<"\n";
cin>>n;
SqMatr a(1, n), b(1, n), c(1, n);
cout<<"Put in the coordinates of the first vector :"<<"\n";
a.fill(5);
a.print();
cout<<"\n";
cout<<"Put in the coordinates of the second vector :"<<"\n";
b.fill(7);
b.print();
cout<<"New Matrix of multiplication is :";
a.multiplication(b);
a.print();
cout<<"\n";
cout<<"The summary is :"<<"\n";
c=a+b;
c.print();
//cout<<"function summary :"<<"\n";
//c.Sum(a, b);
//c.print();
//cout<<"another summary :"<<"\n";
//cout<<a+b;
system("PAUSE");
}

Прошу отнестись с пониманием-это мой первый опыт с наследованиями в с++. Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2012, 19:56     Нужно исправить класс комплексных чисел
Посмотрите здесь:

C++ Класс комплексных чисел
Класс комплексных чисел C++
Класс комплексных чисел C++
C++ Класс комплексных чисел
класс комплексных чисел C++
C++ Нужно исправить ошибки в классе комплексных чисел
C++ Класс комплексных чисел
C++ Класс Комплексных Чисел

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 15:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru