Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
4 / 4 / 2
Регистрация: 23.02.2014
Сообщений: 142
.NET 4.x

Вычислить сумму ряда и значение функции

24.02.2014, 20:42. Показов 4519. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Попалось мне такое задание:
На заданном отрезке [a, b] вычислить значение сумм ряда с заданной точностью, а так же вычислить значение функции. Количество точек произвольное.
https://www.cyberforum.ru/cgi-bin/latex.cgi?S=x\ \sin \frac{\Pi }{4}+{x}^{2}\sin 2\frac{\Pi }{4}+...+{x}^{n}\sin n\frac{\Pi }{4}(1)
https://www.cyberforum.ru/cgi-bin/latex.cgi?Y=\frac{x\sin \frac{\Pi }{4}}{1-2x\cos \frac{\Pi }{4}+{x}^{2}}(2)
Сделал что смог, а дальше? И куда мне, извиняюсь за выражение, впихнуть формулу (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
            // Объявление переменных
            double s = 0, n = 0, x = 0, Sin_NPi4 = 0;
 
            // Сколько раз запрашивать переменную Х, то есть сколько раз должен выполняться цикл
            Console.WriteLine("Укажите количество переменных");
            Console.Write("N = ");
            n = double.Parse(Console.ReadLine());
            Console.WriteLine();
            Console.WriteLine("Теперь будут запрошены неизвестные");
 
            // Цикл с запросом переменной Х, А ТАКЖЕ подсчётом элемента и сложением элементов (Всё после А ТАКЖЕ требует формула заданная в моём варианте)
            for (int i = 1; i <= n; i++)
            {
                // Выводит ссобщение "Х=" с номером Х (Х1=, Х2= и тд)
                Console.Write("Х"+i+" = ");
                // Запрашивает Х
                x = double.Parse(Console.ReadLine());
                // Вычисление элемента
                    // Вычисление sin элемента
                    Sin_NPi4 = Math.Sin(n*Math.PI/4);
                    // Вычисление x^n
                    x = Math.Pow(x, n);
                // Вычисление суммы элемента
                s = s + (x * Sin_NPi4);
            }
 
 
 
 
 
 
            Console.WriteLine();
            Console.WriteLine("Ответ: " + s);
            Console.ReadKey();
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.02.2014, 20:42
Ответы с готовыми решениями:

Вычислить значение суммы бесконечного ряда с точностью 10-4 для x=0,70. Определить число членов ряда, вошедших в сумму
помогите плиз мозг уже закипел тему вообше не понял по си шарп

Не используя стандартные функции (за исключением Abs), вычислить сумму n первых членов ряда
Не используя стандартные функции (за исключением Abs), вычислить сумму n первых членов следующего ряда (n вводится с клавиатуры). ...

Вычислить и вывести в виде таблицы значение функции, заданной с помощью ряда Тейлора
Помогите я всё не понимаю Вычислить и вывести в виде таблицы значение функции, заданной с помощью ряда Тейлора, на интервале от Xнач до...

40
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.02.2014, 22:32
Студворк — интернет-сервис помощи студентам
KFU4132133, модуль по определению это расстояние. Модуль числа - это то, какое расстояние от него до нуля Даже в определении модуля содержится расстояние.

А верить нельзя никому. Нарисуйте числовую прямую от -5 до 5 и легко поймете, что я прав
0
4 / 4 / 2
Регистрация: 23.02.2014
Сообщений: 142
26.02.2014, 22:36  [ТС]
Psilon,

Не по теме:

Цитата Сообщение от Psilon Посмотреть сообщение
А верить нельзя никому
Я уже давно разочаровался в людях - компьютеры - самое то - так что не беспокойтесь)

0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.02.2014, 22:43
KFU4132133, люди бывают разные. Как и компьютеры. Например
C#
1
2
var x = ...
Console.WriteLine(x == x);
не всегда будет выводить TRUE

А например
C#
1
2
3
object x = new /* fill in code here */;
object y = new /* fill in code here */;
Console.WriteLine(x == y);
не всегда будет выводить false. То есть в первом случае один и тот же объект будет не равен сам себе, а во втором два других разных объекта будут при сравнивании по ссылки говорить, что они равны. Такие дела

Добавлено через 40 секунд
Конечно, это уже тонкости языка, немного не ваш уровень, но сам факт, что язык не всегда делает то, что вы хотите, иллюстрирует факт, что не надо доверять компьютеру на 100%
0
4 / 4 / 2
Регистрация: 23.02.2014
Сообщений: 142
26.02.2014, 22:55  [ТС]
Psilon,

Не по теме:

Немного читал про лампы и транзисторы относительно звука - лампы дают больше помех чем транзисторы - тогда - в то время когда люди лампы, то компьютеры транзисторы - и в большей степени это уже идёт сообразительность компьютера и языка программирования, сам компьютер не будет виноват)

ничего - доберёмся и до этого уровня)))
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.02.2014, 22:58
KFU4132133, вообще ничего не понял...
0
4 / 4 / 2
Регистрация: 23.02.2014
Сообщений: 142
26.02.2014, 23:05  [ТС]
Psilon, я имел ввиду триодные лампы, ну и ладно тогда - не суть важно) - просто бессмысленная беседа о бессмысленном) - и если модераторы увидят - мне предупреждение наверняка будет - это уже слив местами)
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.02.2014, 23:07

Не по теме:

KFU4132133, перечитайте фразу с утра на свежую голову, если модеры не успеют потереть - поймете. что я имел ввиду



На этом предлагаю закрыть тему, все обсудили, что можно, думаю
0
26.02.2014, 23:14  [ТС]

Не по теме:

Кстати я так и не вдупляю - с первого моего знакомства с языками программирования - зачем вообще нужны констаны - разве нельзя использовать переменную чем писать
константа а = 5;
просто дать две переменные
целые в = 4, а = 5;
а потом уже сравнивать например в < a?
в итоге будет ведь тоже самое?, просто не присваивать переменной а новые значения и она на протяжении всей программы будет = 5.
Или я просто недошёл до тех моментов в программировании - когда кроме констант больше ничего использовать не получиться?
И ещё один вопрос - я успел глянуть один урок ПХП - и там переменную можно было обнулить $blabla = null; - кажется так - а можно такое делать в C# - или в этом нет необходимости?

0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
27.02.2014, 00:39
Ну например, так выглядит метод double.IsNaN
C#
1
2
3
4
5
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success), SecuritySafeCritical, __DynamicallyInvokable]
public static unsafe bool IsNaN(double d)
{
    return ((*(((long*) &d)) & 0x7fffffffffffffffL) > 0x7ff0000000000000L);
}
слабо ответить, что тут происходит? Лично мне было слабо, пока я не полазил по куче доков и на stackoverflow. А это метод из одной строки. А теперь представьте, Когда на 10 строчках подряд творится подобный ад.

Или вот например внутренности string.Compare:
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
  private static unsafe int CompareOrdinalHelper(string strA, string strB)
    {
      int num1 = Math.Min(strA.Length, strB.Length);
      int num2 = -1;
      fixed (char* chPtr1 = &strA.m_firstChar)
        fixed (char* chPtr2 = &strB.m_firstChar)
        {
          char* chPtr3 = chPtr1;
          char* chPtr4 = chPtr2;
          while (num1 >= 10)
          {
            if (*(int*) chPtr3 != *(int*) chPtr4)
            {
              num2 = 0;
              break;
            }
            else if (*(int*) (chPtr3 + 2) != *(int*) (chPtr4 + 2))
            {
              num2 = 2;
              break;
            }
            else if (*(int*) (chPtr3 + 4) != *(int*) (chPtr4 + 4))
            {
              num2 = 4;
              break;
            }
            else if (*(int*) (chPtr3 + 6) != *(int*) (chPtr4 + 6))
            {
              num2 = 6;
              break;
            }
            else if (*(int*) (chPtr3 + 8) != *(int*) (chPtr4 + 8))
            {
              num2 = 8;
              break;
            }
            else
            {
              chPtr3 += 10;
              chPtr4 += 10;
              num1 -= 10;
            }
          }
          if (num2 != -1)
          {
            char* chPtr5 = chPtr3 + num2;
            char* chPtr6 = chPtr4 + num2;
            int num3;
            if ((num3 = (int) *chPtr5 - (int) *chPtr6) != 0)
              return num3;
            else
              return (int) chPtr5[1] - (int) chPtr6[1];
          }
          else
          {
            while (num1 > 0 && *(int*) chPtr3 == *(int*) chPtr4)
            {
              chPtr3 += 2;
              chPtr4 += 2;
              num1 -= 2;
            }
            if (num1 <= 0)
              return strA.Length - strB.Length;
            int num3;
            if ((num3 = (int) *chPtr3 - (int) *chPtr4) != 0)
              return num3;
            else
              return (int) chPtr3[1] - (int) chPtr4[1];
          }
        }
    }
при декомпиляции теряются имена локальных переменных и констант. И почему там +2, -2, +4 и так далее хрен разберешь. Хотя в оригинале были константы, просто после декомпиляции они не сохранились.

А с константами было бы если не ясно как божий день, то хотя бы намного понятнее.

Добавлено через 1 минуту
KFU4132133, А вот похожий треш из С, только он еще жестче
C
1
2
if (cmd[1] == RESET) // если принятая команда RESET
{((void(*)(void))0)();} // что-то из черной магии
Добавлено через 7 минут
KFU4132133, ну а простейший пример такой: представьте, что вы проектируете комнату, и она у вас получается размерами 10х10х10. Ну ладно. У вас много тысяч строчек кода, везде этот домик используется. Везде проверки типа if (width > 10) ...

И вот однажды понадобилось изменить ширину дома с 10 до 15... А теперь вопрос - КАК? Если бы вы объявили константу, достаточно было бы поменять одну цифру. А так вам придется проходить по ВСЕМУ коду, везде смотреть, та ли это десятка, что от ширины, или это может быть проверка с высотой, а может быть, длиной, или это вообще не к комнате относится, а к числу квартир на этаже... Не говоря про волшебные константы. Число 3.1416 вы может и знаете, а вот 2.718281828... - может и нет. А уж про число 0.57721 почти наверняка не знаете. Ну а даже если вы их знаете, то представьте себе, что понадобилась константа https://www.cyberforum.ru/cgi-bin/latex.cgi?2\pi e. Она равна 17.079468. И теперь вы видите в коде
C#
1
for(double d = 0; d < 17.079468; d += 0.577721)
и как вы с этим будете жить? А теперь возьмем такой код?
C#
1
for(double d = 0; d < 2*Math.Pi*Math.E; d += EilerConst)
может все равно придется разбираться в алгоритме, но не придется гадать, почему изменив третью цифру после запятой программа внезапно перестала работать...
1
4 / 4 / 2
Регистрация: 23.02.2014
Сообщений: 142
08.03.2014, 12:28  [ТС]
Psilon, ладно-ладно - успокойтесь)))), у меня другой вопрос:
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
static double S(double x, double precision)
        {
            double result = 0, lastresult;
            double a = 1;
            int n = 0;
            do
            {
                lastresult = result;
                n++;
                a *= x;
                result += a * Math.Sin(n * Math.PI / 4);
            } while (Math.Abs(result - lastresult) >= precision);
            return result;
        }
 
        static double Y(double x)
        {
            return x * Math.Sin(Math.PI / 4) / (1 - 2 * x * Math.Cos(Math.PI / 4) + x * x);
        }
 
        static void Main()
        {
            Console.Write("Точка начала отрезка = ");
            double a = double.Parse(Console.ReadLine());
            Console.Write("Точка конца отрезка = ");
            double b = double.Parse(Console.ReadLine());
            Console.Write("Шаг по отрезку = ");
            double pace = double.Parse(Console.ReadLine());
            Console.Write("Точность: ");
            double pr = double.Parse(Console.ReadLine());
 
            Console.WriteLine();
            Console.WriteLine();
 
            double h = b - a;
 
            for (double i = a; i <= h; i+=pace)
            {
                Console.WriteLine("Считаю для Х = "+i);
                Console.WriteLine("S = " + S(i, pr));
                Console.WriteLine("Y = " + Y(i));
                Console.WriteLine();
            }
 
            Console.ReadKey();
        }
S выдаёт иногда NaN (х = 164), а иногда вопросительный знак (х = 167) - почему нан, когда будет 41П, это же всё равно что 1П+20 полных оборотов, а знак вопроса вообще непонятен...
---
и вы говорили что-то вроде:
приучайтесь сразу форматировать вывод, а не + использовать для строк
подробнее - это что-то вроде сколько символов выводить в ответе?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.03.2014, 12:35
KFU4132133,
подробнее - это что-то вроде сколько символов выводить в ответе?
это в смысле не писать + для строк.
что касается NaN - ставьте точки остановка в функции и смотрите, NaN это результат деления на ноль, вычитание бесконечностей и прочие интересные штуки.
0
4 / 4 / 2
Регистрация: 23.02.2014
Сообщений: 142
08.03.2014, 12:45  [ТС]
Psilon, совсем математику забыл), синус 180 = 0, а как сделать так чтобы не NAN выводило, в тот момент, а чтo-то вроде "число не принадлежит R" или "бесконечность".
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.03.2014, 13:31
KFU4132133, NaN - это неопределенность. Если вы пишете 1/0, то результатом будет бесконечность, а не NaN. NaN = 0/0, inf/inf, inf - inf, 1inf и прочие неопределенности. Тут почитайте:
http://msdn.microsoft.com/ru-r... 10%29.aspx
0
4 / 4 / 2
Регистрация: 23.02.2014
Сообщений: 142
08.03.2014, 13:54  [ТС]
ну тогда "нет решения" - как сделать чтобы это вывело в цикле у S, где sin = 0
---
и оказывается где то, что-то я натворил - если я начало отрезка задаю 10, а конец 20 считается только х=10 и всё...

Добавлено через 6 минут
с 1 разобрался - знаю как ИФ сделать, а теперь проблема если поменяю в процедуре double на string, то выводит ошибку в случае когда нужно вывести result
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.03.2014, 13:57
KFU4132133, не нужно менять double на string, нужно понять, почему он NaN пишет. Если пишет, значит есть причина. А затыкать его - не лучшая идея. Это как уборка запихиванием мусора под ковер.
0
4 / 4 / 2
Регистрация: 23.02.2014
Сообщений: 142
08.03.2014, 14:21  [ТС]
Всё - с первым разобрался полностью, в процедуре оказывается ничего менять не нужно было...
---
как быть с "h = b-a" - так как не всегда работает

Добавлено через 7 минут
всё - и с этим я тоже решил проблему
оказывается если я задавал начальную переменную, то есть а = 10, и длина(Б-А) тоже была равна 10, а условие было таковым "выполняется при а<=h" - то выходило что начальная переменная=длине, и для остальных он не считал, тогда, нужно к h прибавить столько, чтобы начальная переменная была меньше на N и с каждым шкаогом приближалась к h, другими словами h = b, тогда зачем вводить новую переменную...

Добавлено через 9 минут
теперь другой вопрос - как в try писать условия? то есть при одной ошибке вывело одно предупреждение, а при другой другое - в частности интересует чтобы a>b и "Небыло введено никаких данных в одно из полей" и "разделитель целой и дробной части запятая"
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.03.2014, 14:23
KFU4132133,
C#
1
2
3
4
5
6
7
8
9
10
try
{
}
catch (ArgumentException ex)
{
}
catch(NullReferenceException ex)
{
}
...
Добавлено через 40 секунд
А вообще желательно if-ом проверять.
C#
1
2
if (a < b)
   Console.WriteLine("you stupid");
1
4 / 4 / 2
Регистрация: 23.02.2014
Сообщений: 142
08.03.2014, 14:41  [ТС]
Psilon, я же сказал что там sin иногда бывает равен нулю, следовательно знаменатель равен нулю - тогда должно выводиться нет решений - реализовал по другому, без изменения самой подпрограммы

Добавлено через 1 минуту
Psilon, насчёт if'a знаю - но, преподу так не нужно - ему нужно через try

Добавлено через 13 минут
Всё сделал - но нет удовольствия - не сам я сделал((( - вы помогли - за что огромное спасибо, наверно, примитивно и можно было в сто раз проще сделать... но и так сойдётЪ
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
static void Main()
        {
            try
            {
                Console.Write("Точка начала отрезка = ");
                double a = double.Parse(Console.ReadLine());
                Console.Write("Точка конца отрезка = ");
                double b = double.Parse(Console.ReadLine());
 
                if (b > a)
                {
                    Console.Write("Шаг по отрезку = ");
                    double pace = double.Parse(Console.ReadLine());
                    Console.Write("Точность: ");
                    double pr = double.Parse(Console.ReadLine());
 
                    Console.WriteLine();
                    Console.WriteLine();
 
                    for (double i = a; i <= b; i += pace)
                    {
                        Console.WriteLine("Считаю для Х = " + i);
 
                        if (S(i, pr) == double.NaN)
                        {
                            Console.WriteLine("S = Нет решения"); // при sin = 0
                        }
                        else
                        {
                            Console.WriteLine("S = " + S(i, pr));
                        }
                        Console.WriteLine("Y = " + Y(i));
                        Console.WriteLine();
                    }
                }
                else
                {
                    Console.WriteLine();
                    Console.WriteLine("Конец отрезка должен быть больше, чем начало!");
                }
            }
 
            catch
            {
                Console.WriteLine();
                Console.WriteLine("В одно из полей небыло ничего введено!");
                Console.WriteLine("ЛИБО");
                Console.WriteLine("Разделитель целой и дробной части запятая!");
            }
 
            Console.ReadKey();
        }
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.03.2014, 16:07
KFU4132133, есть еще TryParse, чтобы не париться с try catch.
0
4 / 4 / 2
Регистрация: 23.02.2014
Сообщений: 142
08.03.2014, 16:49  [ТС]
Psilon, подробнее - пример - объяснение
---
И не в тему - а разве пролог чисто логикой управляет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.03.2014, 16:49

Вычислить и вывести на экран в виде таблицы значение функции, заданной с помощью ряда Тейлора
Решаю лабу, столкнулся с проблемой. Не могу допилить программу до конца, а точнее составить цикл. Алгоритм такой использовал: ...

Вычислить сумму ряда
Вычислить сумму ряда s=2+2^2/√2+2^3/√3+2^4/2+2^5/√5

Вычислить сумму ряда
По данному натуральному n вычислите сумму 1+(1+2)+(1+2+3)+...+(1+2+...+n). Ниже листинг для нахождения суммы последовательных чисел без...

Вычислить сумму ряда
10. Вычислить x1+x2+…+ x20, если последовательность x1, x2, … образована по следующему закону:

Вычислить сумму ряда.
Помогите пожалуйта с кодом алгоритма...тут нужно вычислить сумму ряда, ни как не могу сделать. Вот в картинке решение ( заметьте что стоит...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru