Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/76: Рейтинг темы: голосов - 76, средняя оценка - 4.68
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782

Класс вектор в n-мерном пространстве

02.02.2009, 01:04. Показов 16066. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задача:
Разработать класс “вектор в n-мерном пространстве”. Определить:
• конструктор (или несколько, если необходимо)
• набор методов “get” и “set” ;
• операторы + и – для сложения и вычитания векторов с получением нового вектора (суммы или разности);
• оператора * для вычисления скалярного произведения двух векторов;
• оператор присваивания;
• оператор сравнения ==;
• оператор << для вывода в поток;

Вектор в n-мерном пространстве может иметь сколько угодно координат. Например, при сложении вектора a, с координатами (a1,a2,…,an) с вектором b (b1,b2,…,bn), вектор a+b будет иметь координаты (a1+b1,a2+b2,…,an+bn)

Пока, только в главной программе пользователь вводит координаты и те же координаты выводятся.
С операторами возникли проблемы. Может быть, кто-нибудь подскажет, как лучше сделать, например, сложение векторов?

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
#include <iostream>
 
using std::cout;
using std::cin;
using std::endl;
 
class Vector
{
public:
    Vector ();           //Конструктор и деструктор
    ~Vector ();
    void SetAmount (int n);             //Методы для координат и необходимого количества
    void SetCoordinates (int value, int i); 
    int GetAmount () const;
    int GetCoordinates (int i) const;   
    
private:
    int itsAmount;                 //Нужное количество (вводится пользователем)
    int itsCoordinates [100];            //Координаты
};
 
Vector::Vector ()
{
}
Vector::~Vector ()
{
}
void Vector::SetAmount (int n)
{
    itsAmount = n;
}
void Vector::SetCoordinates (int value, int i)
{
    itsCoordinates [i] = value;
}
int Vector::GetAmount () const
{
    return itsAmount;
}
int Vector::GetCoordinates (int i) const
{
    return itsCoordinates [i];
}
 
int main ()
{
    setlocale (LC_ALL,".1251");
    Vector Vector1;
    Vector Vector2;
    Vector Vector3;
 
    int n;
    int i;
    int value;
    cout << "Введите количество координат первого вектора:\n";
    cin >> n;
    Vector1.SetAmount (n);
    cout << "Введите координаты вектора:\n";
    for (i = 0; i < Vector1.GetAmount (); i++)
    {
        cout << "Координата " << i + 1 << " = ";
        cin >> value;
        Vector1.SetCoordinates (value, i);
    }
    cout << endl;
 
    cout << "Введите количество координат второго вектора:\n";
    cin >> n;
    Vector2.SetAmount (n);
    cout << "Введите координаты вектора:\n";
    for (i = 0; i < Vector2.GetAmount (); i++)
    {
        cout << "Координата " << i + 1 << " = ";
        cin >> value;
        Vector2.SetCoordinates (value, i);
    }
    cout << endl << endl;
 
    cout << "\nВектор 1:\n";
    for (i = 0; i < Vector1.GetAmount (); i++)
    {
        cout << "Координата " << i + 1 << " = ";
        cout << Vector1.GetCoordinates (i) << endl;
    }
    cout << endl;
 
    cout << "Вектор 2:\n";
    for (i = 0; i < Vector2.GetAmount (); i++)
    {
        cout << "Координата " << i + 1 << " = ";
        cout << Vector2.GetCoordinates (i) << endl;
    }
 
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.02.2009, 01:04
Ответы с готовыми решениями:

Класс, описывающий вектор в пространстве
Создайте класс, описывающий вектор в пространстве. Такой вектор задаётся тремя координатами. Перегрузите операции +, -, * соответственно...

Задача на векторы в в н-мерном пространстве
Здравствуйте. Задали вот задачку в универе, а знаний чтоб её решить нету ) Надо сделать класс, который вычислял бы расстояние между...

Две точки в n-мерном пространстве X=(х1, х2, ..., хn), Y=(y1, y2, ...,yn)
Даны две точки в n-мерном пространстве X=(х1, х2, ..., хn), Y=(y1, y2, ...,yn). Написать программу нахождения расстояния между этими...

10
43 / 39 / 12
Регистрация: 05.01.2009
Сообщений: 394
02.02.2009, 01:58
C++
1
2
3
4
5
6
7
8
9
Vector& operator + (const Vector& vec)
{
    for (int i=0; i<this->itsAmount; ++i)
       this->itsCoordinates[i]+=vec.itsCoordinates[i]; // вроде бы к private есть достпу в данном случае
 
    return *this;
 
}
// както так
0
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
04.02.2009, 02:17  [ТС]
Спасибо.
Я уже разобрался сам.
Думаю, лучше сделать так, чтобы не менять координаты исходного вектора:

