Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/55: Рейтинг темы: голосов - 55, средняя оценка - 4.51
2 / 2 / 1
Регистрация: 21.09.2017
Сообщений: 87
1

Класс вектор на плоскости

23.04.2018, 14:18. Показов 9881. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Количество конструкторов в классе должно быть не менее трех. Для выполнения принципа инкапсуляции поля класса объявить закрытыми. Объявить объекты класса и продемонстрировать работу методов.
Описать класс вектор на плоскости, содержащий поля: координаты вектора и методы:
Вывода координат на экран;
Нахождения угла, образованного вектором с осью ОХ;
Сравнение вектора на равенство с вектором, заданным в качестве параметра;
В этом случаи у меня хромает мат. часть (Т.к. алгебра начнётся в следующем году) и ООП я очень плохо усваиваю. Если можете как-то помочь, направить или если напишите прям фрагменты кода, то буду очень благодарен, т.к. я окончательно запутался, что и как здесь делать. Код прилагаю (На него ориентироваться не стоит, думаю, он написан просто паршиво и далеко не закончен)

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
#include <iostream>
#include <cstdlib>
#include <math.h>
#include <ctime>
using namespace std;
 
class vector {
    private: int x, y, x1, y1; //Поля
    public: 
    vector (int s) //Конструктор, ввод координат вектора
    {
        cout<<"Способ задания координт вектора:\n1-вводом, 2-случайным образом: ";
        cin>>s;
        switch(s)
    {
        case 1:
        {
            cout<<"Введите координаты конца вектора:\n";
            cout<<"X1="; cin>>x1; cout<<endl;
            cout<<"Y1="; cin>>y1; cout<<endl;
            break;
        }
            case 2:
        {
            x1=rand()%25-10;
            y1=rand()%25-10;    
            break;
        }
    }
}
    void Conclusion() //Метод, вывод координат вектора
    {
        cout<<"Координаты вектора:\nНачало:("<<x<<","<<y<<"); Конец:("<<x1<<","<<y1<<") "<<endl;
    }
    vector (int s, int a, int b, int a1, int b1) //Конструктор, ввод параметрического вектора
    {
        cout<<"Способ задания координт вектора:\n1-вводом, 2-случайным образом: ";
        cin>>s;
        switch(s)
    {
        case 1:
        {
            cout<<"Введите координаты начала вектора:\n";
            cout<<"A="; cin>>a; cout<<endl;
            cout<<"B="; cin>>b; cout<<endl;
            cout<<"Введите координаты конца вектора:\n";
            cout<<"A1="; cin>>b1; cout<<endl;
            cout<<"B1="; cin>>a1; cout<<endl;
            break;
        }
            case 2:
        {
            a=rand()%10-10;
            b=rand()%10-10;
            a1=rand()%25-10;
            b1=rand()%25-10;    
            break;
        }
    }
}
 
public: vector(int x1, int y1, int C) //Нахождения угла
    {
        C=;
    }
 
};
int main()
{
    setlocale(LC_ALL, "Russian"); 
    srand(time(NULL));
    vector k(2);
    k.Conclusion();
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2018, 14:18
Ответы с готовыми решениями:

Разработать класс, описывающий вектор на плоскости
1. «Работа с классами. Объявление классов, наследование». На языке С++ разработать класс,...

Написать класс "вектор на плоскости" заданный в системе декартовых координат
Разработать класс, набор методов (конструктор, деструктор и указаны методы) для программной модели...

Наследование: Определить класс vector2 как вектор на плоскости. Определить для него операции и функции
Уже который час мучаюсь не выходит помогите пожалуйста Определить класс vector2 как вектор...

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

4
31 / 26 / 26
Регистрация: 04.04.2018
Сообщений: 83
23.04.2018, 15:24 2
Лучший ответ Сообщение было отмечено NejdanX как решение

Решение

Во-первых, не стоит использовать имя vector для названия класса, так как в пространстве имен std уже существует идентификатор vector.

Добавлено через 1 минуту
Вот что получилось у меня. Проверь работу кода.

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
#include <iostream>
#include <conio.h>
#include <math.h>
 
using namespace std;
 
class plainVector
{
public:
 
    // конструктор для создания вектора с нулевыми координатами
    plainVector()
    {
        x = 0.0;
        y = 0.0;
    }
 
    // конструктор с двумя параметрами для создания вектора;
    // у любого вектора на плоскости имеются две координаты,
    // которые равны координатам конечной точки вектора,
    // если переместить начальную точку вектора в точку (0, 0)
    plainVector(double x_, double y_)
    {
        x = x_;
        y = y_;
    }
    // конструктор, в который передаются координаты двух точек:
    // координаты начальной точки вектора и координата конечной точки вектора;
    // данная функция как бы "перемещает" начальную точку вектора в точку (0, 0)
    plainVector(double x1, double y1, double x2, double y2)
    {
        x = x2 - x1;
        y = y2 - y1;
    }
 
    void printCoordinates()
    {
        cout << "Vector coordinates: x = " << x <<", y = " << y << endl;
    }
 
    double getX() { return x; } // эти функции необходимы
    double getY() { return y; } // для функции isEqual()
 
    // в данной функции получаем результат в градусах;
    // в случае нулевого вектора его угол с осью OX не определен,
    // будем считать его равным 0.
    double getAngle()
    {
        if(x == 0.0 && y == 0.0) return 0.0;
 
        if(x == 0.0) {
            if(y > 0)
                return 90;
            else
                return -90;
        }
 
        if(y == 0) {
            if(x > 0)
                return 0;
            else
                return 180;
        }
 
        if(x > 0 && y > 0)
            return atan(y / x) * (180.0 / M_PI);
        if(x < 0 && y > 0)
            return 180 - atan(y / -x) * (180.0 / M_PI);
        if(x < 0 && y < 0)
            return 180 + atan(y / x) * (180.0 / M_PI);
        if(x > 0 && y < 0)
            return 360 - atan(-y / x) * (180.0 / M_PI);
    }
 
    bool isEqual(plainVector v)
    {
        if(this->x == v.getX() && this->y == v.getY())
            return true;
        return false;
    }
 
 
private:
    double x;
    double y;
 
};
 
int main(int argc, char *argv[])
{
    plainVector v1;
    plainVector v2(15, 4);
    plainVector v3(-3, -1, 8, 19);
    plainVector v4(2, 8, 17, 12); // координаты этого вектора равны вектору v2!
    plainVector v5(-5, 5);
    v1.printCoordinates();
    v2.printCoordinates();
    v3.printCoordinates();
    v4.printCoordinates();
    v5.printCoordinates();
    cout << "v1 angle: " << v1.getAngle() << endl;
    cout << "v2 angle: " << v2.getAngle() << endl;
    cout << "v3 angle: " << v3.getAngle() << endl;
    cout << "v4 angle: " << v4.getAngle() << endl;
    cout << "v5 angle: " << v5.getAngle() << endl;
    cout << "v2 equals v1: " << (v2.isEqual(v1) ? "true" : "false") << endl;
    cout << "v2 equals v2: " << (v2.isEqual(v2) ? "true" : "false") << endl; // вектор всегда равен самому себе!
    cout << "v2 equals v4: " << (v2.isEqual(v3) ? "true" : "false") << endl;
    cout << "v2 equals v5: " << (v2.isEqual(v4) ? "true" : "false") << endl;
    cout << "v2 equals v6: " << (v2.isEqual(v5) ? "true" : "false") << endl;
 
    getch();
 
    return 0;
}
1
2 / 2 / 1
Регистрация: 21.09.2017
Сообщений: 87
23.04.2018, 15:34  [ТС] 3
Ух ты, сейчас буду разбираться с кодом, но идея абсолютно понятна. Спасибо вам большое)
0
31 / 26 / 26
Регистрация: 04.04.2018
Сообщений: 83
23.04.2018, 15:40 4
В функции getAngle:
C++
1
2
3
4
5
6
if(x == 0.0) {
    if(y > 0)
        return 90;
    else
        return -90;
}
Здесь я ошибся немного, -90 лучше заменить на 270.
1
2 / 2 / 1
Регистрация: 21.09.2017
Сообщений: 87
23.04.2018, 15:50  [ТС] 5
Хорошо, заменю. Спасибо)
0
23.04.2018, 15:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2018, 15:50
Помогаю со студенческими работами здесь

Подробно прокомментировать класс PolarCoordinates, представляющий собой класс координат точки на плоскости
Написать класс PolarCoordinates, представляющий собой класс координат точки на плоскости, описанной...

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

Наследование. Вектор на плоскости
В производном классе создайте несколько конструкторов, деструкторов. Не забывайте, что в...

Класс Точка на плоскости
Уважаемые, помогите пожалуйста написать программку. Спасибо заранее тем,кто сможет помочь! Описать...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru