#include "PolarVector.h"
#include "CartesianVector.h"
#include "Matrix.h"
int main()
{
setlocale(LC_ALL, "Russian");
Matrix<CartesianVector> A(3, 3);
A.input();
A.print();
}
#pragma once
#include <iostream>
#include <vector>
using namespace std;
class CartesianVector
{
public:
CartesianVector(int N = 0);
CartesianVector operator*(float k);
void input();
void print();
private:
int N; // n-мерное пространство
vector <float> X;
};
#include "CartesianVector.h"
CartesianVector::CartesianVector(int N)
{
this->N = N;
X.resize(N);
}
CartesianVector CartesianVector::operator*(float k)
{
CartesianVector tmp(N);
for (int i = 0; i < N; i++)
{
tmp.X[i] = this->X[i] * k;
}
return tmp;
}
void CartesianVector::input()
{
if (N == 0)
{
cout << "Введите мерность пространства! N = ";
cin >> this->N;
X.resize(N);
}
for (int i = 0; i < N; i++)
{
cout << "x[" << i + 1 << "] = ";
cin >> X[i];
}
}
void CartesianVector::print()
{
cout << "(";
for (int i = 0; i < N - 1; i++)
{
cout << X[i] << "; ";
}
cout << X[N - 1] << ")";
}
#pragma once
#include <iostream>
using namespace std;
class PolarVector
{
public:
PolarVector(float r = 0, float fi = 0);
~PolarVector();
PolarVector operator*(float k);
void input();
void print();
private:
float r, fi;
};
#include "PolarVector.h"
PolarVector::PolarVector(float r, float fi)
{
this->r = r;
this->fi = fi;
}
PolarVector::~PolarVector()
{
this->r = 0;
this->fi = 0;
}
PolarVector PolarVector::operator*(float k)
{
PolarVector tmp(0);
tmp.r = this->r * k;
tmp.fi = this->fi;
return tmp;
}
void PolarVector::input()
{
setlocale(LC_ALL, "Russian");
cout << "r = ";
cin >> r;
cout << "ф = ";
cin >> fi;
}
void PolarVector::print()
{
cout << "(" << r << "; " << fi << ")";
}
#pragma once
template <typename T>
class Matrix
{
public:
Matrix(int M, int N);
~Matrix();
Matrix<T> operator*(float k);
void input();
void print();
private:
int M, N;
T** A;
};
template<typename T>
inline Matrix<T>::Matrix(int M, int N)
{
A = new T * [M];
for (int i = 0; i < M; i++)
{
A[i] = new T[N];
}
/*
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
A[i][j] = NULL;
B[i][j] = NULL;
}
}
*/
}
template<typename T>
inline Matrix<T>::~Matrix()
{
for (int i = 0; i < M; i++)
{
delete[] A[i];
}
delete[] A;
}
template<typename T>
inline Matrix<T> Matrix<T>::operator*(float k)
{
Matrix<T> tmp(M, N);
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
tmp.A[i][j] = this->A[i][j] * k;
}
}
return tmp;
}
template<typename T>
inline void Matrix<T>::input()
{
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
A[i][j].input();
}
}
}
template<typename T>
inline void Matrix<T>::print()
{
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
A[i][j].print();
cout << "\t";
}
cout << endl;
}
}