Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/120: Рейтинг темы: голосов - 120, средняя оценка - 4.53
 Аватар для Vahram1995
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80

Передача по ссылке двумерного динамического массива в функцию

24.12.2015, 05:01. Показов 25112. Ответов 114
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приведите, пожалуйста, пример. Нигде не могу найти.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.12.2015, 05:01
Ответы с готовыми решениями:

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

Передача динамического двумерного массива в функцию
Я сделал вот так: void PrintMatrix(int** matrix, int& n, int& m) { for (int i = 0; i < n; i++) { cout << "Row "...

Передача двумерного динамического массива в функцию
Как можно передать динамическую матрицу в функцию что бы при выходе из функции она оставила прежние значения?

114
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
25.12.2015, 00:43
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от nord_v Посмотреть сообщение
особенно насчёт работы delete []
Это можно легко продемонстрировать:
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
//Title of this code
//g++  4.9.2
 
#include <iostream>
 
 
 
struct X
{
    ~X(){std::cout << "X::dtor" << std::endl;}
};
 
 
struct Y
{
    ~Y(){std::cout << "Y::dtor" << std::endl;}
};
 
 
 
int main()
{
    X * x1 = new X[2] ;
    X * x2 = new X[2] ;
    X * x3 = new X[2] ;
    std::cout << "Normal: " << std::endl ;
    delete [] x1 ;//Нормальное удаление
    std::cout << "Bug 1: " << std::endl ;
    delete [] (Y*)x2 ;//Приводим к указателю на Y, теперь delete считает что там объекты типа Y
    std::cout << "Bug 2: " << std::endl ;
    *(((size_t*)x3)-1) = 10 ;//переписываем хвостик, про который писал hoggy
    delete [] x3 ;//Вызов десяти деструкторов, а не двух
}
http://rextester.com/ERVWQX39231
Normal:
X::dtor
X::dtor
Bug 1:
Y::dtor
Y::dtor
Bug 2:
X::dtor
X::dtor
X::dtor
X::dtor
X::dtor
X::dtor
X::dtor
X::dtor
X::dtor
X::dtor
Добавлено через 8 минут
Цитата Сообщение от daslex Посмотреть сообщение
2) Статический массив ФРСВВК (массив ФРСВВК с ключевым словом static)
это ясно.
Цитата Сообщение от daslex Посмотреть сообщение
4) Статический массив ФРСВВВ
а это как?
2
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
25.12.2015, 00:47
Вот так (delete [] сознательно не пишу).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "Antivirus.h"
#include <iostream>
using namespace std;
 
void foo(){
    static int *p = new  int[5]{ 1,2,3,4,5 };
    p[0]++;
    for (auto i = 0; i < 5; i++) cout << p[i];
    cout << '\n';
 
    cout << p << p[1] << p[2] << "\n\n";
 
}
int main() {
    foo();
    foo();
    foo();
    cin.get();
}
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
25.12.2015, 00:51
daslex, а, указатель у нас static я думал сам массив будет с каким-нибудь static-dynamic storage duration

Добавлено через 41 секунду
Цитата Сообщение от Croessmah Посмотреть сообщение
static-dynamic storage duration
C++
1
2
static char buffer [1024] ;
int * p = new (buffer) int[5] ;
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
25.12.2015, 02:22
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
2
static char buffer [1024] ; 
int * p = new (buffer) int[5] ;
я так понимаю, что это братья-близнецы, две вариации одного и того же., только где размещение, выбираем мы, а в другом выбирает компилятор. Но суть одна. Мы знаем максимум и пользуемся частью без перевыделений памяти. Слишком родственные сущности.
Здесь уже очевиден именно указатель с размещением с указанием на начало статического массива ФРСВВК.
При new с размещением получается более трех аббревиатур. (три на во время компиляции, три на во время выполнения). Зависимость от того, у кого есть ключевое слово static :-) (ни у кого, у кого-то, у всех)
Такие маленькие манипуляции русскоязычности для русских людей делают как-то яснее о чем идет речь. В конкретном случае легко понимать о чем говорят, о какой статичности и о каком массиве. (сходу непосвященным непонятно, конечно, но врубаться не сложно).
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
25.12.2015, 16:53
Croessmah, к тебе вопрос. Ты пишешь:
Цитата Сообщение от Croessmah Посмотреть сообщение
Размер массива ВСЕГДА известен на этапе компиляции, иначе это уже не массив!
Как тогда быть с этим?
Цитата Сообщение от hoggy Посмотреть сообщение
динамически создаваемый - тупо времени выполнения

вот вам пример:
C++
1
2
3
4
5
6
7
8
int foo() { int arr[3]; } //<--- при запуске будет создан массив
 
int main()
{
     for(;;) foo(); //<--- времени выполнения будет запускаться функция foo
// значит времени выполнения будет создаваться и дохнуть массив
// о боже! у нас тут динамически создаваемый массив завелся
}
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.12.2015, 22:14
Цитата Сообщение от nord_v Посмотреть сообщение
Как тогда быть с этим?
тот факт, что массив будет создаваться времени выполнения
никакой роли не играет.

потому что компилятор времени компиляции
совершено точно знает размер локального массива.

поэтому, ещё времени компиляции,
он сгенерирует код создания такого массива.

а уж когда именно будет запущена функция,
и когда выполнится этот код - по барабану.

когда запустят, тогда и выполнится.
1
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
25.12.2015, 23:37
Цитата Сообщение от hoggy Посмотреть сообщение
еще есть "массив данных" - просто набор каких то однородных данных,
расположенных один за другим.
а есть "массив" - тип данных,
декларированный в стандарте,
имеющий опр. синтаксис и бла бла бла.
в общении и то, и другое часто называют просто массивами,
что вызывает путаницу, которая и приводит к тому,
что некоторым товарищам
не очевидна принципиальная разница между этими понятиями.
говоря о массиве, мы подразумеваем тип данных, со всеми его свойствами.
а говоря о массиве данных, мы ничего такого уже подразумевать не можем.
для нас это уже не более, чем структура однородны данных,
по известному адресу.
Твою логику в отношении массивов я понял: массив - встроенный составной тип данных, то, что создаётся через new тип[n], к этому типу данных отношения не имеет, поэтому неправильно называть это массивом, допустимо называть массивом данных (динамически создаваемым).
Вот этот аргумент у меня некие сомнения вызывает:
Цитата Сообщение от hoggy Посмотреть сообщение
Прата - педагог, который написал книгу для деццкого садика.
он специально максимально упростил материал,
что бы детишки смогли переварить его.
Цитата Сообщение от hoggy Посмотреть сообщение
в общении и то, и другое часто называют просто массивами,
Не один Прата. Все как сговорились, начиная со Страуструпа, и далее по списку, везде: при помощи оператора new[] создаются массивы (у Страуструпа, правда, "При помощи оператора new можно создавать массивы объектов."). Это уже не при общении, как ты пишешь, а, как-бы, в учебниках. Никаких уточнений, никаких оговорок (я, в крайнем случае, не встречал). В детских садиках, кстати, детишек тоже неправильному не учат, чтобы потом не переучивать. В том куске стандарта, который привёл Croessmah по new, везде тоже просто array, и, даже, array type. Стандарт плохо знаю, то если бы там были какие-нибудь оговорки по этому поводу, то ты или Croessmah обязательно бы их привели.
Не думаю, что авторы книг сознательно неправильному учат. Скорее всего, у них тут какой-то другой подход, отличная от твоей логика. Почему-то они допускаю называть массивами такие массивы данных. Или считают, что большой беды от этого нет, как-бы, мало на что влияет, да и, как пишет Croessmah, просто людям удобнее, или ещё что-то.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
25.12.2015, 23:53
Цитата Сообщение от Croessmah Посмотреть сообщение
Это куча int'ов. Они расположены друг за другом, поэтому с точки зрения функционала - массив, с точки зрения типа - нет.
А верно ли считать массивом только то что имеет тип массива? Ведь понятие "массив" не привязаное к ЯП - и везде одно и тоже. В многих ЯП даже нету понятие куча и указатель на адресс и всеравно массив.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
25.12.2015, 23:56
Цитата Сообщение от nord_v Посмотреть сообщение
мало на что влияет
Простецкий пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
template<typename T>
void foo(T& obj)
{
    T result = obj ; //ошибка если T массив
}
 
 
template<typename T>
void bar(T obj)
{
    T result = obj ; //нет ошибки, дабы и массива нет.
}
 
int main()
{
    int arr[3];
    int * ptr = new int[3];
    foo(ptr);
    foo(arr);//error
    bar(ptr);
    bar(arr);
}
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
26.12.2015, 00:02
Цитата Сообщение от nord_v Посмотреть сообщение
А когда компилятор встречает delete [] p, он что думает? Или тут программист ему подсказывает?
если компилятор встретит delete [] p, то у него зарание есть ЕГО подсказка, которую он себе оставил после строки p = new int[15];, где-то выше по коду. Что то за подсказка - скрыто за реализацией компиляторов - ходят слухи, что компилятор хранит число выделеных объектов, и по типу для каждого вызовится деструктор. Если delete [] встретится "без подсказки" (небыло new [] ) или неверной подсказкой (был new) - то там и там UB.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.12.2015, 00:03
Цитата Сообщение от nord_v Посмотреть сообщение
у Страуструпа, правда, "При помощи оператора new можно создавать массивы объектов."
Бьярне фигню не скажет.
он столь же лаконичен и точен,
сколь и не понятен для неокрепших мозгофф новичков.

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

Цитата Сообщение от nord_v Посмотреть сообщение
Не думаю, что авторы книг сознательно неправильному учат.
я же вам писал уже выше, для чего это делается.
это допущение применяется для упрощения материала,
что бы новички смогли осилить.

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

пример:

Имя обозначает (денотирует) объект, функцию, тип, значение или метку. Имя вводится в программе описанием (#8). Имя может использоваться только внутри области текста программы, называемой его областью видимости. Имя имеет тип, определяющий его использование. Объект - это область памяти. Объект имеет класс памяти, определяющий его время жизни. Смысл значения, обнаруженного в объекте, определяется типом имени, использованного для доступа к нему.
(ц)Страуструп.
в одной это фразе содержится такое количество материала,
на десяток Прат хватит.

лично у меня ушло около 2х лет обучения:
интенсивная практика, и горы различной литературы,
прежде чем я смог понять,
что на самом деле имел ввиду Страуструп.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
26.12.2015, 00:09
Если про расширяемый массив, то давайте отобратного:

"Я объявляю расширяемый массив. У меня есть массив и 10 элементов. Паралельно работает в ОС другой процесс - скайп к примеру - ему нужна память - он запрашивает у ОС.

1-ый Вариант:
ОС ему отвечает: "извини братишка, тут клиент сказал за ним не занимать. Сказал, я резервирую память - мне может пригодится вся память."


2-ый Варинт:
ОС отдаёт память скайпу очень близко к концу нашего расширяемого массива. Мы просим под новый объект память - ОС говорит она занята. Критует система.


3-ый Вариант:
Так как гипотетически массив может получить адресс в памяти очень близкую к концу, то нужно расматривать ситуации, когда занято ОЗУ 15%, а наша программа падает потому, что некуда уже расширятся - хотя есть куда.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.12.2015, 00:14
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
то давайте отобратного:
процессы оперируют виртуальными страницами.
физически, данные вообще на диске могут быть.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
26.12.2015, 02:50
Цитата Сообщение от Croessmah Посмотреть сообщение
Простецкий пример:
Ты не тому примеры приводишь. Я же предполагал по этому поводу:
Цитата Сообщение от nord_v Посмотреть сообщение
Почему-то они допускаю называть массивами такие массивы данных. Или считают, что
Я о логике авторов книг, о терминах, которые они применяют, а ты мне примеры приводишь.

Добавлено через 7 минут
Цитата Сообщение от hoggy Посмотреть сообщение
я же вам писал уже выше, для чего это делается.
это допущение применяется для упрощения материала,
что бы новички смогли осилить.
предполагается, что осилив базовый материал,
новичок далее уже сможет понять материал углубленно,
и скорректирует свои знания.
Я читал, что ты писал. И я тебе написал, что эти аргументы, для меня, сомнительны. Нет тут ничего такого, что новичок не мог бы понять. Но я тебя услышал. Других объяснений (по поводу книг), я так понимаю, у тебя нет.

Добавлено через 31 минуту
По-моему, новичкам как раз и нужно указывать это различие между типом данных массив, и тем массивом данных, который создаётся в куче. Если бы это было в каждой книге, то все новички бы и знали это. Вместо этого, авторы, как будто бы специально их путают, применяя термин массив к месту и не к месту.
Ведь именно из-за литературы мне в голову в билось, что в куче можно создавать массивы.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.12.2015, 03:00
Цитата Сообщение от nord_v Посмотреть сообщение
для меня, сомнительны
это - ваши трудности.
Цитата Сообщение от nord_v Посмотреть сообщение
Нет тут ничего такого, что новичок не мог бы понять.
выше, специально в качестве примера,
я привел вам цитату Страуструпа.
я не уверен, что вы сейчас на своём уровне
в состоянии понять её смысл.

Цитата Сообщение от nord_v Посмотреть сообщение
Вместо этого, авторы, как будто бы специально их путают
вы можете ознакомиться с книгой Страуструпа,
из которой я взял приведенную выше цитату.

там нет никаких допущений.
все очень правильно и точно.
однако учиться по ней невозможно.
понять её сможет лишь тот, кто уже в теме.

но вы можете попробовать.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
26.12.2015, 03:26
Цитата Сообщение от hoggy Посмотреть сообщение
выше, специально в качестве примера,
я привел вам цитату Страуструпа.
я не уверен, что вы сейчас на своём уровне
в состоянии понять её смысл.
hoggy, ты, в этой теме, тоже таким же языком объяснял, как Страуструп? Но до меня же дошло. Я к тому, что необязательно писать, как Страуструп, чтобы объяснить про массивы.
Цитата Сообщение от hoggy Посмотреть сообщение
это - ваши трудности.
Ясно, что мои. По-моему, если какая-либо вещь важная и нужная, то авторы книг (особенно для начинающих, не Страуструп, по которому учиться невозможно) должны это подчёркивать, обращать на это внимание. Почему они не делают этого (и не только не делают, а и сами употребляют сомнительные термины), в данном конкретном случае, для меня остаётся загадкой. Может они тоже не знают? Может им тоже нужно разъяснить разницу?

Добавлено через 8 минут
Вот, например, такое объяснение для новичков (всё ли тут верно?): переменная типа данных массив хранится в именованной области памяти, не путать с неименованными блоками данных, которые создаются в динамической памяти.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.12.2015, 03:41
Цитата Сообщение от nord_v Посмотреть сообщение
(всё ли тут верно?): переменная типа данных массив хранится в именованной области памяти, не путать с неименованными блоками данных, которые создаются в динамической памяти.
такая формулировка вызывает больше вопросов, чем дает ответов.

слово "переменная" лучше вообще никогда не употреблять.
переменные обозначают имена объектов, а не сами объекты.

что такое "именованная область памяти",
и чем она отличается от "не именованной" - это что-то совсем не из мира сего.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
26.12.2015, 03:44
Цитата Сообщение от hoggy Посмотреть сообщение
что такое "именованная область памяти",
и чем она отличается от "не именованной" - это что-то совсем не из мира сего.
Как так не от мира сего? Сплошь и рядом, в литературе. Именованная область - доступ к значению по имени переменной, неименованная (в куче) - по указателю.
0
4 / 4 / 6
Регистрация: 14.10.2015
Сообщений: 26
26.12.2015, 03:48
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
void delete_array(int **arr, int width) {
  for (int w = 0; w < width; ++w) {
    delete[] arr[w];
  }
  delete[] arr;
}
 
int **create_array(int width, int height) {
  int **array = new int *[width];
  for (int w = 0; w < width; ++w) {
    array[w] = new int[height];
  }
  return array;
}
 
void fill_array(int **arr, int width, int height) {
  srand(time(NULL));
  for (int i = 0; i < width; i++) {
    for (int j = 0; j < height; j++) {
      std::cout << "arr[" << i << "][" << j << "] = ";
      std::cin >> arr[i][j];
    }
  }
}
 
void print_array(int **arr, int width, int height) {
  for (int w = 0; w < width; w++) {
    for (int h = 0; h < height; h++) {
      std::cout << arr[w][h] << ' ';
    }
    std::cout << '\n';
  }
}
 
 
int main()
{
    setlocale (LC_ALL, "RUS");
    int **arr;
    int width, height;
                std::cout << "Введите количество строк: ";
                std::cin >> width;
                std::cout << "Введите количество столбцов: ";
                std::cin >> height;
                arr = create_array(width, height);
                fill_array(arr, width, height);
                print_array(arr, width, height);
                delete_array(arr, width);
}
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
26.12.2015, 04:01
Цитата Сообщение от hoggy Посмотреть сообщение
что такое "именованная область памяти",
и чем она отличается от "не именованной" - это что-то совсем не из мира сего.
Ты в поисковике набери: "именованная область памяти", и увидишь: от мира сего, или не от мира сего. Как раз таки, от мира сего.

Добавлено через 1 минуту
С учётом замечаний (для новичков): тип данных массив хранится в именованной области памяти, не путать с неименованными блоками данных, которые создаются в динамической памяти.

Добавлено через 3 минуты
Ещё проще: массив в С++ всегда имеет имя, не путать с неименованными блоками данных, которые создаются в динамической памяти.
Ты сам как бы, в двух словах, для новичков (доходчиво, упрощённо), подчеркнул бы различие?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.12.2015, 04:01

Передача двумерного динамического массива чисел в функцию
void Map::setCell(int** block, Room* room, int type){ for(int i=room-&gt;x; i&lt;room-&gt;w; ++i) for(int j=room-&gt;y; j&lt;room-&gt;h; ++j) ...

Передача двумерного динамического массива в функцию(объяснение)
Когда мы хотим передать двумерный динамический массив в функцию через указатели (**a) , то в теле ф-ии main() , мы пишем так , как указано...

Передача двумерного динамического массива в функцию в качестве параметра
Вообщем надо сложить и умножить две матрицы, но сделать это в отдельных функциях. Матрицы заданы динамическими массивами размерами n*m и...

Передача двумерного динамического массива в функцию построчно и сортировка
Всем доброго времени суток! Собственно сабж: есть двумерный динамический массив, который надо делить на одномерные и передавать в функцию...

Передача динамического двумерного массива в процедуру
Написал вот такой код для одномерного динамического массива #include &lt;iostream&gt; #include &lt;clocale&gt; using...


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

Или воспользуйтесь поиском по форуму:
80
Закрытая тема Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru