LINUX.ORG.RU

Вопрос из области «как правильно приготовить 1 кг еды?». Код где?

anonymous
()
class Matrix
{
public:
    Matrix(int _n, int _m)  n(_n), m(_m)
    {
        arr = new double[n*m];
    }
    ~Matrix()
    {
        delete [] arr;
    }
    double& get(int i, int j)
    {
        return arr[i*n + m];
    }
private:
    double* arr;
    int n, m;
};

Bwglb3
()
Ответ на: комментарий от Reset

мне нужно написать два класса матрица и вектор и дружественную функцию умножения матрицы на вектор. Пока мучаюсь с ошибками при компиляции моей недопроги. Если не разберусь приведу свой код.

shmel210
() автор топика
Ответ на: комментарий от ftor
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
class Matrix
{
	public:
		Matrix();
		Matrix(int i, int j);
		~Matrix();
		void matrixVSvector();
	private:
		double *mat;
		int stl; //номер столбца матрицы
		int str; //номер строки матрицы
};
class Vector
{
	friend void Matrix::matrixVSvector();
	public:
		Vector();
		Vector(int s);
		~Vector();
	private:
	double *vec;
	int size;
};
Matrix::Matrix()
{
	mat=new double;
	*mat=0;
	stl=1;
	str=1;
}
Matrix::Matrix(int i, int j)
{
	stl=i;
	str=j;
	mat=new double [str*stl];
	for (int h=0;h<stl;h++)
		for (int g=0;g<str;g++)
			{
			*mat[h][g]=2;
			}
}
Matrix::~Matrix()
{
	delete[] mat;
}
Vector::Vector()
{
	vec=new double;
	*vec=0;
	size=1;
}
Vector::Vector(int s)
{
	if (s<0) { size=0; }
	else
	size=s;
	vec=new double[size];
	for (int i=0; i<size;i++)
	{
		vec[i]=1.5;
	}
}
Vector::~Vector()
{
	delete[] vec;
}
void Matrix::matrixVSvector()
{
	int res[str];
	for (int j=0;j<stl;j++)
	{
	res[j]=0;
		for (int i=0;i<str;i++)		
			res[j]+=(*mat[j][i])*(*vec[i]);
	}
}
int main()
{
	Matrix m1(5,5);
	Vector v1(5);
	m1.matrixVSvector();
}
shmel210
() автор топика
Ответ на: комментарий от shmel210

1. А теперь подумай когда будешь удалять как массив

Matrix::Matrix() 
{ 
   mat=new double; // сюда добавь [1]
   *mat=0; 
   stl=1; 
   str=1; 
}

2. Как ты собираешься к одномерному массиву с помощью [][] обращаться?

Matrix::Matrix(int i, int j) 
{ 
   stl=i; 
   str=j; 
   mat=new double [str*stl]; 
   for (int h=0;h<stl;h++) 
      for (int g=0;g<str;g++) 
         { 
         *mat[h][g]=2; 
         } 
}

3. Совет: зачем нужен класс векторов, когда это реализуется как массив (n,1)? Не проще ли использовать шаблон из std vector? Если лень копать, могу свой код дать, пиши адрес.

Zodd
()
Ответ на: комментарий от Zodd

Исправил

Matrix::Matrix()
{
	mat=new double [1];
	*mat=0;
	stl=1;
	str=1;
}
Matrix::Matrix(int i, int j)
{
	stl=i;
	str=j;
	mat=new double [str*stl];
	for (int h=0;h<(str*stl);h++)
			{
			mat[h]=2;
			}
}
void Matrix::matrixVSvector()
{
	int res[str];
	for (int j=0;j<stl;j++)
	{
	res[j]=0;
		for (int i=0;i<str;i++)		
			res[j]+=mat[j]*vec[i];
	}
}
По всей видимости нужно обьявить класс вектор как дружественный посколько vec не видит функция думаю так:
class Matrix
{
friend class Vector;
}
мыло вот: dilar05@i.ua

shmel210
() автор топика
Ответ на: комментарий от Reset

Не сказал бы что си проще. Да мой код пока ужасен но это пройдет тем более что пользоваться ооп возможностями этого языка я начал только неделю назад.

shmel210
() автор топика
Ответ на: комментарий от shmel210

ты не понимаешь базовых вещей, поэтому советую почитать книжку, форум тебе мало поможет

Reset 🤡🤡
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.