C++
1
2
3
4
5
6
7
8
9
const Vector Vector::operator+ (const Vector & rhs)
{
    int max, i;
    max = (itsAmount > rhs.GetItsAmount () ? itsAmount : rhs.GetItsAmount ());
    Vector temp (max);
    for (i = 0; i < max; i++)
        temp.itsCoordinates [i] = itsCoordinates [i] + rhs.GetItsCoordinates (i);
    return temp;
}
0
43 / 39 / 12
Регистрация: 05.01.2009
Сообщений: 394
04.02.2009, 11:04
да ты прав, я ошибся, написал для +=
0
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
06.02.2009, 00:34  [ТС]
Я сделал перегрузку операции умножения вектора на число:

C++
1
2
3
4
5
6
7
8
const Vector Vector::operator* (const int & d)
{
    Vector temp (itsAmount);
    int i;
    for (i = 0; i < itsAmount; i++)
        temp.itsCoordinates [i] = itsCoordinates [i] * d;
    return temp;
}
Так работает, но только если число стоит справа от объекта, а если слева, то нет. Как написать, чтобы работал и второй случай?
0
43 / 39 / 12
Регистрация: 05.01.2009
Сообщений: 394
06.02.2009, 00:48
C++
1
2
3
4
5
6
7
8
9
friend Vector Vector :: operator * (const int & d, const Vector& vec)
{
Vector temp (vec.itsAmount); 
int i; 
for (i = 0; i < temp.itsAmount; i++) 
temp.itsCoordinates [i] = vec.itsCoordinates [i] * d; 
return temp; 
 
}
0
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
06.02.2009, 01:11  [ТС]
Я так уже делал, только без friend (здесь это не нужно), выдаёт сообщение:
C++
1
binary 'operator *' has too many parameters
0
43 / 39 / 12
Регистрация: 05.01.2009
Сообщений: 394
06.02.2009, 01:21
а если попробовать с friend? то параметров по моему в самый раз будет
0
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
06.02.2009, 03:54
Цитата Сообщение от qwert Посмотреть сообщение
Я сделал перегрузку операции умножения вектора на число:

C++
1
2
3
4
5
6
7
8
const Vector Vector::operator* (const int & d)
{
    Vector temp (itsAmount);
    int i;
    for (i = 0; i < itsAmount; i++)
        temp.itsCoordinates [i] = itsCoordinates [i] * d;
    return temp;
}
Так работает, но только если число стоит справа от объекта, а если слева, то нет. Как написать, чтобы работал и второй случай?
Задай глобальный оператор
Code
1
2
3
Vector &operator*(int a,Vector &b ) {
       return b*a;
};
0
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
07.02.2009, 00:08  [ТС]
Наскколько я понимаю, сделать глобальной - это не писать ... Vector::...
В общем пишет: 'return' : cannot convert from 'const Vector' to 'Vector &'
Можно вопрос: когда нужно ставить & в списке параметров, а когда нет. Просто у тебя &operator*(int a,Vector &b ) перед a есть, а перед b нет.
0
0 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 7
15.12.2011, 10:37
Подскажите что не так, вставляю оператор перегрузки в код после конструктора и выдаёт ошибку [C++ Error] Unit1.cpp(51): E2316 'Vector::operator *(const int &)' is not a member of 'Vector' Подскажите что не так(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.12.2011, 10:37
Помогаю со студенческими работами здесь

Группировка точек в 3-мерном пространстве. Алгоритм
В пространстве имеется множество точек (~700 000), необходимо разбить эти точки на n групп, в каждой из которых имеется что-то типа главной...

Создать класс "Вектор в двумерном евклидовом пространстве"
Здравствуйте! подскажите пожалуйста, кто может:help: Составить описание класса. Определить конструктор по умолчанию, конструктор с...

Создать класс "Вектор в трехмерном пространстве"
Создать класс, используя сведения, представленные в таблице. Разработать программу, демонстрирующую работу с объектами этого класса...

Найти в n-мерном пространстве min расстояние от начала координат до отрезка, заданного координатами концов
Найти в n-мерном пространстве минимальное расстояние от начала координат до отрезка , заданного координатами своих концов. Минимальное...

Описать класс вектор в пространстве, содержащий координаты его начала и конца
Описать класс вектор в пространстве, содержащий координаты его начала и конца, а также методы: нахождения длины, нахождения координат...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru