2 / 2 / 2
Регистрация: 23.03.2016
Сообщений: 142
1

Разработка класса "вектор"

06.10.2016, 14:43. Показов 7714. Ответов 28
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Нужно написать программу, обеспечивающую ввод двух векторов, а также произвести пару действий над векторами: второму вектору присвоить значения первого, проверить на равенство и неравенство векторы, сложение и вычитание векторов, умножение вектора на число, скалярное произведение векторов, модуль векторов и найти значение определенной координаты каждого вектора. Все сделать с помощью классов.
До этого не работал с векторами, не могли бы вы дать мне литературу, связанную с работой над векторами? Посмотрел у Лафоре, ничего связанного с векторами не нашел.

Начало кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
using namespace std;
 
class Vector
{
private:
    int n; // переменная, отвечающая за длину вектора
    // здесь нужно инициализировать вектор
public:
Vector()
{
    cout << "Введите количество координат вектора:" << endl;
    cin >> n;
}
void Vec_values(int n)
{
 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.10.2016, 14:43
Ответы с готовыми решениями:

Разработка класса, содержающего структуры и массивы типа вектор
Доброе время суток! Стал разбираться с классами и столкнулся с некоторыми сложностями: Чисто...

Разработка собственного контейнера Вектор
Приветствую всех. Пишу своё собственное подобие стандартного вектора. Уже выкладывал раньше, в...

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов
Возникли сложности при решении задачи. Буду признателен тем, кто поможет. Задание: Составить...

Разработка класса вектор
цель: Разработать класс вектор для хранения целых чисел с проверкой правильности обращения по...

Разработка класса вектор
Помогите пожалуйста с заданием цель: Разработать класс вектор для хранения целых чисел с...

28
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,624
10.10.2016, 18:47 21
Лучший ответ Сообщение было отмечено narsky как решение

Решение

Author24 — интернет-сервис помощи студентам
Так попробуй:
C++
1
2
3
4
Vector(vector<int> v) : vec(v)
{
    n = vec.size();
}
1
2 / 2 / 2
Регистрация: 23.03.2016
Сообщений: 142
10.10.2016, 20:45  [ТС] 22
nmcf, благодарю, все работает! Думаю, что остальные пункты сам заполню

Добавлено через 1 час 51 минуту
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#include <iostream>
#include <vector>
using namespace std;
 
class Vector
{
private:
    int a;
    
    vector<int> vec;
public:
Vector()
{
}
Vector(vector<int> v) : vec(v)
{
    n = vec.size();
}
int n;
int b;
int d;
void kol_k()
{
    cout << "Введите количество координат вектора:" << endl;
    cin >> n;
}
void kk()
{
    vec.resize(n);
}
void bb()
{
    cout << "Введите число, на которое нужно умножить вектора:" << endl;
    cin >> b;
}
void koor()
{
    cout << "Введите номер координаты:" << endl;
    cin >> d;
    while (d > n)
    {
        cout << "Номер координаты не должен превышать число координат вектора. Введите снова" << endl;
        cin >> d;
    }
}
void Vec_values()
{
    for (int i = 0; i < n; i++)
    {
        cin >> a;
        vec[i] = a;
    }
}
void Show_vec()
{
    for (int i = 0; i < n; i++)
        cout << vec[i] << ' ';
}
Vector operator+(Vector);
Vector operator-(Vector);
Vector operator=(Vector);
Vector operator==(Vector);
Vector operator!=(Vector);
Vector operator*(Vector);
Vector operator%(Vector);
Vector operator|(Vector);
Vector operator[](Vector);
};
Vector Vector::operator+(Vector v2)
{
    vector<int> dop_vect(n);
    for (int i = 0; i < n; i++)
    {
        dop_vect[i] = vec[i] + v2.vec[i];
    }
    return Vector(dop_vect);
}
Vector Vector::operator=(Vector v2)
{
    for (int i = 0; i < n; i++)
        v2.vec[i] = vec[i];
    return Vector(v2.vec);
}
Vector Vector::operator==(Vector v2)
{
    for (int i = 0; i < n; i++)
    {
        if (v2.vec[i] != vec[i])
        {
            cout << "Векторы не равны";
            goto MM;
        }
    }
    cout << "Векторы равны";
    MM:
}
Vector Vector::operator!=(Vector v2)
{
    for (int i = 0; i < n; i++)
    {
        if (v2.vec[i] == vec[i])
        {
            cout << "Векторы равны";
            goto MM;
        }
    }
    cout << "Векторы не равны";
    MM:
}
Vector Vector::operator-(Vector v2)
{
    vector<int> dop_vect(n);
    for (int i = 0; i < n; i++)
    {
        dop_vect[i] = vec[i] - v2.vec[i];
    }
    return Vector(dop_vect);
}
Vector Vector::operator*(Vector v2)
{
    vector<int> dop_vect(n);
    for (int i = 0; i < n; i++)
    {
        dop_vect[i] = vec[i] * v2.b;
    }
    return Vector(dop_vect);
}
Vector Vector::operator%(Vector v2)
{
    int c = 0;
    for (int i = 0; i < n; i++)
    {
        c = c + vec[i] * v2.vec[i];
    }
    cout << "Скалярное произведение равно " << c << endl;
}
Vector Vector::operator|(Vector)
{
    int c = 0;
    for (int i = 0; i < n; i++)
    {
        c = c + vec[i] * vec[i];
    }
    c = sqrt(c);
    cout << "Модуль вектора равен " << c << endl;
}
Vector Vector::operator[](Vector)
{
    for (int i = 0; i < n; i++)
    {
        if (i == d)
        {
            cout << "Значение " << i - 1 << " координаты: " << vec[i] << endl;
        }
    }
}
    
 
void main()
{
    Vector vec1, vec2, vec3;
    setlocale(LC_ALL, "Russian");
    
    vec1.kol_k();
    vec2.n = vec1.n;
    vec3.n = vec1.n;
    vec1.kk();
    vec2.kk();
    vec3.kk();
 
    cout << "Введите координаты первого вектора. После ввода каждой координаты нажимайте <Enter>:" << endl;
    vec1.Vec_values();
    cout << "Введите координаты второго вектора. После ввода каждой координаты нажимайте <Enter>:" << endl;
    vec2.Vec_values();
 
    cout << "Второму вектору присваиваются значения первого: " << endl;
    vec2 = vec1;
    vec2.Show_vec();
    cout << "Векторы равны: " << endl;
    vec2 == vec1;
    cout << "Векторы не равны: " << endl;
    vec2 != vec1;
    cout << "Сложение векторов: " << endl;
    vec3 = vec1 + vec2;
    vec3.Show_vec();
    cout << "Вычитание векторов: " << endl;
    vec3 = vec1 - vec2;
    vec3.Show_vec();
    cout << "Умножение вектора на число: " << endl;
    vec1.bb();
    vec2.b = vec1.b;
    cout << "Первый вектор, умноженное на число:" << endl;
    vec3 * vec1;
    cout << "Второй вектор, умноженное на число:" << endl;
    vec3 * vec2;
    cout << "Скалярное произведение: " << endl;
    vec1 % vec2;
    cout << "Модуль 1 вектора: " << endl;
    vec1|;
    cout << "Модуль 2 вектора: " << endl;
    vec2|;
    cout << "Значение координаты 1 вектора: " << endl;
    vec1.koor();
    vec1[];
    cout << "Значение координаты 2 вектора: " << endl;
    vec2.koor();
    vec2[];
 
    system("pause");
}
Доделал код, но что-то не так делаю, как мне кажется, с вектором, умноженным на число, модулями векторов и значениями координат векторов. Посмотрите пожалуйста.
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,624
10.10.2016, 21:13 23
Где умножение на число? Только на вектор есть. И почему без "равно"? Если нужно сам vec3 умножить на что-то - используй операцию *=.
0
2 / 2 / 2
Регистрация: 23.03.2016
Сообщений: 142
10.10.2016, 21:34  [ТС] 24
nmcf, так?
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#include <iostream>
#include <vector>
using namespace std;
 
class Vector
{
private:
    int a;
    
    vector<int> vec;
public:
Vector()
{
}
Vector(vector<int> v) : vec(v)
{
    n = vec.size();
}
int n;
int b;
int d;
void kol_k()
{
    cout << "Введите количество координат вектора:" << endl;
    cin >> n;
}
void kk()
{
    vec.resize(n);
}
void bb()
{
    cout << "Введите число, на которое нужно умножить вектора:" << endl;
    cin >> b;
}
void koor()
{
    cout << "Введите номер координаты:" << endl;
    cin >> d;
    while (d > n)
    {
        cout << "Номер координаты не должен превышать число координат вектора. Введите снова" << endl;
        cin >> d;
    }
}
void Vec_values()
{
    for (int i = 0; i < n; i++)
    {
        cin >> a;
        vec[i] = a;
    }
}
void Show_vec()
{
    for (int i = 0; i < n; i++)
        cout << vec[i] << ' ';
}
Vector operator+(Vector);
Vector operator-(Vector);
Vector operator=(Vector);
Vector operator==(Vector);
Vector operator!=(Vector);
Vector operator*=(Vector);
Vector operator%(Vector);
Vector operator|(Vector);
Vector operator[](Vector);
};
Vector Vector::operator+(Vector v2)
{
    vector<int> dop_vect(n);
    for (int i = 0; i < n; i++)
    {
        dop_vect[i] = vec[i] + v2.vec[i];
    }
    return Vector(dop_vect);
}
Vector Vector::operator=(Vector v2)
{
    for (int i = 0; i < n; i++)
        v2.vec[i] = vec[i];
    return Vector(v2.vec);
}
Vector Vector::operator==(Vector v2)
{
    for (int i = 0; i < n; i++)
    {
        if (v2.vec[i] != vec[i])
        {
            cout << "Векторы не равны";
            goto MM;
        }
    }
    cout << "Векторы равны";
    MM:
}
Vector Vector::operator!=(Vector v2)
{
    for (int i = 0; i < n; i++)
    {
        if (v2.vec[i] == vec[i])
        {
            cout << "Векторы равны";
            goto MM;
        }
    }
    cout << "Векторы не равны";
    MM:
}
Vector Vector::operator-(Vector v2)
{
    vector<int> dop_vect(n);
    for (int i = 0; i < n; i++)
    {
        dop_vect[i] = vec[i] - v2.vec[i];
    }
    return Vector(dop_vect);
}
Vector Vector::operator*=(Vector v2)
{
    vector<int> dop_vect(n);
    for (int i = 0; i < n; i++)
    {
        dop_vect[i] = vec[i] *= v2.b;
    }
    return Vector(dop_vect);
}
Vector Vector::operator%(Vector v2)
{
    int c = 0;
    for (int i = 0; i < n; i++)
    {
        c = c + vec[i] * v2.vec[i];
    }
    cout << "Скалярное произведение равно " << c << endl;
}
Vector Vector::operator|(Vector)
{
    int c = 0;
    for (int i = 0; i < n; i++)
    {
        c = c + vec[i] * vec[i];
    }
    c = sqrt(c);
    cout << "Модуль вектора равен " << c << endl;
}
Vector Vector::operator[](Vector)
{
    for (int i = 0; i < n; i++)
    {
        if (i == d)
        {
            cout << "Значение " << i - 1 << " координаты: " << vec[i] << endl;
        }
    }
}
    
 
void main()
{
    Vector vec1, vec2, vec3;
    setlocale(LC_ALL, "Russian");
    
    vec1.kol_k();
    vec2.n = vec1.n;
    vec3.n = vec1.n;
    vec1.kk();
    vec2.kk();
    vec3.kk();
 
    cout << "Введите координаты первого вектора. После ввода каждой координаты нажимайте <Enter>:" << endl;
    vec1.Vec_values();
    cout << "Введите координаты второго вектора. После ввода каждой координаты нажимайте <Enter>:" << endl;
    vec2.Vec_values();
 
    cout << "Второму вектору присваиваются значения первого: " << endl;
    vec2 = vec1;
    vec2.Show_vec();
    cout << "Векторы равны: " << endl;
    vec2 == vec1;
    cout << "Векторы не равны: " << endl;
    vec2 != vec1;
    cout << "Сложение векторов: " << endl;
    vec3 = vec1 + vec2;
    vec3.Show_vec();
    cout << "Вычитание векторов: " << endl;
    vec3 = vec1 - vec2;
    vec3.Show_vec();
    cout << "Умножение вектора на число: " << endl;
    vec1.bb();
    vec2.b = vec1.b;
    cout << "Первый вектор, умноженное на число:" << endl;
    vec3 *= vec1;
    cout << "Второй вектор, умноженное на число:" << endl;
    vec3 *= vec2;
    cout << "Скалярное произведение: " << endl;
    vec1 % vec2;
    cout << "Модуль 1 вектора: " << endl;
    vec1|;
    cout << "Модуль 2 вектора: " << endl;
    vec2|;
    cout << "Значение координаты 1 вектора: " << endl;
    vec1.koor();
    vec1[];
    cout << "Значение координаты 2 вектора: " << endl;
    vec2.koor();
    vec2[];
 
    system("pause");
}
А что с модулем и значением координаты?
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
10.10.2016, 21:41 25
Цитата Сообщение от narsky Посмотреть сообщение
произвести пару действий над векторами
  1. второму вектору присвоить значения первого,
  2. проверить на равенство и неравенство векторы,
  3. сложение
  4. и вычитание векторов,
  5. умножение вектора на число,
  6. скалярное произведение векторов,
  7. модуль векторов
  8. и найти значение определенной координаты каждого вектора


Как-то сразу вспомнилось:
"Дайте, пожалуйста, попить... А то так кушать хочется, что даже переночевать негде".
0
2 / 2 / 2
Регистрация: 23.03.2016
Сообщений: 142
10.10.2016, 21:53  [ТС] 26
gru74ik, ну нельзя же пугать тех, кто отважится мне помогать

Добавлено через 8 минут
С модулем нужно же просто возвратить переменную с? Как правильно записать данную строку? Такая не подходит
C++
1
return Vector(c);
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,624
10.10.2016, 23:50 27
Для модуля нужна унарная операция.
C++
1
2
3
4
5
6
7
8
9
10
double Vector::operator ! ()
{
    double c = 0;
    for (int i = 0; i < n; i++) c += vec[i] * vec[i];
    return sqrt(c);
}
 
//...
 
cout << "Модуль 1 вектора: " << !vec1 << endl;
0
0 / 0 / 0
Регистрация: 29.11.2018
Сообщений: 2
22.10.2019, 14:16 28
Извините, а есть готовый рабочий код на эту программу?
0
4768 / 2578 / 892
Регистрация: 29.11.2010
Сообщений: 5,579
23.10.2019, 17:00 29
Цитата Сообщение от pashazhol1 Посмотреть сообщение
Извините, а есть готовый рабочий код на эту программу?
А пожалуйста:
Кликните здесь для просмотра всего текста
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <iomanip>
#include <initializer_list>
#include <algorithm>
#include <functional>
#include <exception>
#include <numeric>
 
template<typename T>
class Vector {
public:
    typedef T* iterator;
    typedef const T* const_iterator;
 
    explicit Vector(std::size_t size) : size(size), data(new T[size]{ 0 }) {
    }
    Vector(const Vector<T>& other) : size(other.getSize()), data(new T[other.getSize()]) {
        std::copy(other.data, other.data + other.getSize(), data);
    }
 
    Vector(std::initializer_list<T> l) : size(l.size()), data(new T[l.size()]) {
        std::copy(l.begin(), l.end(), data);
    }
 
    Vector(Vector<T>&& other) : data(nullptr) {
        this->data = other.data;
        this->size = other.size;
        other.data = nullptr;
        other.size = 0;
    }
    Vector<T>& operator=(const Vector<T>& other) {
        if (this != &other) {
            delete[] data;
            data = new T[size];
            this->size = other.size;
            std::copy(other.data, other.data + other.getSize(), data);
        }
        return &this;
    }
    Vector<T>& operator=(Vector<T>&& other) {
        if (this != &other) {
            delete[] data;
            this->data = other.data;
            this->size = other.size;
            other.data = nullptr;
            other.size = 0;
        }
        return *this;
    }
    virtual ~Vector() {
        if (data != nullptr) {
            delete[] data;
        }
    }
    const std::size_t getSize() const { return size; }
 
    T& operator[](std::size_t i) { return data[i]; }
    const T& operator[](std::size_t i) const { return data[i]; }
    iterator begin() { return data;  }
    iterator end() { return data + size;  }
    const_iterator begin() const { return data; }
    const_iterator end() const { return data + size; }
 
private:
    std::size_t size;
    T* data;
};
 
template<typename T>
std::ostream& operator<<(std::ostream& out, const Vector<T>& v) {
    for (auto i : v) {
        out << i << " ";
    }
    return out;
}
 
template<typename T>
Vector<T> operator+(const Vector<T>& a, const Vector<T>& b) {
    if (a.getSize() != b.getSize()) {
        throw std::invalid_argument("addition is only possible for vectors of the same size");
    }
    Vector<T> result(a.getSize());
    std::transform(a.begin(), a.end(), b.begin(), result.begin(), std::plus<T>());
    return result;
}
 
template<typename T>
Vector<T> operator-(const Vector<T>& a, const Vector<T>& b) {
    if (a.getSize() != b.getSize()) {
        throw std::invalid_argument("addition is only possible for vectors of the same size");
    }
    Vector<T> result(a.getSize());
    std::transform(a.begin(), a.end(), b.begin(), result.begin(), std::minus<T>());
    return result;
}
 
template<typename T>
Vector<T> operator*(const T& s, const Vector<T>& v) {
    Vector<T> result(v.getSize());
    std::transform(v.begin(), v.end(), result.begin(), std::bind1st(std::multiplies<T>(), s));
    return result;
}
 
template<typename T>
Vector<T> operator*(const Vector<T>& v, const T& s) {
    return operator*(s, v);
}
 
template<typename T>
T operator*(const Vector<T>& a, const Vector<T>& b) {
    if (a.getSize() != b.getSize()) {
        throw std::invalid_argument("addition is only possible for vectors of the same size");
    }
    return std::inner_product(a.begin(), a.end(), b.begin(), T());
}
 
template<typename T>
bool operator==(const Vector<T>& a, const Vector<T>& b) {
    if (a.getSize() != b.getSize()) {
        return false;
    }
    return std::equal(a.begin(), a.end(), b.begin());
}
 
template<typename T>
bool operator!=(const Vector<T>& a, const Vector<T>& b) {
    return !operator==(a, b);
}
 
int main(int argc, char** argv) {
 
    int s = 2;
    std::cout << "s = " << s << std::endl;
 
    Vector<int> a = { 1, 2, 3 };
    std::cout << "a = " << a << std::endl;
    Vector<int> b = { 4, 5, 6 };
    std::cout << "b = " << b << std::endl;
 
    Vector<int> c = a;
    std::cout << "c = a = " << c << std::endl;
 
    std::cout << "(a == b) = " << (a == b) << std::endl;
    std::cout << "(a != b) = " << (a != b) << std::endl;
    std::cout << "(a + b) = " << (a + b) << std::endl;
    std::cout << "(a - b) = " << (a - b) << std::endl;
    std::cout << "(s * a) = " << (s * a) << std::endl;
    std::cout << "(b * s) = " << (b * s) << std::endl;
    std::cout << "(a * b) = " << (a * b) << std::endl;
 
    return 0;
}
0
23.10.2019, 17:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2019, 17:00
Помогаю со студенческими работами здесь

Создать два класса вектор и матрица. Определить функцию умножения матрицу на вектор
Создать два класса вектор и матрица. Определить конструкторы - по умолчанию, с параметром, для...

Создать два класса: вектор и матрица; определить функцию умножения матрицы на вектор, как дружественную
Cоздать два класса: вектор и матрица. Определить конструкторы(по умолчанию, с параметрами,...

Создать клас ВЕКТОР целых чисел. Разработать класс СТЕК, который вмещает объект класса ВЕКТОР
Создать клас ВЕКТОР целых чисел. Разработать класс СТЕК, который вмещает объект класса ВЕКТОР....

Реализовать шаблон класса вектор. Определить 2 объекта класса vector и внешнюю функцию
Есть такое задание Реализовать шаблон класса vector, реализующий динамический массив. Определить 2...

Объявление класса Вектор, создание экземпляра класса
Класс Вектор Члены класса3 прямоугольные декартовые координаты Методы Конструктор, деструктор,...

Разработка класса.Реализовать в виде класса набор методов для выполнения следующих операций с целыми числами:
Даны натуральные числа n, m. Найти все натуральные числа меньшие n, квадрат суммы цифр которых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru