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

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

11.04.2013, 00:10. Показов 860. Ответов 3
Метки нет (Все метки)

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
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2013, 00:10
Ответы с готовыми решениями:

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

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

Разъяснение кода
Можете объяснить что здесь вызываеться и использується namespace PREDPR { class Program ...

Необходимо разъяснение
Товарищи, у меня есть вопрос такого плана, мне необходимо чтобы программа перехватывала нажатие...

3
244 / 245 / 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
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
244 / 245 / 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
11.04.2013, 17:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2013, 17:26
Помогаю со студенческими работами здесь

Разъяснение кода
Добрый день! Подскажите, что делает вот этот код css: .main &gt; div::before, .main &gt; div:hover ~...

Разъяснение GUID
Добрый день! Для того что бы понять, на сколько «медленнее» работать с GUID, создал три таблицы,...

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

Разъяснение новичку!
number = 23 running = True while running: guess = int(input('Введите целое число : ')) ...


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

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

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