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
| #include <iostream>
#include <cstdlib>
using namespace std;
#define STEP 77 // шаг последовательности
#define BEGIN -103 // начальное значение последовательности
// передаем в функцию случайное число ( исходное для проверки ),начальное значение, шаг
int round77( int value_source, int value_begin, int step ) {
// для уравновешивания отнимаем от исходного числа начальное значение, получаем текущее значение
int value_current = value_source - value_begin;
int value_result; // для хранения результата функции
// если текущее значение нацело делится на шаг, то исходное значение округлять не нужно
if ( !( value_current % step ) )
return value_source; // его мы и вернем
else { // а если не делится нацело
// вычисляем между какими целыми числами находится результат деления текущего значения на шаг
int koef_first = value_current / step;
int koef_last = koef_first + 1;
// вычисляем между какими числами последовательности находится наше случайное число
int round_first = step * koef_first + value_begin;
int round_last = step * koef_last + value_begin;
// вычисляем к какому из чисел последовательности ближе наше случайное число
if ( abs( round_first - value_source )
< abs( round_last - value_source ) )
value_result = round_first;
else
value_result = round_last;
}
return value_result; //и возвращаем это число
}
int main() {
cout << "Для значения 167 " << round77( 167, BEGIN, STEP ) << endl;
cout << "Для значения 166 " << round77( 166, BEGIN, STEP ) << endl;
cout << "Для значения 32 " << round77( 32, BEGIN, STEP ) << endl;
cout << "Для значения 200 " << round77( 200, BEGIN, STEP ) << endl;
cout << "Для значения 263 " << round77( 263, BEGIN, STEP ) << endl;
cout << "Для значения 128 " << round77( 128, BEGIN, STEP ) << endl;
return 0;
} |