0 / 0 / 0
Регистрация: 19.03.2017
Сообщений: 13
1

Класс vector3D

19.03.2017, 13:09. Показов 7410. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно создать класс vector3D, не используя перегрузки операций. Я создал следующую программу, она работает. Но преподу что-то не нравится. Мне кажется, что я не правильно использою конструкторы и не совсем корректно описал методы. Я не использовал конструкторы в методах. Посмотрите пожалуйста и если есть, что подправить, исправьте.
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
#include <iostream>
#include<math.h>
using namespace std;
class vector3D// Название класса
{
     private:// Скрытые элементы
              float x;
              float y;
              float z;
      public:// Доступные элементы
             vector3D(float X, float Y, float Z) : x(X), y(Y), z(Z) {} //конструктор инициализации 
             vector3D() : x(0), y(0), z(0) {} 
             void input();//Метода ввода значений
             void output(); //Метод вывода значений на экран
             void sum(vector3D& a, vector3D& b);// Метод сложения
             void sub(vector3D& a, vector3D& b);// Метод вычитания
             void scalar(vector3D& a, vector3D& b);//Метод скалярного умножения
             void nascala(vector3D &a, vector3D& b);// Метод умножения на скаляр
              void nascalb(vector3D &a, vector3D& b);//Метод умножения на скаляр
             void dlina(vector3D&a);//Метод вычисления длины
             void dlinb(vector3D&b);//Метод вычисления длины
             void  boold(vector3D&a, vector3D&b);//Метод сравнения длин
             void  boolv(vector3D&a, vector3D&b);//Метод сравнения векторов
             float get_x() { return x;}//Метод вызова значения
             float get_y() {return y;}// Метод вызова значения
             float get_z() {return z;}//Метод вызова значения
};
 
void vector3D::input() //Метод ввода значений{
     cout<<"X:";
     cin>>x;
     cout<<"Y:";
     cin>>y;  
      cout<<"Z:";
     cin>>z;     
}
 
void vector3D::output()//Метод вывода значений на экран
{
     cout<<x<<" "<<y<<" "<<z<<endl;     
} 
 
void vector3D::sum(vector3D& a, vector3D& b)//Метод сложения
{
     cout<<"Cumma vectorov ravna=("<<(a.get_x()+b.get_x())<<","<< (a.get_y()+b.get_y())<<","<<(a.get_z()+b.get_z())<<")"<<endl;
 
}
void vector3D:: sub(vector3D& a, vector3D& b)//Метод вычитания
{
     cout<<"Raznost' vectorov ravna=("<<(a.get_x()-b.get_x())<<","<< (a.get_y()-b.get_y())<<","<<(a.get_z()-b.get_z())<<")"<<endl;
}
 void vector3D::scalar(vector3D& a, vector3D& b)// Метод скалярного умножения
 {
    float s=((a.get_x()*b.get_x())+(a.get_y()*b.get_y())+(a.get_z()*b.get_z()));
    cout<<"Scalarnoe proizvedenie vectorov v="<<s<<endl;
 }
 void vector3D::nascala(vector3D &a,vector3D& b)//Метод умножения на скаляр
 {
    float s=((a.get_x()*b.get_x())+(a.get_y()*b.get_y())+(a.get_z()*b.get_z()));
    cout<<"Umnogenire vectora a na scalar v="<<(s*a.get_x())<<","<<(s*a.get_y())<<","<<(s*a.get_z())<<")"<<endl;
 }
  void vector3D::nascalb(vector3D &a,vector3D& b) //Метод умножения на скаляр
 {
    float s=((a.get_x()*b.get_x())+(a.get_y()*b.get_y())+(a.get_z()*b.get_z()));
    cout<<"Umnogenire vectora b na scalar v="<<(s*b.get_x())<<","<<(s*b.get_y())<<","<<(s*b.get_z())<<")"<<endl;
 }
 void  vector3D::dlina(vector3D&a)//Метод вычисления длины
 {
 float d=sqrt(a.get_x()*a.get_x()+a.get_y()*a.get_y()+a.get_z()*a.get_z());
 cout<<"Dlina vectora a="<<d<<endl; 
 }
  void  vector3D::dlinb(vector3D&b)// Метод  вычисления длины
 {
 float d=sqrt(b.get_x()*b.get_x()+b.get_y()*b.get_y()+b.get_z()*b.get_z());
 cout<<"Dlina vectora b="<<d<<endl; 
 }
 void vector3D::boold(vector3D&a, vector3D&b)// Метод сравнения длин
 { float d=sqrt(a.get_x()*a.get_x()+a.get_y()*a.get_y()+a.get_z()*a.get_z());
  float q=sqrt(b.get_x()*b.get_x()+b.get_y()*b.get_y()+b.get_z()*b.get_z());
  if(d>q){cout<<"Dlina v1>v2"<<endl;}
  if(d<q){cout<<"Dlina v1<v2"<<endl;}
  if(d==q){cout<<"Dliny v1 i v2 odinakovye "<<endl;}
 }
 void vector3D::boolv(vector3D&a, vector3D&b)//метод сравнения векторов
 {
 float d=sqrt(a.get_x()*a.get_x()+a.get_y()*a.get_y()+a.get_z()*a.get_z());
  float q=sqrt(b.get_x()*b.get_x()+b.get_y()*b.get_y()+b.get_z()*b.get_z());
  if((d==q)&&(a.get_x()==b.get_x())&&(a.get_y()==b.get_y())&&(a.get_z()==b.get_z())){
    cout<<"Vectory v1 i v2 ravny"<<endl;
  } 
  else {cout<<"Vectory v1 i v2 ne ravny"<<endl;
  }
 }
int main()
{
    vector3D a, b;// конструктор без аргументов
    a.input();
    b.input();
    a.sum(a,b);
    a.sub(a,b); 
    a.scalar(a,b);
    a.nascala(a,b);
    b.nascalb(a,b);
    a.dlina(a);
    b.dlinb(b);
    a.boold(a,b);
    a.boolv(a,b);
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2017, 13:09
Ответы с готовыми решениями:

Создать базовый класс Triad и производный класс vector3D
Помогите пожалуйста с заданием. Часть кода(vector3D) сделал, вроде работает Нужно помочь с классом...

Базовый класс Triad и производный класс vector3D
Создать базовый класс Triad (тройка чисел) с операциями сложения с числом, умножения на число,...

Создать класс vector3D, задаваемый тройкой координат
Создать класс vector3D, задаваемый тройкой координат. Обязательно должны быть реализованы: сложение...

Создать класс Vector3D, задаваемый тройкой координат
очень срочно нужна помощь! пожалуйста, кто знает как решить - помогите Создать класс Vector3D,...

11
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,647
19.03.2017, 13:15 2
Функции типа sum() должны быть с одним параметром (правым), а левый - это текущий объект.
Функции типа get_x() имеет смысл использовать при доступе извне, а для функций-членов - это лишнее усложнение программы.
2
0 / 0 / 0
Регистрация: 19.03.2017
Сообщений: 13
19.03.2017, 13:57  [ТС] 3
Добавлено через 5 минут
nmcf, Если вам не сложно, вы можете описать хотя бы один метод для примера?
0
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,647
19.03.2017, 18:40 4
Так:
C++
1
2
3
4
5
6
void vector3D::sum(const vector3D& b)
{
     x += b.x;
     y += b.y;
     z += b.z;
}
C++
1
2
a.sum(b);
cout << "Cumma vectorov ravna=(" << a.get_x() << "," << a.get_y() << "," << a.get_z() << ")" << endl;
Или так:
C++
1
2
3
4
vector3D vector3D::sum(const vector3D& b)
{
     return vector3D(x + b.x, y + b.y, z + b.z);
}
C++
1
2
vector3D c = a.sum(b);
cout << "Cumma vectorov ravna=(" << c.get_x() << "," << c.get_y() << "," << c.get_z() << ")" << endl;
1
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
19.03.2017, 19:23 5
а почему нельзя с перегрузкой операции?
0
0 / 0 / 0
Регистрация: 19.03.2017
Сообщений: 13
20.03.2017, 06:55  [ТС] 6
nmcf, Спасибо)

Добавлено через 1 минуту
Antikl, потому что мне одну программу надо с делать без перегрузки операций, а вторую с перегрузкой. Я думаю с перегрузкой я разберусь)
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
20.03.2017, 16:08 7
если с перегрузкой нужна будет помощь пиши поможем))
1
0 / 0 / 0
Регистрация: 19.03.2017
Сообщений: 13
08.04.2017, 18:54  [ТС] 8
nmfc
Antikl
Добрый вечер, а вы можете проверить правильность написания программы, и если что неправильно изменить, а также добавить метод сравнения векторов?
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
#include <iostream>
#include<math.h>
using namespace std;
class vector3D
{
     Private:
              float x;
              float y;
              float z;
      public:
             vector3D(float X, float Y, float Z) : x(X), y(Y), z(Z) {} 
             vector3D() :
             x(0),   y(0),   z(0) {} 
             void input();
             void output(); 
             vector3D  sum(vector3D& b);
            vector3D  sub( vector3D&b);
             vector3D scalar(vector3D& a, vector3D& b);
             vector3D vec(vector3D& a, vector3D& b);
             vector3D nascala(vector3D &a, float s);
             vector3D nascalb(vector3D &b, float s);
             vector3D dlina(vector3D&a);
             vector3D dlinb(vector3D&b);
             vector3D  boold(float t, float u);
             float get_x() { return x;}
             float get_y() {return y;}
             float get_z() {return z;}
};
 
