Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/41: Рейтинг темы: голосов - 41, средняя оценка - 4.83
 Аватар для Fintt
10 / 10 / 2
Регистрация: 13.02.2012
Сообщений: 94

Класс вектор

18.07.2013, 08:43. Показов 8262. Ответов 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
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,646
Записей в блоге: 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,035
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru