Заголовочный файл для работы консолями Содержит себе пространство имён

  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
/*
* Заголовочный файл для работы с консолями. Содержит в себе пространство имён std
* которое, в свою очередь, содержит такие классы, как:
* std::cin - ввод в переменную с клавиатуры.
* std::cout - вывод чего-либо на экран.
* std::endl - символ переноса строки, эквивалент \n. И т.д.
*/
#include <iostream>
/*
* cmath - это cpp версия mtath.h библиотека для математических вычислений, из нее в данной лабе используется sqrt(квадратный корень)
*/
#include <cmath>
/*
* Использование пространства имён std.
* Позволяет нам писать cin, cout, endl... без указания std:: в начале
*/
using namespace std;
/*
* Функция (average), возвращает среднее значение переданного в нее массива
* Возвращаемое значение в формате плавающей точки с двойной точностью (десятичное, с кучей знаков после запятой, короче)
* Принимает как аргумент константный указатель на массив (double const *arr) и его размерность (size_t dimension)
* Константный указатель обозначнает, что функция не может изменять значения массива, а только читать его текущие значения
* size_t обычно используется для индексации массивов и счетчиков циклов. Оно хранится в std::size_t (using namespace std)
* Нормальный программист для индексов массива или цикла напишет size_t dimension, но можешь заменить и на int dimension, на нашем уровне это не влияет ни на что;
*/
double average(double const *arr, size_t dimension) {
double average = 0;
for (int i = 0; i < dimension; ++i) {
average += arr[i];
}
return average / dimension;
}
/*
* Функция (dispersion), возвращает значение дисперсии переданного в нее массива
* Возвращаемое значение в формате плавающей точки с двойной точностью (десятичное, с кучей знаков после запятой, короче)
* Принимает как аргумент константный указатель на массив (double const *arr) и его размерность (size_t dimension)
* Константный указатель обозначнает, что функция не может изменять значения массива, а только читать его текущие значения
* size_t обычно используется для индексации массивов и счетчиков циклов. Оно хранится в std::size_t (using namespace std)
* Нормальный программист для индексов массива или цикла напишет size_t dimension, но можешь заменить и на int dimension, на нашем уровне это не влияет ни на что;
*/
double dispersion(double const *arr, size_t dimension) {
double dispersion = 0; // выделяем память для значения дисперсии
double avg = average(arr, dimension); // вычисляем дисперсию массива (введеной последовательности)
for (int i = 0; i < dimension; i++) { // цикл от 0 до размерности массива (перебор всей введенной последовательность поээлеметно)
dispersion += (arr[i] - avg) * (arr[i] - avg); // на каждой итерации цикла увеличение значения дисперсии на (arr[i] - avg) * (arr[i] - avg)
}
return dispersion / dimension; // функция вернет как результат переменную dispersion разделенную на размерность массива
}
/*
* Функция (deviation), возвращает значение СКО (Среднего квдадратичного отклонения)
* Возвращаемое значение в формате плавающей точки с двойной точностью (десятичное, с кучей знаков после запятой, короче)
* Принимает как аргумент константный указатель на массив (double const *arr) и его размерность (size_t dimension)
* Константный указатель обозначнает, что функция не может изменять значения массива, а только читать его текущие значения
* size_t обычно используется для индексации массивов и счетчиков циклов. Оно хранится в std::size_t (using namespace std)
* Нормальный программист для индексов массива или цикла напишет size_t dimension, но можешь заменить и на int dimension, на нашем уровне это не влияет ни на что;
*/
double deviation(double const *arr, size_t dimension) {
/*
* sqrt - это квадратный корень, это как раз из библиотеки cmath
* sqrt(4) = 2
* sqrt(9) = 3
* и т.д.
* В данном случае, мы ищем квадратный корень от дисперсии заданной последовательности, это и есть СКО
*/
return sqrt(dispersion(arr, dimension));
}
int main() {
size_t dimension; // выделение памяти для размерности массива (можно заменить на int dimension)
cout << "Enter dimension of array: " << endl; // вывод в консоль текста
cin >> dimension; // ввод размерности массива пользователем с клавиатуры
double *arr = new double[dimension]; // выделение памяти для динамического массива данных (arr)
for (int i = 0; i < dimension; ++i) { // цикл от 0 до введенной пользователем размерности
cout << "Enter arr[" << i << "]: " << endl; // вывод в консоль текста
cin >> arr[i]; // поэлементный ввод данных с клавиатуры в массив
}
cout << "Average value: " << average(arr, dimension) << endl; // вывод в консоль среднего значения
cout << "Dispersion value: " << dispersion(arr, dimension) << endl; // вывод в консоль значения дисперсии
cout << "Deviation value: " << deviation(arr, dimension) << endl; // вывод в консоль значения СКО
delete[] arr; // удаление из памяти выделенного динамического массива
return 0;
}