Форум программистов, компьютерный форум CyberForum.ru

На основе класса Vector разработать класс Matrix - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ При выводе пропускает пустые строки http://www.cyberforum.ru/cpp-beginners/thread1204893.html
{ FILE *f1; char c, txt; int n=0; cout<<"Vvedite imia fila "; gets(c); f1=fopen(c,"r"); fscanf (f1, "%d", &n);
C++ Создание абстрактных типов данных на примере класса "фигура" Подскажите, пожалуйста, как создать абстрактный тип данных "Окружность" (Вывести окружность, состоящую из точек)! В моей программе созданы типы "Прямоугольник" и "Квадрат", а вот, как создать "Окружность", не знаю. http://www.cyberforum.ru/cpp-beginners/thread1204892.html
C++ Алгоритмы Брезенхема
Ребят, помогите пожалуйста реализовать алгоритмы Брезенхема для построения отрезка и окружно- сти (или эллипса—по указанию преподавателя). Для окружности (эллипса) предварительно доработать алгоритм, учтя возможность любых значений ко- ординат центра. А также реализовать алгоритм заполнения для равностороннего пя- тиугольника.:)
В целочисленном одномерном массиве найти сумму всех нечетных элементов C++
Помогите! Помогите! Хулиганы меня отчисляют!:cry:
C++ Ошибка raised exception class EAccessViolation with message 'Access violation at address 004011FA http://www.cyberforum.ru/cpp-beginners/thread1204867.html
Выдает ошибку raised exception class EAccessViolation with message 'Access violation at address 004011FA... на строке { fputc (c,b);}. Подскажите в чем ошибка и как ее можно исправить? #include <iostream.h> #include <conio.h> #include <fstream.h> #include <string.h> void main() { FILE *a, *b; char c;
C++ Ввод массива, вводил только -1<= Xi <= 1 Массив X, ввод массива с клавиатуры, вводил только с условием -1<=Xi<=1, остальные игнорировал! подробнее

Показать сообщение отдельно
Snaiper2king
0 / 0 / 0
Регистрация: 10.06.2014
Сообщений: 3
10.06.2014, 20:11     На основе класса Vector разработать класс Matrix
На основе класса Vector разработать класс Matrix (матрица, физически представляющая собой вектор, состоящий из заданного числа векторов). Реализовать метод сравнения двух матриц (==, !=).

вот мой класс вектор:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#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;
}
А вот я сделал класс матрица:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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;
            }
     }
    
        
    };

Все вроде нормально, но когда пытаюсь сравнить две матрицы, то программа вылетает. Как я понял на:

C++
1
2
x=v[i].GetSize();
y=m1.v[i].GetSize();
Помогите дорешать
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 05:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru