Вопрос № 166745: Здраствуйте! Мне очень нужна помощь.. мне сказали спрограммировать программу: "Арифметика комплексных чисел". Класс матриц я у вас посмотрела. однако я не понимаю, как же связать класс комплексных чисел с марицей... нужно было делать в клас...
Вопрос № 166.745
Здраствуйте! Мне очень нужна помощь.. мне сказали спрограммировать программу: "Арифметика комплексных чисел". Класс матриц я у вас посмотрела. однако я не понимаю, как же связать класс комплексных чисел с марицей... нужно было делать в классе.. Подскажите пожалуйста..класс комплексных матриц(ошибки есть и не доделана до конца) у меня есть.
Отвечает: Micren
Здравствуйте, Кашапова Аиша Рифгатовна! Вот пример шаблонного класса для матриц и комплексных чисел. Функционал добавьте сами какой требуется. Тестировал MS VS 2008.
#pragma region class matrix template<class T> class
matrix { class _row; public: // Конструктор создающий матрицу с rows-строками и cols-колонками matrix(unsigned int rows,unsigned int cols); // Конструктор копирования matrix(const matrix<T>& matr); // Оператор присваивания matrix<T>& operator=(const matrix<T>& matr); // Деструктор virtual ~matrix(); _row& operator[](unsigned int row); // Возвращает количество строк unsigned int rows() const;<
br> // Возвращает количество колонок unsigned int cols() const; private: class _row { public: T& operator[](unsigned int col); private: _row(unsigned int cols); _row(const typename matrix<T>::_row& r); _row& operator=(const typename matrix<T>::_row& r); virtual ~_row(); T* _data; unsigned int _cols; friend class matrix; }; _row** _data; unsigned int _rows,_cols; }; #pragma endregion class matrix
int rnd(int hi) { return
static_cast<int>(static_cast<double>(rand())/RAND_MAX*hi); }
int main() { srand(static_cast<unsigned int>(time(0))); const unsigned int ROWS=5,COLS=8; matrix<complex> arr(ROWS,COLS); for(unsigned int i=0;i<arr.rows();++i) { for(unsigned int j=0;j<arr.cols();++j) { arr[i][j]=complex(rnd(20)-10,rnd(20)-10); } } matrix<complex> arr2(arr); arr=arr2; for(
unsigned int i=0;i<arr.rows();++i) { for(unsigned int j=0;j<arr.cols();++j) { cout<<arr[i][j]<<' '; } cout<<endl; } system("PAUSE"); return 0; }
#pragma region Класс matrix определение template<class T> matrix<T>::matrix(unsigned int rows, unsigned int cols) :_rows(rows) ,_cols(cols) ,_data(0) { _data=new _row*[_rows]; for(unsigned int i=0;i<_rows;++i) { _data[i]=new
_row(_cols); } }
template<class T> T& matrix<T>::_row::operator [](unsigned int col) { if(col<_
cols)return _data[col]; else throw range_error("Bound(col) out of range"); } #pragma endregion Класс matrix определение
#pragma region Класс complex определение // Конструктор inline complex::complex(double re, double im) : _re(re) , _im(im) { }
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.