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

Класс вектор - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Fintt
 Аватар для Fintt
10 / 10 / 0
Регистрация: 13.02.2012
Сообщений: 94
18.07.2013, 08:43     Класс вектор #1
Не могу разобраться с этим классом, прошу помощи и в объяснении(задание очень объёмное ещё), проблема с самим вектором тоже есть.
Разработать класс вектор размерности n. Определить несколько конструкторов , в том числе и конструктор копирования. Реализовать методы для вычисления модуля вектора, скалярного произведения, сложения,вычитания, умножения на константу. Перегрузить операции сложения, вычитания, умножения, инкремента, декремента, индексирования, присваивания для данного класса. Написать программу, демонстрирующую работу с классом. Создать массив объектов. Написать функцию, которая для заданной пары векторов будет определять, явл ли они коллинеарными или ортогональными.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2013, 08:43     Класс вектор
Посмотрите здесь:

Класс Вектор C++
Класс вектор C++
Вектор класс C++
Класс Вектор C++
C++ Класс-вектор в С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
18.07.2013, 15:24     Класс вектор #21
Цитата Сообщение от Croessmah Посмотреть сообщение
Сообщение от Ilot
должен вызываться перегруженный оператор =?
а после того, как произведен выход из функции будет вызван перегруженный оператор присваивания
вот к этому.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fintt
 Аватар для Fintt
10 / 10 / 0
Регистрация: 13.02.2012
Сообщений: 94
18.07.2013, 15:28  [ТС]     Класс вектор #22
Ilot, спасибо, я сам заочник, а нам зав кафедры дал лабы и говорит, как хотите так и делайте, так вот и живём уже 5 год))
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
18.07.2013, 15:54     Класс вектор #23
Реализованно:
-конструктор, в том числе и копирования;
-методы для вычисления модуля вектора, скалярного произведения, сложения,вычитания, умножения на константу;
-перегружены операции сложения, вычитания, умножения на константу, присваивания;
-написанны функции, которые для заданной пары векторов определяют, явл. ли они коллинеарными или ортогональными;
Кликните здесь для просмотра всего текста

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
#include<iostream>
#include<math.h>
#include<windows.h>
using namespace std; 
//--------------------------------------------------------------
//----------- Определение класса -------------------------------
//--------------------------------------------------------------
class vektor
{
private:
    int n;
    float* ptrArr;
public:
    vektor()        //Конструктор по умолчанию
    {
        n = 3;
        ptrArr = new float [n]; 
    }
    vektor(int num)     //Конструктор задает вектор заданной размерности и нулевыми элементами
    {
        n = num;
        ptrArr = new float [n]; 
        for(int i=0;i < n;++i)
              ptrArr[i]=0;
    }
    vektor(vektor &src)   //Конструктор копирования
    {
        n=src.n;
          ptrArr=new float[n];
          for(int i=0;i<src.n;++i)
              ptrArr[i]=src.ptrArr[i];
    }
    ~vektor()       //Деструктор
    { delete [] ptrArr; }
    void GetVektor()        //Задать вектор
    {
        //cout << "Введите размерность вектора: "; cin >> n;
        for (int i=0; i < n; i++ )
        {
            cout << "Введите элемент вектора № " << i << ": ";
            cin >> *(ptrArr + i); 
        }
    }
    float ArrModul()        //Вычислить модуль
    {
        float modul = 0;
        for (int i=0; i < n; i++ )
            modul += *(ptrArr + i) *  *(ptrArr + i); 
        return sqrt (modul);
    }
    void ShowVektor()       //Показать вектор
    {
        cout << "Вектор [";
        for (int i=0; i < n; i++ )
            cout << *(ptrArr + i) << ", ";
        cout << " ]\n"; 
    }
    vektor operator= (vektor& v)
    {
        n = v.n;
        for (int i=0; i < n; i++ )
            *(ptrArr + i) = *(v.ptrArr + i); 
        return *this;
    }
    vektor operator+ (vektor& v)
    {
        for (int i=0; i < n; i++ )
            *(ptrArr + i) += *(v.ptrArr + i); 
        return *this;
    }
    vektor operator- (vektor& v)
    {
        for (int i=0; i < n; i++ )
            *(ptrArr + i) -= *(v.ptrArr + i); 
        return *this;
    }
 
    float Skalar       (vektor* );  //Склярное произведение
    vektor Kommutativ  (vektor* );  //Сложение векторов
    vektor Netativ     (vektor* );  //Вычитание векторов
    vektor Multi       (float   );  //Умножение на константу
 
    friend bool Kolliniar(vektor* , vektor* );  //Проверка на коллинеарность
    friend bool Ortogonal(vektor* , vektor* );  //Проверка на ортогональность
};
//--------------------------------------------------------------
//----------- Определение дружественных функций ----------------
//--------------------------------------------------------------
float vektor::Skalar (vektor* vector1)          
{
    static float temp;
    temp = 0;
    for (int i=0; i < n; i++ )
        temp += *(ptrArr + i) * *(vector1->ptrArr + i);
    return temp;
}
vektor vektor::Kommutativ(vektor* vector1)
{
    for (int i=0; i < n; i++ )
        *(ptrArr + i) += *(vector1->ptrArr + i);
    return *this;       
}
vektor vektor::Netativ(vektor* vector1)
{
    for (int i=0; i < n; i++ )
        *(ptrArr + i) -= *(vector1->ptrArr + i);
    return *this;       
}
vektor vektor::Multi(float c)
{
    for (int i=0; i < n; i++ )
        *(ptrArr + i) *= c;
    return *this;   
}
bool Ortogonal (vektor* vector1, vektor* vector2)
{
    if ( (vector1->Skalar (vector2)) < 0.01 )
        return true;
    else
        return false;
}
bool Kolliniar (vektor* vector1, vektor* vector2)
{
    if ( abs( vector1->Skalar (vector2) - ((*vector1).ArrModul() * (*vector2).ArrModul()) ) < 0.01 )
        return true;
    else
        return false;
}
//--------------------------------------------------------------
//------------------ Тело программы ----------------------------
//--------------------------------------------------------------
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    vektor v1(3), v2(3), v(3);
    v1.GetVektor();
    v2.GetVektor();
 
    cout << "Модуль первого вектора: " << v1.ArrModul() << endl;
    
    cout << v1.Skalar(&v2) << endl;
    
    v = v1.Kommutativ(&v2);
    v.ShowVektor();
    v = v1 + v2;
    v.ShowVektor();
    
    v = v1.Netativ(&v2);
    v.ShowVektor();
    v = v1 - v2;
    v.ShowVektor();
 
    cout << "Ортогональность: " << Ortogonal(&v1, &v2) << endl;
    cout << "Коллинеарность: "  << Kolliniar(&v1, &v2) << endl;
    system("pause");
    return 0;
}

Совсем не понятно о чем здесь идет речь если применять это к векторам:
Перегрузить операции инкремента, декремента.
Не сделанно:
-перегрузить операцию индексирования;
ВАЖНО!
Конструктор по умолчанию создает трехмерный вектор.
Нет проверки на соответствие размерностей во всех ф-ях.
Думаю вам это не составит труда исправить.
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
18.07.2013, 16:05     Класс вектор #24
Ilot, а индексирование не сложно:
C++
1
2
3
4
5
6
7
float operator[](int index)
{
    if (index < n)
        return ptrArr[index];
    else
    // тут вообще по идее исключение бросить надо.
}
А инкремент и декримент, как тут реализовать с массивами?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,914
Записей в блоге: 2
Завершенные тесты: 1
18.07.2013, 16:10     Класс вектор #25
Цитата Сообщение от Wolkodav Посмотреть сообщение
if (index < n)
а может просто size_t index?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2013, 16:18     Класс вектор
Еще ссылки по теме:

C++ Класс вектор
C++ Класс вектор
C++ Класс вектор С++

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

Или воспользуйтесь поиском по форуму:
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
18.07.2013, 16:18     Класс вектор #26
Croessmah, я что бы было соответствие типо int-int. По хорошему и поле в классе надо было делать
C++
1
size_t n
.
Но проверять на вхождение индекса придётся. Или я не прав?
Yandex
Объявления
18.07.2013, 16:18     Класс вектор
Ответ Создать тему
Опции темы

Текущее время: 11:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru