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

Класс "Трехмерный вектор" - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.91
exmahinator
1 / 1 / 0
Регистрация: 20.09.2011
Сообщений: 20
09.10.2011, 17:23     Класс "Трехмерный вектор" #1
Добрый день всем жителям форума! Помогите найти проблему в програме. Вроде и не сложная но я плохо понимаю в програмировании...
Условие : Создать клас Вектор3Д который задаеться троицей координат, в котором должны быть реализированны функции : Инициализация, Ввод, Вывод, перевод в Стринг.
Задачи программы : сумма и разница векторов, скалярное произведение векторов, умножение на скаляр, сравнение векторов, вычисление длины вектора, сравнение длин векторов.
Код :

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
#ifndef _vector3D_H_
#define _vector3D_H_
 
class vector3D{
    public:
    vector3D(int inita=0, int initb=0, int initc=0): a(inita), b(initb), c(initc){};
 
    vector3D operator+(vector3D v2);
    vector3D operator-(vector3D v2);
    vector3D operator*(vector3D v2);
    vector3D operator*(vector3D, double scalar); //скалярное произведение векторов
    vector3D operator%(vector3D v2); //векторное произведение векторов
    vector3D operator^(vector3D v2); //сравнение векторов
    vector3D abs(vector3D); //модуль вектора(длина)
    vector3D operator/(vector3D v2); //сравнение длин векторов
    void show();
 
    private:
    int a;
    int b;
    int c;
 
};
 
#endif
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
#include "vector3D.h"
 
vector3D vector3D::operator+(vector3D v2){
    vector3D vec;
    vec.a=a+v2.a;
    vec.b=b+v2.b;
    vec.c=c+v2.c;
    return vec;
}
 
 
vector3D vector3D::operator-(vector3D v2){
    vector3D vec;
    vec.a=a-v2.a;
    vec.b=b-v2.b;
    vec.c=c-v2.c;
    return vec;
}
 
vector3D vector3D::operator*(vector3D v2){
    vector3D vec;
    vec.a=a*v2.a;
    vec.b=b*v2.b;
    vec.c=c*v2.c;
    return vec;
}
 
 
void vector3D::show(){
    std::cout<<a<<","<<b<<","<<c;
}
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
#include <math.h>
#include <iostream>
#include <sstream>
#include <string.h>
#include "vector3D.h"
#include "vector3D.cpp"
using namespace std;
 
class vector
{
    double x,y,z;
    public:
    vector(double vX=0, float vY=0, float vZ=0) { x=vX; y=vY; z=vZ; } // конструктор
    ~vector ();
    friend vector operator+(vector a, vector b); //сложение векторов
    friend vector operator-(vector a, vector b); //вычитание векторов
    friend vector operator*(vector a, double scalar); //умножение вектора на скаляр
    friend double operator*(vector a, vector b); //скалярное произведение векторов
    friend vector operator%(vector a, vector b); //векторное произведение векторов
    friend vector operator^(vector a, vector b); //сравнение векторов
    friend double abs(vector a); //модуль вектора(длина)
    friend vector operator/(vector a, vector b); //сравнение длин векторов
    void input(void);//ввод
    void output(void);//вЫвод
};
 
vector operator+(vector a, vector b)//перегружаю оператор +
{
    vector temp;
    temp.x = a.x + b.x;
    temp.y = a.y + b.y;
    temp.z = a.z + b.z;
    return temp;
}
 
vector operator-(vector a, vector b)//перегружаю оператор -
{
    vector temp;
    temp.x = a.x - b.x;
    temp.y = a.y - b.y;
    temp.z = a.z - b.z;
    return temp;
}
 
vector operator*(vector a, double scalar)//перегружаю оператор *
{
    vector temp;
    temp.x = a.x * scalar;
    temp.y = a.y * scalar;
    temp.z = a.z * scalar;
    return temp;
}
 
double operator*(vector a, vector b)//перегружаю оператор / для double(для скалярного произведения)
{
    return a.x*b.x + a.y*b.y + a.z*b.z;
}
 
vector operator%(vector a, vector b)//перегружаю оператор % для векторного произведения
{
    vector Ox(1,0,0), Oy(0,1,0), Oz(0,0,1);
    return Ox*(a.y*b.z - a.z*b.y) + Oy*(a.z*b.x - a.x*b.z) + Oz*(a.x*b.y - a.y*b.x);
}
 
double abs(vector a)//вычесление модуля
{
    return sqrt(a.x*a.x + a.y*a.y + a.z*a.z);
}
Ошибки :
1>------ Построение начато: проект: Vektor, Конфигурация: Debug Win32 ------
1> stdafx.cpp
1> Vektor.cpp
1>e:\vektor\vektor\vektor\vektor.cpp(1): warning C4627: #include <math.h>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>e:\vektor\vektor\vektor\vektor.cpp(2): warning C4627: #include <iostream>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>e:\vektor\vektor\vektor\vektor.cpp(3): warning C4627: #include <sstream>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>e:\vektor\vektor\vektor\vektor.cpp(4): warning C4627: #include <string.h>: пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>e:\vektor\vektor\vektor\vektor.cpp(5): warning C4627: #include "vector3D.h": пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>e:\vektor\vektor\vektor\vektor.cpp(6): warning C4627: #include "vector3D.cpp": пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>e:\vektor\vektor\vektor\vektor.cpp(69): fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "StdAfx.h"" в источник.
1> vector3D.cpp
1>e:\vektor\vektor\vektor\vector3d.cpp(2): warning C4627: #include "vector3D.h": пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>e:\vektor\vektor\vektor\vector3d.cpp(33): fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "StdAfx.h"" в источник.
1> Создание кода...
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Сразу напишу - если подключить СтдАФХ то еще больше находит... Кто может - проверте у себя - в чем может быть причина - 2-ю неделю немогу скомпилировать ее...
Програма МайкрософтВижуал 2010

 Комментарий модератора 
Используйте теги форматирования кода
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2011, 17:23     Класс "Трехмерный вектор"
Посмотрите здесь:

C++ Написать класс "вектор на плоскости" заданный в системе декартовых координат
Создайте вектор, хранящий десять строковых значений "zero", "one", ..., "nine" C++
Реализовать класс - "Троичный вектор" C++
C++ Наследуемым классом для комплексного числа объявить класс "радиус-вектор", имеющий данные "длина" и "угол"
C++ Создать класс комплексных чисел и ввести операции: "+", "-", "*", "/".
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.10.2011, 17:26     Класс "Трехмерный вектор" #2
Добавляйте в самое начало stdafx.h и выкладывайте ошибки. Эти ровным счетом ни о чем не говорят.
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 18:28     Класс "Трехмерный вектор" #3
зачем здесь stdafx.h? Это же можно сделать пустым консольным проектом, галочку "пустой проект" просто ставим при создании проекта и не мучаемся предкомпилированными заголовками

exmahinator, форматируйте код тегами. И второе - зачем вы 2 раза написали одно и тоже про class vector3D? Проблема не в перегрузке операторов в виде методов класса или дружественности, а в том, что либо библиотеки не подключаете, либо проект не того типа создаете
exmahinator
1 / 1 / 0
Регистрация: 20.09.2011
Сообщений: 20
09.10.2011, 18:57  [ТС]     Класс "Трехмерный вектор" #4
Удалите ту другую тему - у меня даже ссылки нету где я ее делал... Это будет оригиналом.
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 19:27     Класс "Трехмерный вектор" #5
Я не про другую тему, а про ваш первый пост - там 2 раза класс вектор описан - один раз с операторами, реализованными как дружественные функции, другой раз - операторы являются членами класса.

Создайте чистый консольный проект без предкомпилируемых заголовков, выберите один из вариантов своего класса, откомпилируйте и скажите, какие ошибки. Тогда и будем разбираться, а то сейчас вообще ничего не понятно
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.10.2011, 00:46     Класс "Трехмерный вектор" #6
aeshes, В одном случае описан vector. В другом vector3D. В файл описания вектора включается файл vector3d.h, и cpp на кой-то фиг.
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
10.10.2011, 01:01     Класс "Трехмерный вектор" #7
ForEveR, ну вот и я о том же, что в одной программе у ТС зачем-то 2 почти одинаковых класса вектора. А нужен же-то ему один в итоге
exmahinator
1 / 1 / 0
Регистрация: 20.09.2011
Сообщений: 20
10.10.2011, 15:46  [ТС]     Класс "Трехмерный вектор" #8
ОО Какой именно? я незнаю как начало сделать что-бы небыло лишних файлов - лишь запутаюсь в них...
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
10.10.2011, 15:58     Класс "Трехмерный вектор" #9
exmahinator, а какой вам больше нравится? берите первые два - один vector3d.h, другой vector3d.cpp, делайте файл с функцией main(), где создайте один экземпляр своего класса
И начинайте исправлять ошибки
exmahinator
1 / 1 / 0
Регистрация: 20.09.2011
Сообщений: 20
11.10.2011, 01:19  [ТС]     Класс "Трехмерный вектор" #10
Эмм... Аммм... я непонял... точнее КАК это сделать?
Я даже незнаю какой нужнее...
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
11.10.2011, 10:55     Класс "Трехмерный вектор" #11
exmahinator, создаете в своей среде программирования (у вас вроде Visual Studio?) консольный Win32 проект, отмечаете при создании галочку "пустой проект". Создаете в проекте файл vector3D.h, туда копируете первый кусок кода из своего первого сообщения, затем файл vector3D.cpp - туда второй кусок кода, затем файл main.cpp, в который включаете vector3D.h и пишите функцию main, в которой создаете экземпляр своего класса:
vector3D v1;
v1.show();
Компилируете и смотрите на ошибки, если не разобрались, как исправить ошибку, то код программы с функцией main выкладываете сюда, и описание ошибки из своей среды программирования тоже
exmahinator
1 / 1 / 0
Регистрация: 20.09.2011
Сообщений: 20
30.10.2011, 17:48  [ТС]     Класс "Трехмерный вектор" #12
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
#include <windows.h>
#include <math.h>
#include <iostream>
#define SIZE_N 2
#define SIZE_VECTOR 3
 
using namespace std;
 
class Vector {
private:
  int size;
  double *mas;
public:
  Vector(int N);//Конструктор класса
 ~Vector();     //Деструктор класса
 friend Vector& operator+(const  Vector &v1,const  Vector &v2);//Сложение векторов
 friend Vector& operator-(const  Vector &v1,const  Vector &v2);//Вычитание векторов
 friend Vector& operator*(const  Vector &v1,const  Vector &v2);//Умножение векторов
 friend Vector& operator*(const  Vector &v1,double c);//Умножение векторо на число
 friend Vector& operator*(double c,const  Vector &v1);//Умножение числа на вектор
 
 friend istream& operator>>(istream &in,const Vector &V); //Ввод параметров вектора
 friend ostream& operator<<(ostream &out,const Vector &V); //Вывод параметров вектора
  };
 
// -----Конструктор, количество элементов вектора задайтся параметром------
Vector::Vector(int N)
  {
  size=N;
  mas=new double[N];
  };
// ------Деструктор класса Vector--------
Vector::~Vector()
  {
  delete []mas;
  };
//-----Ввод параметров вектора------
 istream& operator>>(istream &in,const Vector &V)
  {
  int s=V.size;
 
  for (int i=0;i<V.size;i++)
  in >> V.mas[i];
  return in;
  }
//------Вывод параметров вектора--------
ostream& operator<<(ostream &out,const Vector &V)
  { out<<'(';
  for (int i=0;i<V.size-1;i++)
  out<<V.mas[i]<<';';
  out<<V.mas[V.size-2]<<')';
  return out;
  }
//-----Сложение векторов-----
Vector& operator+(const Vector &v1,const Vector &v2)
  {
  Vector *V=new Vector(v1.size);
  for (int i=0;i<v1.size;i++)
    {
    V->mas[i]=v1.mas[i]+v2.mas[i];
    }
  return *V;
  }
//----Вычитание векторов-------
Vector& operator-(const Vector &v1,const Vector &v2)
  {
  Vector *V;
  V=new Vector(v1.size);
  for (int i=0;i<v1.size;i++)
    {
    V->mas[i]=v1.mas[i]-v2.mas[i];
    }
  return *V;
  }
//-----Умножениие векторов----------
Vector& operator*(const Vector &v1,const Vector &v2)
  {
  Vector *V;
  V=new Vector(v1.size);
  for (int i=0;i<v1.size;i++)
    {
    V->mas[i]=v1.mas[i]*v2.mas[i];
    }
  return *V;
  }
//-------Умножение вектора на число------
Vector& operator*(const Vector &v1,double c)
  {
  Vector *V;
  V=new Vector(v1.size);
  for (int i=0;i<v1.size;i++)
    {
    V->mas[i]=v1.mas[i]*c;
    }
  return *V;
  }
//-----Умножение числа на вектор-----
 Vector& operator*(double c,const Vector &v1)
  {
  Vector *V;
  V=new Vector(v1.size);
  for (int i=0;i<v1.size;i++)
    {
    V->mas[i]=v1.mas[i]*c;
    }
  return *V;
  }
 
 
int main(int argc, char* argv[]) {
  SetConsoleOutputCP(1251);
  Vector A=Vector(SIZE_VECTOR);
  Vector B=Vector(SIZE_VECTOR);
  Vector C=Vector(SIZE_VECTOR);
  cout <<"Введи "<<SIZE_VECTOR<< " параметра вектора\n";;
  cin >> A;
  cout <<"Введи "<<SIZE_VECTOR<< " параметра вектора\n";;
  cin >> B;
  C=A+B;
  cout << "A= "<< A << " B= "<<B;
  cout << "C=A+B= " << C <<endl;
  cout << "A*B= "<< A*B <<endl;
  cout << "B*5= "<< B*5 << endl;
  cout << "3*A= "<<3*A << endl;
  system("PAUSE");
  return 0;
  }
Ошибки :
using namespace std;
#include <iostream>
Для всех выходных данных обновления не требуется.
1> Drogozuk.cpp
1>c:\program files\microsoft visual studio 10.0\vc\include\xlocnum(173): fatal error C1060: компилятору не хватает размера кучи
1> c:\program files\microsoft visual studio 10.0\vc\include\xlocnum(173): при компиляции функции-члена "std::string std::numpunct<_Elem>::do_grouping(void) const" класса шаблон
1> with
1> [
1> _Elem=wchar_t
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\xlocnum(1590): см. ссылку на создание экземпляров класса шаблон при компиляции "std::numpunct<_Elem>"
1> with
1> [
1> _Elem=wchar_t
1> ]
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:04.97
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Добавлено через 1 минуту
Это я взял слепил из 3-х функций :СРР, .h и main один документ - так поидее меньше проблем будет, поскольку в 1 файле все они а не в 3-х различных...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2015, 15:11     Класс "Трехмерный вектор"
Еще ссылки по теме:

Нужно разработать класс "вектор" и реализовать операцию векторного умножения векторов C++
C++ Нужно реализовать класс "вектор" с конструкторами, которые позволяют создать нулевой вектор и вектор с произвольным кол-во элементов.
C++ Класс "Вектор", меню для демонстрации его возможностей

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

Или воспользуйтесь поиском по форуму:
denfox_pro
0 / 1 / 0
Регистрация: 30.10.2012
Сообщений: 113
22.02.2015, 15:11     Класс "Трехмерный вектор" #13
на сбилдере 6 работает отлично, и без ошибок.
Yandex
Объявления
22.02.2015, 15:11     Класс "Трехмерный вектор"
Ответ Создать тему
Опции темы

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