Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

11.04.2013, 00:10. Просмотров 425. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Разъяснение по коду (C++):

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

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

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

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

Разъяснение алгоритмов задачи о рюкзаке для новичков - C++
Есть несколько алгоритмов решения задачи о рюкзаке. Не могли бы вы написать комментарии к ним объясняющие какая процедура для чего нужна?...

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

3
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;
};

Если есть вопросы, спрашивайте
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 / 20
Регистрация: 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
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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