Аватар для Fintt
10 / 10 / 2
Регистрация: 13.02.2012
Сообщений: 94

Класс вектор

18.07.2013, 08:43. Показов 8367. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу разобраться с этим классом, прошу помощи и в объяснении(задание очень объёмное ещё), проблема с самим вектором тоже есть.
Разработать класс вектор размерности n. Определить несколько конструкторов , в том числе и конструктор копирования. Реализовать методы для вычисления модуля вектора, скалярного произведения, сложения,вычитания, умножения на константу. Перегрузить операции сложения, вычитания, умножения, инкремента, декремента, индексирования, присваивания для данного класса. Написать программу, демонстрирующую работу с классом. Создать массив объектов. Написать функцию, которая для заданной пары векторов будет определять, явл ли они коллинеарными или ортогональными.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.07.2013, 08:43
Ответы с готовыми решениями:

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов
Привет! Задача следующая. Нужно реализовать класс "вектор" с конструкторами, которые позволяют создать нулевой вектор и вектор с...

Создать класс, полем которого является класс вектор
как это выглядит?

Класс-вектор в С++
Здраствуйте. Передо мной стоит задача реализовать произведение и сложение векторов. Информации, той, что я нашел, оказалось мало. Программу...

25
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
18.07.2013, 15:24
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Croessmah Посмотреть сообщение
Сообщение от Ilot
должен вызываться перегруженный оператор =?
а после того, как произведен выход из функции будет вызван перегруженный оператор присваивания
вот к этому.
1
 Аватар для Fintt
10 / 10 / 2
Регистрация: 13.02.2012
Сообщений: 94
18.07.2013, 15:28  [ТС]
Ilot, спасибо, я сам заочник, а нам зав кафедры дал лабы и говорит, как хотите так и делайте, так вот и живём уже 5 год))
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2226 / 1428 / 420
Регистрация: 16.05.2013
Сообщений: 3,651
Записей в блоге: 6
18.07.2013, 15:54
Реализованно:
-конструктор, в том числе и копирования;
-методы для вычисления модуля вектора, скалярного произведения, сложения,вычитания, умножения на константу;
-перегружены операции сложения, вычитания, умножения на константу, присваивания;
-написанны функции, которые для заданной пары векторов определяют, явл. ли они коллинеарными или ортогональными;
Кликните здесь для просмотра всего текста

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;
}

Совсем не понятно о чем здесь идет речь если применять это к векторам:
Перегрузить операции инкремента, декремента.
Не сделанно:
-перегрузить операцию индексирования;
ВАЖНО!
Конструктор по умолчанию создает трехмерный вектор.
Нет проверки на соответствие размерностей во всех ф-ях.
Думаю вам это не составит труда исправить.
0
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
18.07.2013, 16:05
Ilot, а индексирование не сложно:
C++
1
2
3
4
5
6
7
float operator[](int index)
{
    if (index < n)
        return ptrArr[index];
    else
    // тут вообще по идее исключение бросить надо.
}
А инкремент и декримент, как тут реализовать с массивами?
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,036
Записей в блоге: 1
18.07.2013, 16:10
Цитата Сообщение от Wolkodav Посмотреть сообщение
if (index < n)
а может просто size_t index?
0
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
18.07.2013, 16:18
Croessmah, я что бы было соответствие типо int-int. По хорошему и поле в классе надо было делать
C++
1
size_t n
.
Но проверять на вхождение индекса придётся. Или я не прав?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.07.2013, 16:18
Помогаю со студенческими работами здесь

Вектор класс
Всем привет!!! Вот написал программу с класами а она не правильно работеает. Пожалуйста помогоите исправить ошыбки. Сама задача:Создать...

Класс Вектор
Решил написать свой класс вектор, приблизительно как в СТЛ. Сначала решил сделать каркас. Все функции без аллокатора и итератора. Сделал. И...

Класс Вектор
Нужна помощь в написании программы. Класс &quot;Вектор&quot;. (Чем он отличается от массива? в том что мне дали про вектора ни слова. Помогите...

Класс вектор
У меня есть задача: Разработать пользовательский тип “ вектор в n-мерном пространстве”. Для разрабатываемого типа обязательно определить:...

Класс вектор
необходимо написать класс вектор (в геометрическом смысле в трёхмерном пространстве) реализовать : поворот вектора вокруг осей...


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

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

Новые блоги и статьи
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru