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 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.