void vector3D::input() {
     cout<<"X:";
     cin>>x;
     cout<<"Y:";
     cin>>y;  
      cout<<"Z:";
     cin>>z;     
}
 
void vector3D::output()
{
     cout<<x<<" "<<y<<" "<<z<<endl;     
} 
vector3D vector3D::sum( vector3D& b)
{
    return vector3D(x+b.x, y+b.y, z+b.z);
}
vector3D vector3D::sub( vector3D& b)
{
    return vector3D(x-b.x, y-b.y, z-b.z);
}
vector3D vector3D::scalar(vector3D&a, vector3D& b)
{
    return vector3D(a.x*b.x,a.y*b.y,a.z*b.z);
}
vector3D vector3D::vec(vector3D&a, vector3D& b)
{
    return vector3D(a.x*b.x,a.y*b.y,a.z*b.z);
}
vector3D vector3D::nascala(vector3D&a, float s){
    return vector3D(a.x*s,a.y*s,a.z*s);
}
vector3D vector3D::nascalb(vector3D&b, float s)
{
    return vector3D(b.x*s,b.y*s,b.z*s);
}
vector3D vector3D::dlina(vector3D&a)
{
    return vector3D(a.x*a.x,a.y*a.y,a.z*a.z);
}
vector3D vector3D::dlinb(vector3D&b)
{
    return vector3D(b.x*b.x,b.y*b.y,b.z*b.z);
}
vector3D vector3D::boold(float t, float u)
{
    if(t>u) cout<<"Dlina vectora a>b";
    if(t<u) cout<<"Dlina vectora a<b";
    if(t==u) cout<<"Dliny vectorov ravny";
}
int main()
{
    vector3D a, b;// 
    a.input();
    a.output();
    b.input();
    b.output();
    vector3D c=a.sum(b);
    vector3D e=a.sub(b);    vector3D d=a.scalar(a,b);
    float s=d.get_x()+d.get_y()+d.get_z();
    vector3D q=a.nascala(a,s);
    vector3D w=b.nascala(b,s); 
    vector3D r=a.dlina(a);
    float t=sqrt(r.get_x()+r.get_y()+r.get_z());
    vector3D y=b.dlinb(b);
    float u=sqrt(y.get_x()+y.get_y()+y.get_z());
    cout<<"Summa vectorov ravna=("<<c.get_x()<<","<<c.get_y()<<","<<c.get_z()<<")"<<endl;
    cout<<"Raznost' vectorov ravna=("<<e.get_x()<<","<<e.get_y()<<","<<e.get_z()<<")"<<endl;
    cout<<"Scalarnoe proizvedenie="<<s<<endl;
    cout<<"Vectornoe proizvedenie="<<"("<<d.get_x()<<","<<d.get_y()<<","<<d.get_z()<<")"<<endl;
    cout<<"Umnogenie vectora a na scaljar="<<"("<<q.get_x()<<","<<q.get_y()<<","<<q.get_z()<<")"<<endl;
    cout<<"Umnogenie vectora b na scaljar="<<"("<<w.get_x()<<","<<w.get_y()<<","<<w.get_z()<<")"<<endl;
    cout<<"Dlina vectora a="<<t<<endl;
    cout<<"Dlina vectora b="<<u<<endl;
    a.boold(t,u);
    return 0;
}
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
08.04.2017, 20:20 9
есть ошибки к примеру Private исправте на private, так есть метод boold(float t, float u) должен возвратит значение какое не-будь
0
0 / 0 / 0
Регистрация: 19.03.2017
Сообщений: 13
15.04.2017, 20:50  [ТС] 10
Antikl, доброго времени суток, вы писали, что можете помочь с перегрузкой операций. Вы можете помочь создать перегрузку, чтобы найти векторное произведение в данной программе?
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
#include <iostream>
#include<math.h>
using namespace std;
class vector3D
{
     private:
              float x;
              float y;
              float z;
      public:// 
             vector3D(float X, float Y, float Z) : x(X), y(Y), z(Z) {} 
             vector3D() :
             x(0),   y(0),   z(0) {} 
             friend istream& operator>>(istream& t, vector3D& a);
            friend ostream& operator<<(ostream& t, vector3D&a); 
            friend vector3D operator+( vector3D&a,vector3D &b);
            friend vector3D operator-(vector3D &a, vector3D &b);
            friend  vector3D operator*(vector3D& a, float&e);
            friend  vector3D operator*( float&e, vector3D&b);
            friend float operator*(vector3D &a, vector3D&b);
            friend bool operator==(vector3D&a, vector3D&b);
            friend bool operator<(vector3D&a, vector3D&b);
            friend bool operator>(vector3D&a, vector3D&b);
             float get_x() { return x;}
             float get_y() {return y;}
             float get_z() {return z;}
};
 istream& operator>>(istream& t,vector3D&a)
{
    t>>a.x;
    t>>a.y;
    t>>a.z;
    return t;
}
ostream& operator<<(ostream&t,vector3D&a)
{
    t<<a.x;
    t<<';';
    t<<a.y;
    t<<';';
    t<<a.z;
    return t;
}
vector3D operator+(vector3D&a, vector3D &b)
{
return vector3D(a.x+b.x,a.y+b.y,a.z+b.z);
}
vector3D operator-(vector3D&a, vector3D &b)
{return vector3D(a.x-b.x,a.y-b.y,a.z-b.z);
}
float operator*(vector3D&a, vector3D& b)
{
    return (a.x*b.x+a.y*b.y+a.z*b.z);
    return (a.x*a.x+a.y*a.y+a.z*a.z);
    return (b.x*b.x+b.y*b.y+b.z*b.z);
}
vector3D operator*(vector3D&a, float&e)
{
    float t=a.x*e;
    float t1=a.y*e;
    float t2=a.z*e;
    return vector3D(t, t1,t2);
}
vector3D operator*( float&e, vector3D& b)
{
    float t=e*b.x;
    float t1=e*b.y;
    float t2=e*b.z;
    return vector3D(t, t1, t2);
}
bool operator==(vector3D&a, vector3D&b)
{
    float q=(sqrt(pow(a.x,2)+pow(a.y,2)+pow(a.z,2)));
    float v=(sqrt(pow(b.x,2)+pow(b.y,2)+pow(b.z,2)));
    return(q==v);
}
bool operator<(vector3D&a, vector3D&b)
{
    float q=(sqrt(pow(a.x,2)+pow(a.y,2)+pow(a.z,2)));
    float v=(sqrt(pow(b.x,2)+pow(b.y,2)+pow(b.z,2)));
    return(q<v);
}
bool operator>(vector3D&a, vector3D&b)
{
    float q=(sqrt(pow(a.x,2)+pow(a.y,2)+pow(a.z,2)));
    float v=(sqrt(pow(b.x,2)+pow(b.y,2)+pow(b.z,2)));
    return(q>v);
}
int main()
{
    vector3D a, b;// êîíñòðóêòîð áåç àðãóìåíòî
    cout<<"Vvedite koordinaty vectora a"<<endl;
    cin>>a;
    cout<<"Vvedite koordinaty vectora b"<<endl;
    cin>>b;
    cout<<"Vector a=("<<a<<")"<<endl;
    cout<<"Vector b=("<<b<<")"<<endl;   vector3D c=a+b;
    cout<<"Summa vectorov=("<<c<<")"<<endl;
    vector3D d=a-b;
    cout<<"Raznost' vectorov=("<<d<<")"<<endl;
    float e=a*b;
    cout<<"Scalarnoe umnogenie ="<<e<<endl;
    float q=sqrt(a*a);
    cout<<"Dlina vectora a="<<q<<endl;
    float v=sqrt(b*b);
    cout<<"Dlina vectora b="<<v<<endl;
    vector3D w=a*e;
    cout<<"Umnogenie vectora a na scalar=("<<w<<")"<<endl;
    vector3D r=e*b;
    cout<<"Umnogenie vectora b na scalar=("<<r<<")"<<endl;
    bool h=(a==b);
    if (a==b) cout<<"Dliny vectorov a=b"<<endl;
    bool n=(a<b);
    if (a<b) cout<<"Dlina vectora a<b"<<endl;
    bool m=(a>b);
    if (a>b) cout<<"Dlina vectora a>b"<<endl;
    return 0;
}
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
15.04.2017, 22:44 11
Николас-А, берешь выражение отсюда и перегружаешь, скажем, оператор %.
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
16.04.2017, 05:42 12
C++
1
2
3
Vector3 operator *(const Vector3 & v1, const Vector & v2){
    return Vector3(v1.x * v2.x, v1.y * v2.y, v1.z * v2.z);
}
тебе это нужно?
0
16.04.2017, 05:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2017, 05:42
Помогаю со студенческими работами здесь

Ошибки в реализации класса Vector3D
Здравствуйте. Помогите дурачку. Создать класс Vector3D. Реализовать: сложение векторов, скалярное...

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени?
На самом деле ничё фантастического я не прошу, ведь: template &lt;class T&gt; class matrix { ...

Класс таблиц баз данных и класс записей в таблице(реляционная таблица). Предусмотреть класс связей между таблицами
Здравствуйте! Никак не могу продумать структуру этой программы. Проходим наследование, но я все...

Класс: Разработать абстрактный класс класс Point для задания координаты...
Всем привет, помогите пожалуйста решить задачу, я уже всю голову сломал, не знаю как решить... ...


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

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

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