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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ensaid
3 / 3 / 0
Регистрация: 06.11.2012
Сообщений: 62
#1

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

11.04.2013, 00:10. Просмотров 387. Ответов 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%, т.к. пока сильно не хватает знаний, нашел программу здесь же на киберфоруме.
Может ли кто-то объяснить мне эту программу практически построчно? т.е. к кажой строке кода написать краткий комментарий, что она делает?

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

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

Разъяснение кода - C++
Доброго времени суток, такая проблема, надеюсь поможете безвозмездно. Имеется программа &quot;шифрования&quot; Хочется чтобы спецы объяснили сам...

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

Уточнение по коду - C++
Что возвращает эта строка, если массивы double значений: s = s | s]; Добавлено через 1 час 8 минут Я прошу это уже 3 дня, что,...

Комментарии к коду - C++
Пожалуйста, помогите понять как работает код - поставить комментарии к строкам. #include &lt;iostream&gt; #include &lt;fstream&gt; #include...

Вопрос по коду - C++
Здравствуйте ! Есть код односвязного списка, но мне не очень понятны некоторые моменты. Буду очень благодарен опытным людям которые...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
metaluga145
243 / 244 / 20
Регистрация: 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;
};

Если есть вопросы, спрашивайте
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;
почему задается именно такая размерность?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2013, 17:26     Разъяснение по коду
Еще ссылки по теме:

объяснения к коду - C++
Помогите объяснениями к коду(хотя бы через несколько строчек напишите коментарии) #include &quot;stdafx.h&quot; #include &lt;time.h&gt; #include...

Комментарий к коду - C++
Ребят,помогите кто нибудь вот программа: #include &lt;iostream&gt; using namespace std; void main() { int n; int factorial=1; ...

объяснения по коду - C++
#include &quot;std_lib_facilities.h&quot; int main() { string previous = &quot; &quot;; string current; while (cin&gt;&gt;current) { if...

коментарий к коду.. - C++
Помогите пожалуйста у меня есть программа вот она: #include &lt;iostream&gt; int rev(int rhs) { int res = 0; while(rhs) { res...


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

Или воспользуйтесь поиском по форуму:
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
11.04.2013, 17:26     Разъяснение по коду #4
Цитата Сообщение от ensaid Посмотреть сообщение
как используются эти строчки? не совсем понял
Прошу прощения. Не закоментировал эту строку. Это оператор,который возвращает правду, если вектора параллельны.


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

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