Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ensaid
3 / 3 / 0
Регистрация: 06.11.2012
Сообщений: 62
1

Разъяснение по коду

11.04.2013, 00:10. Просмотров 441. Ответов 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
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
#include <cmath>
#include <iostream>
#include <iomanip>
 
const double EPSILON = 0.00001;
 
class Vector {
 public:
  Vector() : x(0), y(0), z(0), length(0) {}
  Vector(const double &x, const double &y, const double &z)
    : x(x), y(y), z(z), length(0) {
    length = sqrt(x * x + y * y + z * z);
  }
  const double &getX() const { return x; }
  const double &getY() const { return y; }
  const double &getZ() const { return z; }
  const double &getLength() const { return length; }
  Vector getNormalized() const {
    return Vector(x / length, y / length, z / length);
  }
  bool isZero() const {
    return getX() < EPSILON && getY() < EPSILON && getZ() < EPSILON;
  }
 private:
  double x, y, z;
  double length;
};
 
std::ostream &operator<<(std::ostream &stream, const Vector &vector) {
  return stream << std::fixed << std::setprecision(4) << "[" <<
    vector.getX() << ";" << vector.getY() << ";" <<
    vector.getZ() << "]";
};
 
bool operator==(const Vector &a, const Vector &b) {
  return (fabs(a.getX() - b.getX()) < EPSILON ) &&
    (fabs(a.getY() - b.getY()) < EPSILON ) &&
    (fabs(a.getZ() - b.getZ()) < EPSILON );
};
 
Vector operator+(const Vector &a, const Vector &b) {
  return Vector(a.getX() + b.getX(), a.getY() + b.getY(),
    a.getZ() + b.getZ());
}
 
Vector operator-(const Vector &a) {
  return Vector(-a.getX(), -a.getY(), -a.getZ());
}
 
Vector operator-(const Vector &a, const Vector &b) {
  return Vector(a.getX() - b.getX(), a.getY() - b.getY(),
    a.getZ() - b.getZ());
}
 
double operator%(const Vector &a, const Vector &b) {
  return a.getX() * b.getX() + a.getY() * b.getY() + a.getZ() * b.getZ();
}
 
Vector operator*(const Vector &a, const Vector &b) {
  return Vector(a.getY() * b.getZ() - a.getZ() * b.getY(),
    a.getZ() * b.getX() - a.getX() * b.getZ(),
    a.getX() * b.getY() - a.getY() * b.getX());
}
 
bool operator||(const Vector &a, const Vector &b) {
  return a.isZero() || b.isZero() || (a * b).isZero() ||
    (fabs(a.getX() / b.getX() - a.getY() / b.getY()) < EPSILON &&
    fabs(a.getY() / b.getY() - a.getZ() / b.getZ()) < EPSILON);
};
 
int main(int argc, char **argv) {
  Vector a(2, 3, 1), b(0, -1, 5), c(4, 6, 2);
  std::cout << "(" << a << " + " << b << ") x " << c << " = " <<
    ((a + b) * c) << std::endl;
  std::cout << "(" << a << " + " << b << ") * " << c << " = " <<
    ((a + b) % c) << std::endl;
  std::cout << a << " * " << b << " = " <<
    (a % b) << std::endl;
  std::cout << a << " is " << ((a || b) ? "" : "not ") <<
    "collinear to " << b << std::endl;
  std::cout << a << " is " << ((a || c) ? "" : "not ") <<
    "collinear to " << c << std::endl;
  return 0;
};


Дело в том, что я понятия не имею, что означает большая часть программы, примерно около 80%, т.к. пока сильно не хватает знаний, нашел программу здесь же на киберфоруме.
Может ли кто-то объяснить мне эту программу практически построчно? т.е. к кажой строке кода написать краткий комментарий, что она делает?

За мной не заржавеет.
Может, кто-то помочь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2013, 00:10
Ответы с готовыми решениями:

Разъяснение float f = 1.2F;
Вчера читал статью про C++ и встретил код, написанный следующим методом float f...

Разъяснение кода
Доброго времени суток, такая проблема, надеюсь поможете безвозмездно. Имеется...

Разъяснение по приоритетам операций С++
#include &lt;iostream&gt; using namespace std; int main() { int a=2; int...

Разъяснение работы цикла while()
Всем добрый день. Я начинающий программист, да и к тому же учусь на Java. А тут...

Реализовать на С++ код аналогичный коду приведенному на JavaScript коду
Кто знает JavaScript подскажите, пожалуйста как лучше реализовать этот код на...

3
metaluga145
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
11.04.2013, 00:27 2
Это класс геометрического вектора.
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
#include <cmath>
#include <iostream>
#include <iomanip>
 
const double EPSILON = 0.00001;
 
class Vector {
 public:
  Vector() : x(0), y(0), z(0), length(0) {} //конструктор по умолчанию(создает вектор с координатами (0,0,0),если не задано других
  Vector(const double &x, const double &y, const double &z)//конструктор,который принимает начальные координаты вектора
    : x(x), y(y), z(z), length(0) {
    length = sqrt(x * x + y * y + z * z);
  }
  const double &getX() const { return x; }//функция,которая возвращает координату х
  const double &getY() const { return y; }//функция,которая возвращает координату у
  const double &getZ() const { return z; }//функция,которая возвращает координату z
  const double &getLength() const { return length; }////функция,которая возвращает координату длину вектора
  Vector getNormalized() const {
    return Vector(x / length, y / length, z / length);
  }//функция,которая возвращает нормальный вектор
  bool isZero() const {
    return getX() < EPSILON && getY() < EPSILON && getZ() < EPSILON;
  }//возвращает правду,если вектор находиться в кубике размером EPSILON
 private:
  double x, y, z;//координаты вектора
  double length;//длинна вектора
};
 
std::ostream &operator<<(std::ostream &stream, const Vector &vector) {
  return stream << std::fixed << std::setprecision(4) << "[" <<
    vector.getX() << ";" << vector.getY() << ";" <<
    vector.getZ() << "]";
};//перегруженный оператор вывода, выводит координаты вектора с точностью 4 знака после запятой. 
 
bool operator==(const Vector &a, const Vector &b) {
  return (fabs(a.getX() - b.getX()) < EPSILON ) &&
    (fabs(a.getY() - b.getY()) < EPSILON ) &&
    (fabs(a.getZ() - b.getZ()) < EPSILON );
};//перегруженный оператор присваивания
 
Vector operator+(const Vector &a, const Vector &b) {
  return Vector(a.getX() + b.getX(), a.getY() + b.getY(),
    a.getZ() + b.getZ());
}//оператор суммирования, возвращает вектор,равный сумме аргументов
 
Vector operator-(const Vector &a) {
  return Vector(-a.getX(), -a.getY(), -a.getZ());
}//оператор вычитания. 
 
Vector operator-(const Vector &a, const Vector &b) {
  return Vector(a.getX() - b.getX(), a.getY() - b.getY(),
    a.getZ() - b.getZ());
}//тоже оператор вычитания. 
 
double operator%(const Vector &a, const Vector &b) {
  return a.getX() * b.getX() + a.getY() * b.getY() + a.getZ() * b.getZ();
}оператор скалярного умножения
 
Vector operator*(const Vector &a, const Vector &b) {
  return Vector(a.getY() * b.getZ() - a.getZ() * b.getY(),
    a.getZ() * b.getX() - a.getX() * b.getZ(),
    a.getX() * b.getY() - a.getY() * b.getX());
}//векторное умножение
 
bool operator||(const Vector &a, const Vector &b) {
  return a.isZero() || b.isZero() || (a * b).isZero() ||
    (fabs(a.getX() / b.getX() - a.getY() / b.getY()) < EPSILON &&
    fabs(a.getY() / b.getY() - a.getZ() / b.getZ()) < EPSILON);
};
 
int main(int argc, char **argv) {
  Vector a(2, 3, 1), b(0, -1, 5), c(4, 6, 2);
  std::cout << "(" << a << " + " << b << ") x " << c << " = " <<
    ((a + b) * c) << std::endl;
  std::cout << "(" << a << " + " << b << ") * " << c << " = " <<
    ((a + b) % c) << std::endl;
  std::cout << a << " * " << b << " = " <<
    (a % b) << std::endl;
  std::cout << a << " is " << ((a || b) ? "" : "not ") <<
    "collinear to " << b << std::endl;
  std::cout << a << " is " << ((a || c) ? "" : "not ") <<
    "collinear to " << c << std::endl;
  return 0;
};

Если есть вопросы, спрашивайте
1
ensaid
3 / 3 / 0
Регистрация: 06.11.2012
Сообщений: 62
11.04.2013, 00:58  [ТС] 3
C++
1
2
3
4
5
bool operator||(const Vector &a, const Vector &b) {
  return a.isZero() || b.isZero() || (a * b).isZero() ||
    (fabs(a.getX() / b.getX() - a.getY() / b.getY()) < EPSILON &&
    fabs(a.getY() / b.getY() - a.getZ() / b.getZ()) < EPSILON);
};
как используются эти строчки? не совсем понял

C++
1
const double EPSILON = 0.00001;
почему задается именно такая размерность?
0
metaluga145
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
11.04.2013, 17:26 4
Цитата Сообщение от ensaid Посмотреть сообщение
как используются эти строчки? не совсем понял
Прошу прощения. Не закоментировал эту строку. Это оператор,который возвращает правду, если вектора параллельны.


Цитата Сообщение от ensaid Посмотреть сообщение
почему задается именно такая размерность?
Потому что точность вывода задана 10^(-4). Все,что попадает в квадрат со стороной 10^(-5), можно приблизительно считать 0. Вы можете задать другую точность. Точность вывода задается так:
C++
1
std::setprecision(4)
То есть, сейчас после запятой всегда будет стоять 4 знака.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2013, 17:26

Разъяснение алгоритмов задачи о рюкзаке для новичков
Есть несколько алгоритмов решения задачи о рюкзаке. Не могли бы вы написать...

Задача (разъяснение) в алгоритм (программа, используя базовый и производный классы, создавала массив объектов типа производного класса)
Задача на наследование классов, базовый класс - &quot;люди&quot;, производный -...

Разъяснение
Ребят, может кто-то сможет объяснить новичку в данном языке программирования,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru