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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.74
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
02.02.2009, 01:04     Класс вектор в n-мерном пространстве #1
Есть задача:
Разработать класс “вектор в 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2009, 01:04     Класс вектор в n-мерном пространстве
Посмотрите здесь:

C++ Задача на векторы в в н-мерном пространстве
C++ Класс TPlane, описывающий плоскость в пространстве
C++ Две точки в n-мерном пространстве X=(х1, х2, ..., хn), Y=(y1, y2, ...,yn)
C++ [Задача]Найти в n-мерном пространстве минимальное расстояние от начала координат до отрезка , заданного координатами своих концов.
C++ Группировка точек в 3-мерном пространстве. Алгоритм
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Фенрир
42 / 38 / 2
Регистрация: 05.01.2009
Сообщений: 394
02.02.2009, 01:58     Класс вектор в n-мерном пространстве #2
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;
 
}
// както так
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
04.02.2009, 02:17  [ТС]     Класс вектор в n-мерном пространстве #3
Спасибо.
Я уже разобрался сам.
Думаю, лучше сделать так, чтобы не менять координаты исходного вектора:

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;
}
Фенрир
42 / 38 / 2
Регистрация: 05.01.2009
Сообщений: 394
04.02.2009, 11:04     Класс вектор в n-мерном пространстве #4
да ты прав, я ошибся, написал для +=
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
06.02.2009, 00:34  [ТС]     Класс вектор в n-мерном пространстве #5
Я сделал перегрузку операции умножения вектора на число:

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;
}
Так работает, но только если число стоит справа от объекта, а если слева, то нет. Как написать, чтобы работал и второй случай?
Фенрир
42 / 38 / 2
Регистрация: 05.01.2009
Сообщений: 394
06.02.2009, 00:48     Класс вектор в n-мерном пространстве #6
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; 
 
}
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
06.02.2009, 01:11  [ТС]     Класс вектор в n-мерном пространстве #7
Я так уже делал, только без friend (здесь это не нужно), выдаёт сообщение:
C++
1
binary 'operator *' has too many parameters
Фенрир
42 / 38 / 2
Регистрация: 05.01.2009
Сообщений: 394
06.02.2009, 01:21     Класс вектор в n-мерном пространстве #8
а если попробовать с friend? то параметров по моему в самый раз будет
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
06.02.2009, 03:54     Класс вектор в n-мерном пространстве #9
Цитата Сообщение от 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;
}
Так работает, но только если число стоит справа от объекта, а если слева, то нет. Как написать, чтобы работал и второй случай?
Задай глобальный оператор
Код
Vector &operator*(int a,Vector &b ) {
       return b*a;
};
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
07.02.2009, 00:08  [ТС]     Класс вектор в n-мерном пространстве #10
Наскколько я понимаю, сделать глобальной - это не писать ... Vector::...
В общем пишет: 'return' : cannot convert from 'const Vector' to 'Vector &'
Можно вопрос: когда нужно ставить & в списке параметров, а когда нет. Просто у тебя &operator*(int a,Vector &b ) перед a есть, а перед b нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2011, 10:37     Класс вектор в n-мерном пространстве
Еще ссылки по теме:

C++ Вектор в пространстве Builder C++
Даны вектора в трёхмерном пространстве, создать класс C++
C++ Класс, описывающий вектор в пространстве

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

Или воспользуйтесь поиском по форуму:
hint1g
0 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 7
15.12.2011, 10:37     Класс вектор в n-мерном пространстве #11
Подскажите что не так, вставляю оператор перегрузки в код после конструктора и выдаёт ошибку [C++ Error] Unit1.cpp(51): E2316 'Vector::operator *(const int &)' is not a member of 'Vector' Подскажите что не так(
Yandex
Объявления
15.12.2011, 10:37     Класс вектор в n-мерном пространстве
Ответ Создать тему
Опции темы

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