Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/56: Рейтинг темы: голосов - 56, средняя оценка - 4.88
1 / 1 / 1
Регистрация: 24.05.2013
Сообщений: 41

Как передать массив из одной функции в другую

02.12.2013, 01:03. Показов 11924. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят помогите с массивами,алгоритм составил а с языком пока на "ВЫ".
как таскать массив из процедуры в процедуру.
перехожу с паскаля там все просто,перед нужной переменной ставим "var".
а как это делается в c++???
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.12.2013, 01:03
Ответы с готовыми решениями:

Как передать массив из одной функции в другую?
Нужна помощь. #include <iostream> #include <conio.h> using namespace std; int vod(int a) { int a, i; for (i = 0; i <...

Передать массив из одной функции в другую
Доброго времени суток, читатель) Короче, от безделья решил написать программный код, выводящий сначала рандомный массив и следом...

Как передать массив обьектов из одной функции в другую?
Есть метод. Он принимает массив обьектов. И (:good:) создает из него нового размера новый массив обьектов , и я успешно его печатаю. ...

11
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.12.2013, 01:06
Цитата Сообщение от Kosotornov Посмотреть сообщение
Ребят помогите с массивами,алгоритм составил
и где задача, где алгоритм ваш?
0
 Аватар для Alex566
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
02.12.2013, 01:21
Цитата Сообщение от Kosotornov Посмотреть сообщение
как таскать массив из процедуры в процедуру.
В С++ существуют статические и динамические массивы и работа с ними в функциях осуществляется немного по разному.
Статический массив объявляется таким образом:
C++
1
int mas[10];//Целочисленный массив из 10 элементов.
Динамический таким образом:
C++
1
2
int *mas;//Декларация массива
mas=(int*)malloc(sizeof(int)*10);//Выделение памяти
C++
1
free (mas);//Удаление памяти
Добавлено через 11 минут
При работе со статическим массивом значения массива из главной функции не изменяются. Можно сказать создается его двойник в функции для выполнения определенной операции над ним.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int max(int mas[],int n)//Декларация функции которая принимает 2 значения: массив и количество чисел в нем.
{
    int max=mas[0];
    for(int i=1;i<n;i++)
        if(mas[i]>max)
            max=mas[i];
    return max;//Функция возвращает значение переменной max;
}
int main ()
{
    int mas[10]={1,2,3,4,5,6,7,8,9,0};
    int m=max(mas,10);//Передача значений в функцию.
    cout<<m;
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.12.2013, 01:30
malloc и free - функции из С, пережиток прошлого и небезопасны. Вдобавок конструкторы не вызывают. В С++ необходимо использовать операторы new и delete (и их братьев для массивов соотв. new[] и delete[]).

Добавлено через 1 минуту
Цитата Сообщение от Alex566 Посмотреть сообщение
Можно сказать создается его двойник в функции для выполнения определенной операции над ним.
поэтому чтобы копий не было - необходимо передавать массив по указателю или по ссылке. Это экономит память и не плодит объекты.
1
1 / 1 / 1
Регистрация: 24.05.2013
Сообщений: 41
02.12.2013, 02:00  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
и где задача, где алгоритм ваш?
алгоритм
Кликните здесь для просмотра всего текста

текст программы:
Кликните здесь для просмотра всего текста
Pascal
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
    max := mass[kk];{оператор присваивания}
    imax := kk;{оператор присваивания}
    for ii := kk + 1 to chet do{цикл}
      if max < mass[ii] then 
      begin{операторные скобки}
        max := mass[ii];{оператор присваивания}
        imax := ii;{оператор присваивания}
      end;{операторные скобки}
    mass[imax] := mass[kk];{оператор присваивания}
    mass[kk] := max;{оператор присваивания}
  end;{операторные скобки}
end;{операторные скобки}
 
procedure sort1(var mat: tmatr; pol, raz: tind);{процедура}
var{обзываем переменные}
  i, j, chet1, chet2: tind;{обзываем переменные}
  mas: tmas;{обзываем переменные}
begin{операторные скобки}
  for j := 1 to pol do  {цикл}
  begin{операторные скобки}
    chet1 := 0;{оператор присваивания}
    chet2 := 0;{оператор присваивания}
    for i := 1 to j do{цикл}
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;{операторные скобки}
    for i := raz + 1 - j to raz do{цикл} 
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;  {операторные скобки}    
    massiv(mas, chet1);
    for i := 1 to j do{цикл}
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
    for i := raz + 1 - j to raz do{цикл}
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
  end;{операторные скобки}
end;{операторные скобки}
 
procedure sort2(var mat: tmatr; pol, raz: tind);{процедура}
var{обзываем переменные}
  i, j, chet1, chet2: tind;{обзываем переменные}
  mas: tmas;{обзываем переменные}
begin{операторные скобки}
  for j := raz downto pol + 1 do{цикл} 
  begin{операторные скобки}
    chet1 := 0;{оператор присваивания}
    chet2 := 0;{оператор присваивания}
    for i := 1 to raz + 1 - j do {цикл}
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;{операторные скобки}
    for i := j to raz do {цикл}
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;{операторные скобки}
    massiv(mas, chet1);
    for i := 1 to raz + 1 - j do {цикл} 
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
    for i := j to raz do {цикл}
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
  end;{операторные скобки}
end;{операторные скобки}
 
 
 
 
procedure vivod(mat: tmatr; pol, raz: tind);{процедура}
var{обзываем переменные}
  i, j: tind;{обзываем переменные}
begin{операторные скобки}
  for i := 1 to raz do{цикл}
  begin{операторные скобки}
    writeln();{вывод на экран}
    for j := 1 to raz do{цикл}
    begin{операторные скобки}
      write(mat[i, j]:pol, ' ');{вывод на экран}
    end;{операторные скобки}
  end;{операторные скобки}
end;{операторные скобки}
 
var{обзываем переменные}
  matr: tmatr;{обзываем переменные}
  polovina, razm: tind;
 
begin{операторные скобки}
  writeln('Введите половину массива');{вывод на экран}
  writeln();{вывод на экран}
  vvod(matr, polovina, razm);{процедура}
  writeln('изначальный массив имеет вид');{вывод на экран}
  writeln();{вывод на экран}
  vivod(matr, polovina, razm);{процедура}
  writeln();{вывод на экран}
  nul(matr, polovina, razm);{процедура}
  sort1(matr, polovina, razm);{процедура}
  sort2(matr, polovina, razm);{процедура}
  writeln();{вывод на экран}
  writeln('отсортированный массив имеет вид');{вывод на экран}
  writeln();{вывод на экран}
  vivod(matr, polovina, razm);{процедура}
end.{операторные скобки}

Эту лабу сдавал давно,но суть та-же,
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.12.2013, 02:14
Kosotornov, а лупу подарите картинку разглядеть?
Текст задания нужен.
0
1 / 1 / 1
Регистрация: 24.05.2013
Сообщений: 41
02.12.2013, 02:56  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Текст задания нужен.
задание
сортировка по методу поиска максимума
Название: 1385938377-clip-4kb.png
Просмотров: 359

Размер: 4.1 Кб
полная лаба,не все скопировал пардон
Кликните здесь для просмотра всего текста
Pascal
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
const{обзываем константы}
  razmer = 10;{константа}
 
type{определяем типы}
  Tind = 1..razmer;{тип индекса}
  TElim = integer;{тип элемента}
  Tmatr = array [tind, tind] of Telim;{тип массива}
  Tmas = array[tind] of Telim;{тип массива}
 
procedure vvod(var mat: tmatr; var pol, raz: tind);{процедура}
var{обзываем переменные}
  i, j: tind;{обзываем переменные}
begin{операторные скобки}
  Readln(pol);{размер массива}
  raz := 2 * pol;{оператор присваивания}
  for i := 1 to raz do{цикл }
    for j := 1 to raz do{цикл}
      mat[i, j] := (2 * raz + (i - 1) * 10 - (j - 1));{забиваем массива}
end;{операторные скобки}
 
procedure nul(var mat: tmatr; pol, raz: tind);{процедура}
var{обзываем переменные}
  chet, i, j: tind;{обзываем переменные}
begin{операторные скобки}
  chet := 0;{оператор присваивания}
  for j := 1 to pol - 1 do {цикл}
  begin{операторные скобки}
    chet := chet + 1;{оператор присваивания}
    for i := chet + 1 to raz - chet do{цикл}
      mat[i, j] := 0;{оператор присваивания}
  end; {операторные скобки}    
  chet := 0;{оператор присваивания}
  for j := raz downto pol + 2 do{цикл}
  begin{операторные скобки}
    chet := chet + 1;{оператор присваивания}
    for i := chet + 1 to raz - chet do 
      mat[i, j] := 0;{оператор присваивания}
  end; {операторные скобки}    
end;{операторные скобки}
 
procedure massiv(var mass: tmas; chet: tind);{процедура}
var{обзываем переменные}
  max: telim;{обзываем переменные}
  imax, ii, kk: tind;{обзываем переменные}
begin{операторные скобки}
  for kk := 1 to chet - 1 do{цикл}
  begin{операторные скобки}
    max := mass[kk];{оператор присваивания}
    imax := kk;{оператор присваивания}
    for ii := kk + 1 to chet do{цикл}
      if max < mass[ii] then 
      begin{операторные скобки}
        max := mass[ii];{оператор присваивания}
        imax := ii;{оператор присваивания}
      end;{операторные скобки}
    mass[imax] := mass[kk];{оператор присваивания}
    mass[kk] := max;{оператор присваивания}
  end;{операторные скобки}
end;{операторные скобки}
 
procedure sort1(var mat: tmatr; pol, raz: tind);{процедура}
var{обзываем переменные}
  i, j, chet1, chet2: tind;{обзываем переменные}
  mas: tmas;{обзываем переменные}
begin{операторные скобки}
  for j := 1 to pol do  {цикл}
  begin{операторные скобки}
    chet1 := 0;{оператор присваивания}
    chet2 := 0;{оператор присваивания}
    for i := 1 to j do{цикл}
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;{операторные скобки}
    for i := raz + 1 - j to raz do{цикл} 
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;  {операторные скобки}    
    massiv(mas, chet1);
    for i := 1 to j do{цикл}
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
    for i := raz + 1 - j to raz do{цикл}
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
  end;{операторные скобки}
end;{операторные скобки}
 
procedure sort2(var mat: tmatr; pol, raz: tind);{процедура}
var{обзываем переменные}
  i, j, chet1, chet2: tind;{обзываем переменные}
  mas: tmas;{обзываем переменные}
begin{операторные скобки}
  for j := raz downto pol + 1 do{цикл} 
  begin{операторные скобки}
    chet1 := 0;{оператор присваивания}
    chet2 := 0;{оператор присваивания}
    for i := 1 to raz + 1 - j do {цикл}
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;{операторные скобки}
    for i := j to raz do {цикл}
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;{операторные скобки}
    massiv(mas, chet1);
    for i := 1 to raz + 1 - j do {цикл} 
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
    for i := j to raz do {цикл}
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
  end;{операторные скобки}
end;{операторные скобки}
 
 
 
 
procedure vivod(mat: tmatr; pol, raz: tind);{процедура}
var{обзываем переменные}
  i, j: tind;{обзываем переменные}
begin{операторные скобки}
  for i := 1 to raz do{цикл}
  begin{операторные скобки}
    writeln();{вывод на экран}
    for j := 1 to raz do{цикл}
    begin{операторные скобки}
      write(mat[i, j]:pol, ' ');{вывод на экран}
    end;{операторные скобки}
  end;{операторные скобки}
end;{операторные скобки}
 
var{обзываем переменные}
  matr: tmatr;{обзываем переменные}
  polovina, razm: tind;
 
begin{операторные скобки}
  writeln('Введите половину массива');{вывод на экран}
  writeln();{вывод на экран}
  vvod(matr, polovina, razm);{процедура}
  writeln('изначальный массив имеет вид');{вывод на экран}
  writeln();{вывод на экран}
  vivod(matr, polovina, razm);{процедура}
  writeln();{вывод на экран}
  nul(matr, polovina, razm);{процедура}
  sort1(matr, polovina, razm);{процедура}
  sort2(matr, polovina, razm);{процедура}
  writeln();{вывод на экран}
  writeln('отсортированный массив имеет вид');{вывод на экран}
  writeln();{вывод на экран}
  vivod(matr, polovina, razm);{процедура}
end.{операторные скобки}
0
1 / 1 / 1
Регистрация: 24.05.2013
Сообщений: 41
02.12.2013, 03:24  [ТС]
меня интересует только:
в процедуре ввод мы задаем массив.
но в основной функции массив пустой,так же как и все переменные которые я задал в процедуре ввод.
в паскале
Pascal
1
procedure vvod(var mat: tmatr; var pol, raz: tind);
var отвечает за то,что матрица и n будут известны в основном теле программы.
как же это сделать тут.???
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.12.2013, 03:52
Цитата Сообщение от Kosotornov Посмотреть сообщение
как же это сделать тут.???
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
#include <iostream>
 
// увеличивает все элементы массива на 1. Массив передается по указателю и изменяется
void inc(int *arr, const int N)
{
    for (int i=0; i < N; i++)
        arr[i]++;
}
 
void print(const int *arr, const int N)
{
    for (int i=0; i < N; i++)
        std::cout << arr[i] << " ";
    std::cout << std::endl;
}
 
int main()
{
    const int size = 3;
    int A[size] = {1, 2, 3};
    print(A, size); // исходный массив
    inc(A, size);   // меняем значения элементов массива
    print(A, size); // измененные значения
}
0
1 / 1 / 1
Регистрация: 24.05.2013
Сообщений: 41
06.12.2013, 02:40  [ТС]
Почему он на меня нервничает???
incompatible types in assignment of `int' to `Telem[10]'
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <locale.h>
using namespace std;
const int Tind=10;
typedef int Telem;
typedef Telem (Tmatr[Tind][Tind]);
 
void vood(int n,Tmatr A);
 
int main(void)
{Tmatr  B;
int raz; 
system("cls");
setlocale(LC_ALL, "rus" );
 
vood(raz,B);
 
 _getch();
 return 0;
}
/*=========================================================================
========================Процедура ввода массива============================
=========================================================================*/
void vood(int n,Tmatr *A)
{
int i,j;
cout<<"\nВведите половину размерности массива>>";
cin>>n;
n=n*2;
cout<<"\nНачинайте задавать массив\n";
for(i=0;i<n;i++)
    for (j=0;j<n;j++){
        A[i][j]=(2 * n + (i - 1) * 10 - (j - 1));
        }
}
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
06.12.2013, 17:50
Цитата Сообщение от Kosotornov Посмотреть сообщение
vood(raz,B);
принимает в качестве аргумента Tmatr, когда параметр задан как Tmatr*
0
1 / 1 / 1
Регистрация: 24.05.2013
Сообщений: 41
06.12.2013, 19:22  [ТС]
Суть не меняется.
Ошибку выдает туже.=(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.12.2013, 19:22
Помогаю со студенческими работами здесь

Как передать значение из одной функции в другую?
Как передать значение s из функции main() в функцию poisk()? Как передать значение i из функции poisk() в функцию main()? Если...

Как передать значение из одной функции в другую?
Подскажите, пожалуйста, как сделать так: Я хочу реализовать движение вверх-вниз квадрата. После выполнения цикла в функции function...

Как переменную из одной функции передать в другую?
у меня надо переменную index из функции maxi передать в функцию summa #include &quot;stdafx.h&quot; #include &quot;math.h&quot; #include...

Как передать переменную из одной функции в другую функции
Здравствует. Есть 2 функции function html_detail_result(&amp;$data) { ob_start(); $vdata = &amp;$data; $title = $vdata.'...

Как передать массив из одной формы в другую
есть одна форма, у нее в коде присутствует и заполняется (считаются значения функции)double Uu = new double; мне надо чтоб этот...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru