Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2012, 06:58   #1
Deicide
 
Регистрация: 01.10.2012
Сообщений: 4
По умолчанию Вектор Векторов (с++)

Задание:
На основе класса Vector разработать класс Matrix – матрица, физически представляющая собой век-тор, состоящий из заданного числа векторов. Реализовать метод сравнения двух матриц (==, !=).

Собственно, вот мой класс вектор:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <stdlib.h> // Отсюда берём rand()
#include <time.h> // Здесь находится time()
using namespace std;

class vector{
private:
	
	int *_v;//
	int _size; //размер массива
	
public:
	vector(){};
vector(unsigned int vX) 
 { 
	_size=vX; 
	if(_size < 0 ) 
	{
		cerr <<"Error!"<<endl;
		getch();
		exit(1);
	} 
	else 
	{
		srand(time(NULL));
		_v = new int[_size];
		for(int i=0; i < _size; i++)
		{
			_v[i]=rand()%99;
		}
	}
 } 
void showVector();
void SetSize(int x);
void ShowSize();
int GetSize();
void showElement(unsigned int a);
vector operator + (vector a);
vector operator - (vector a);
double abs();
double operator*(vector b);

};
void vector::showVector()
{
	for(int i = 0; i <_size; i++)
	{
		cout << this->_v[i] << " ";
	}
}

void vector::showElement(unsigned int a)
{		
		if(a > _size)
		{
			cout << "Error";
		} else { 
			cout << this->_v[a-1] << endl;
		}

}
void vector::ShowSize()
{
	cout<<"size =" <<_size<<endl;
}

vector vector::operator + (vector a)
{
 int s = (_size < a._size) ? _size : a._size;
 vector temp(s); // Создание временного объекта
 for(int i = 0; i < s; i++)
 temp._v[i] = temp._v[i] + a._v[i];
 return temp; // Возврат временного объекта
}


vector vector::operator - (vector a)
{
 int s = (_size < a._size) ? _size : a._size;
 vector temp(s); // Создание временного объекта
 for(int i = 0; i < s; i++)
 temp._v[i] = temp._v[i] - a._v[i];
 return temp; // Возврат временного объекта

}
int vector::GetSize()
{
	return _size;
}

double vector::abs() //Модуль 
{
 double sum=0;
 for(int i = 0; i < this->_size; i++)
 {
  sum +=  this->_v[i] ;
 }
 return sqrt(sum);
}

void vector::SetSize(int s)
{
	_size=s;
}
double vector::operator*(vector b) //Скалярное произв.
{
 double sum=0;
 for(int i = 0; i < this->_size; i++)
 {
  sum +=  this->_v[i] * b._v[i];
 }
 return sum;
}
Далее я сделал класс матрица:
Код:
class Matrix{
	vector* v;
	int _count;
public:
	Matrix(int d)
	{
		int s;
		_count=d;
		vector* v = new vector[d];
		for(int i=0; i<d;i++)
		{
			cin >>s;
			v[i].SetSize(s);
		}
		for(int i=0; i<d;i++)
		{
			v[i].ShowSize();
			
		}
	}
	vector* operator->(){return v;}
	 bool operator ==(Matrix& m1)
	 {
		int x,y;
		if(this->_count!=m1._count)
			return false;
		else
			for(int i=0;i<m1._count;i++)
			{
				x=v[i].GetSize();
				
				y=m1.v[i].GetSize();
				if(x!=y)
					return false;
				else return true;
			}
	 }
	
		
	};
Все вроде нормально, но когда пытаюсь сравнить две матрицы, то программа вылетает, причем вылетает вот на этом месте:
Код:
x=v[i].GetSize();
y=m1.v[i].GetSize();
Помогите исправить
Deicide вне форума Ответить с цитированием
Старый 26.10.2012, 10:28   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Сообщение от Deicide Посмотреть сообщение
Все вроде нормально, но когда пытаюсь сравнить две матрицы, то программа вылетает, причем вылетает вот на этом месте:
Код:
x=v[i].GetSize();
y=m1.v[i].GetSize();
Помогите исправить
Советую пройти по коду в отладчике.
В данном случае непосредственная проблема в том, что Matrix::v не инициализируется в конструкторе, на момент выполнения Matrix :: operator== он имеет случайное значение. Подумайте, почему это так.

Последний раз редактировалось Abstraction; 26.10.2012 в 10:28. Причина: Смайлики.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ортогонализация векторов..... Rossomaxa Помощь студентам 6 18.07.2012 15:18
Заданы векторы a,b,c,d размерностью n Получить новый вектор, элементами которого являются длины заданых векторов,расположенных в п Вованчик Паскаль, Turbo Pascal, PascalABC.NET 0 07.03.2012 16:49
Вектор векторов Freewill Visual C++ 6 19.02.2012 18:05
Ввод векторов и матриц, умножение матрицы на вектор и вычисление скалярного призведения двух векторов zverushka Помощь студентам 18 20.02.2009 15:25