Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/131: Рейтинг темы: голосов - 131, средняя оценка - 4.52
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549

Архитектура: парсинг и выгрузка текстовиков

11.03.2020, 10:51. Показов 32450. Ответов 421

Студворк — интернет-сервис помощи студентам
начало было положено в ветке - Считать текстовые файлы из папки - там и возник вопрос об Архитектуре...
Цитата Сообщение от JeyCi Посмотреть сообщение
так и не собрала эти все объекты этого класса в group class...
вроде уже собрала...
осталось отображение создать (типа I_tbl_Show) и пронаследовать ? в разные классы пункта назначения (или на консоль, или в файл, или в БД, или допустим ещё в форму)... N.B. классы (пункты-назначения) делать не надо - эти View уже реализованы разработчиками того ПО, на котором сейчас идёт работа...
а) пока что можно просто прописать функции-члены класса; и по месту использовать, что надо при разработке - в файл или на консоль;
б) в перспективе для Release - реализовать и откомпилировать и выгрузку и в файл, и выгрузку в БД, и отражение в DataGrid...
===
!! Т.Е. если в Release захочется и выгрузку в текст, и в БД, и допустим ещё в форму (например с разных кнопок сделать) - тут уж лучше и писать, как положено, наследование??... -- к слову из прошлой ветки о:
Цитата Сообщение от JeyCi Посмотреть сообщение
полагаю тут Наследования никакого не пригодится?
... или как раз тут (при выборе направления выгрузки) его (наследование) делать??
===
Обоснование выбора уровня Абстракции (I_tbl_Show со всеми виртуальными функциями):
чтобы не дублировать код-сбора-для-выгрузки -- сделать class Table - и класс-интерфейс I_tbl_Show, в котором обозначить virtual-функции выгрузки... эти функции определить в др. классах - типа Interface (IwriteCSV, IwriteDB, IwriteDataGrid)...
p.s.
классы консоль, файл, бд, DataGrid - не создаём, т.к. эти пункты назначения уже присутствуют...
p.p.s.
вывести конечные интерфейсы с определёнными методами записи на кнопки...
===
ИЛИ то, что подчёркнуто чуть выше, стоит реализовать в одном классе Table, и здесь же задать все virtual функции ??
===
на скрине: синие - классы, зелёные - интерфейсы (в с++ по сути тоже классы)
птицами отмечены уже кое-как реализованные классы (2 птицы)
курсивные стрелки - отсутствие наследования


Добавлено через 7 минут
вобщем вопрос:
class Table и класс I_Tbl_Show - объединить или нет?

Добавлено через 10 минут
p.p.s.
чтобы избежать проблем Ромба и такого:
Неоднозначность при множественном наследовании
Цитата Сообщение от DrOffset Посмотреть сообщение
Тут нужно виртуальное наследование.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2020, 10:51
Ответы с готовыми решениями:

Проверка двух текстовиков
Написать прогу на языке Си, проверяющую, совпадают ли тексты в двух файлах #include <stdio.h> #include <stdlib.h> ...

Access модуль объединения текстовиков
Добрый день. Очень нужен модуль access который будет объединять текстовые файлы с предложенной папки (каждый раз разные названия и...

Сделать скрипт для вывода текстов из текстовиков
Здравствуйте! Не могли бы помочь сделать скрипт для вывода текстов песен из текстовиков в папке. Расскажу подробней: есть папка с...

421
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
03.06.2020, 10:41
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от JeyCi Посмотреть сообщение
Очередь конкурирует за процессорное время...
Очередь ни за что не конкурирует. За процессорное время конкурируют потоки, когда не спят.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
03.06.2020, 18:28  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Очередь ни за что не конкурирует. За процессорное время конкурируют потоки
а задачи (очередь задач)? работающие асинхронно ? - в многопоточном приложении ? на компе с одним ядром...
- это ведь и есть конкурентность...
vs. параллелизм - на несколько ядер...
хотя если породить потоков больше, чем ядер(-1, т.к. 1 для главного потока) - то и потоки встанут в очередь...
p.s.
хотя если бывают такие процессы, которые параллелятся не через ядра (мало ли какой сигнал с какого датчика на какой дивайс?)... то и в очередь становИться некуда будет... но семафором (как счётчиком ресурсов) - контролировать можно будет...
пока так понимаю...

Добавлено через 5 минут
Цитата Сообщение от JeyCi Посмотреть сообщение
Менеджмент потоков
тут кстати больше понравилась фраза - Concurrency Management... надо всегда прикинуть потоки, чтобы жадность к ресурсам обойти стороной... имхо... не люблю применять топор без ознакомления с техникой безопасности
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
03.06.2020, 18:37
JeyCi, смотрите на уровень абстракции.

Для компьютера с одним ядром истинного параллелизма нет. Но он (параллелизм) есть для прикладной программы, которая сделала себе, например, два потока. На ее уровне у нее есть параллелизм этих потоков, если они (в абстракциях этой программы) не конкурируют за ресурсы.
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
03.06.2020, 19:32  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
смотрите на уровень абстракции...
Для компьютера с одним ядром истинного параллелизма нет. Но он (параллелизм) есть для прикладной программы, которая сделала себе, например, два потока.
вот, сама перечитала, что написала и ваш пост в дополнение, -- и вспомнила знакомый vba
Модальное окно в графическом интерфейсе пользователя — окно, которое блокирует работу пользователя с родительским приложением до тех пор, пока пользователь это окно не закроет
... и немодальное в противовес...
вот теперь поняла, что в c++ значит потоки: когда висит GUI, работает main, на стороне какое выбрасывание в log идёт... или парсинг текстовиков, пока GUI музыку проигрывает...

Добавлено через 13 минут
значит так и параллелить... чтобы сильно часто синхронизировать (блокировать) не приходилось... а если нет общих ресурсов - то и блокировать нечего... фантастика: всё гениальное - просто...
IO - это когда процесс/поток сначала consume data, потом produce result... а когда он потом consume то, что он дал result'ом - это уже deadlock...
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
04.06.2020, 11:33  [ТС]
Цитата Сообщение от JeyCi Посмотреть сообщение
а если нет общих ресурсов - то и блокировать нечего...
а ведь есть общий ресурс - общее адресное пространство, память, процессорное время, дескриптор файла
что такое неделимая операция семафора
на ru_stackoverflow_com /questions/511595/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-%D0%BD%D0%B5%D0%B4%D0%B5%D0%BB%D0%B8%D0% BC%D0%B0%D1%8F-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0% B8%D1%8F-%D1%81%D0%B5%D0%BC%D0%B0%D1%84%D0%BE%D1% 80%D0%B0"

===
вот пример работающего семафора с riptutorial...
Кликните здесь для просмотра всего текста
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
72
73
74
75
76
77
#include <iostream>
#include <stdio.h>
#include <thread>
 
#include <mutex>
#include <condition_variable>
 
using namespace std;
        
class Semaphore {
public:
    Semaphore (int count_ = 0)
    : count(count_) 
    {
    }
    
    inline void notify( int tid ) {
        std::unique_lock<std::mutex> lock(mtx);
        count++;
        cout << "thread " << tid <<  " notify" << endl;
        //notify the waiting thread
        cv.notify_one();
    }
    inline void wait( int tid ) {
        std::unique_lock<std::mutex> lock(mtx);
        while(count == 0) {
            cout << "thread " << tid << " wait" << endl;
            //wait on the mutex until notify is called
            cv.wait(lock);
            cout << "thread " << tid << " run" << endl;
        }
        count--;
    }
private:
    std::mutex mtx;
    std::condition_variable cv;
    int count;
};
 
 
 
int main()
{
    Semaphore sem(1);
    
    thread s1([&]() {
        while(true) {
            this_thread::sleep_for(std::chrono::seconds(5));
            sem.wait( 1 );
        }           
    });
    thread s2([&]() {
        while(true){
            sem.wait( 2 );
        }
    });
    thread s3([&]() {
        while(true) {
            this_thread::sleep_for(std::chrono::milliseconds(600));
            sem.wait( 3 );
        }
    });
    thread s4([&]() {
        while(true) {
            this_thread::sleep_for(std::chrono::seconds(5));
            sem.notify( 4 );
        }
    });
    
    
    s1.join();
    s2.join();
    s3.join();
    s4.join();
 
    //...
}

- и что интересно - работают и работают... и работают... без цикла в коде, и main() исполняется постоянно - мы join'им потоки к главному потоку (чтобы пропечатать в консоль)... и они продолжают работать? (без цикла)... наверно, пока процесс (т.е. само приложение от main'a) не остановим (закроем/выйдем) ?..
деструктора в классе под спойлером нет... - а как сделать здесь непонятно...
хотя в std есть sem_destroy... но надо потестить (в др коде)... в коде под спойлером нет...
здесь отметили
>> аварийная ситуация и ее надо обрабатывать, а не продолжать работу
>> Для этого придумывался robust mutexes (ядро разлочит mutex взятый потоком, если поток случайно умрет). Почти такой же функционал предоставляет SEM_UNDO для семафоров, с тем отличием, что robust mutex'ы могут сообщать, что мьютекс разлочился в силу смерти потока (EOWNERDEAD + pthread_mutex_consistent), и тред среагирует соответствующим образом. У семафоров такой механизм оповещения об ошибке нужно самому придумывать.
вариант из #109 - наверно, не совсем, т.к.
According to the C++11 ISO Standard, the volatile keyword is only meant for use for hardware access; do not use it for inter-thread communication.
Кликните здесь для просмотра всего текста
In C/C++ the volatile keyword was intended to:
● allow access to memory mapped devices
● allow uses of variables between setjmp and longjmp
● allow uses of sig_atomic_t variables in signal
handlers.

Useful side effects:
● compiler can’t optimize out volatile access
● compiler can’t reorder volatile access relative to
some other special access (e.g. another volatile
access).

Disadvantages:
● operations on volatile variables are not atomic
● compiler may reorder volatile access relative to
regular variable access
● CPU may reorder volatile access relative to any
other access (e.g. another volatile access).

==
цель этого поста - аргумент важности использования имеющихся библиотек, а не учебных примеров... в то же время, наметить кривую знакомства с потоками
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
04.06.2020, 16:01  [ТС]
===
gif-ка отражающая смысл Семафора:

Сначала семафор инициализируется и ему передается количество потоков, которые к нему могут обратиться. Дальше при каждом обращении к ресурсу его счетчик уменьшается. Когда счетчик уменьшиться до 0 к ресурсу обратиться больше нельзя. При отсоединении потока от семафора его счетчик увеличивается, что позволяет другим потокам обратиться к нему.
Миниатюры
Архитектура: парсинг и выгрузка текстовиков  
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
04.06.2020, 17:57  [ТС]
p.s.
What exactly is std::atomic
stackoverflow_com /questions/31978324/what-exactly-is-stdatomic
про load(), store() & memory order , который появился с C++v.11


Добавлено через 9 минут
Concurrency in C++11
(часть про Condition_Variables - в принципе их суть примерно, как и у семафора, - только появились они в Win7, на более ранних windows не работают вроде)

Добавлено через 1 час 32 минуты
==============
вобщем, читать
manual
и IEEE Std - The Open Group Base Specifications Issue
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
04.06.2020, 17:59
JeyCi, возможно вам будет интересно:
http://scrutator.me/post/2012/... ld-p1.aspx
http://scrutator.me/post/2012/... ld-p2.aspx
http://scrutator.me/post/2012/... ld-p3.aspx
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
04.06.2020, 18:28  [ТС]
=====
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Привязываешь семафор к конкретному сайту, например при помощи std::map, и блокируешь его перед отправкой запроса
только одну подсказку на будущее - если можно получить от вас - эдесь вы это имели ввиду?
maintain a semaphore list?
словарь семафоров?...
и ответ

stackoverflow_com /questions/9660119/giving-an-id-to-semaphore
You could use the sem_t's address as the key:
map<sem_t*, int> sem_map;

Then, given a sem_t x, you could access the int value in the map using:
sem_map.find(&x);

Note that this solution works only if you are not copying semaphores around.

EDIT: the reason why you couldn't use sem_t as keys in your map is that std::map requires that the key type has operator< defined(in order to do internal sorting, std::map(s) are tree structures). However, a union does not have a operator< defined, so the compiler won't let you use it. On the other hand, pointers can be compared between them, so the compiler will actually let you use them as keys in your std::map.

- в ключ - адрес семафора, в значение - линк...
Но ведь так можно и просто мьютексами справиться... один мьютекс на один линк...
Или каким макаром привязать семафор к конкретному сайту (все линки с одного сайта)... - ? надо сделать 1 семафор и все threads (с каждого линка) направлять на этот семафор?.. (если сделать его принимающим до 10 потоков, например)... тогда зачем std::map?..
sorry за кучу вопросов - но это наверно последний - чтобы сориентироваться для share_resources correctly... остальное буду искать в сети и на форуме

Добавлено через 2 минуты
===
DrOffset, обязательно ознакомлюсь! спасибо!
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
04.06.2020, 18:40
Цитата Сообщение от JeyCi Посмотреть сообщение
только одну подсказку на будущее - если можно получить от вас - эдесь вы это имели ввиду?
C++
1
map<std::string, sem_t*> sem_map;
Добавлено через 6 минут
Цитата Сообщение от JeyCi Посмотреть сообщение
Но ведь так можно и просто мьютексами справиться... один мьютекс на один линк...
К одному линку могут несколько потоков коннектится. Главное, чтобы не слишком много одновременно

Добавлено через 58 секунд
Цитата Сообщение от JeyCi Посмотреть сообщение
Или каким макаром привязать семафор к конкретному сайту (все линки с одного сайта)... - ? надо сделать 1 семафор и все threads (с каждого линка) направлять на этот семафор?.. (если сделать его принимающим до 10 потоков, например)... тогда зачем std::map?.
Распарсить линку и выделить из неё адрес сервера, например google.com

Добавлено через 55 секунд
Цитата Сообщение от JeyCi Посмотреть сообщение
Или каким макаром привязать семафор к конкретному сайту (все линки с одного сайта)... - ? надо сделать 1 семафор и все threads (с каждого линка) направлять на этот семафор?.. (если сделать его принимающим до 10 потоков, например)... тогда зачем std::map?.
Распарсить линку и выделить из неё адрес сервера, например google.com
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
04.06.2020, 20:23  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Распарсить линку и выделить из неё адрес сервера, например google.com
и тогда
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
map<std::string, sem_t*> sem_map;
el.first (key) у всех будет одинаковый, т.к.
Цитата Сообщение от JeyCi Посмотреть сообщение
(все линки с одного сайта)...
допустим google.com
и
el.second (item) у всех будет одинаковый, если семафор один...
смысл такого словаря?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
04.06.2020, 20:25
Цитата Сообщение от JeyCi Посмотреть сообщение
el.second (item) у всех будет одинаковый, если семафор один...
смысл такого словаря?
Тогда он не нужен
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
04.06.2020, 20:48  [ТС]
p.s.
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
К одному линку могут несколько потоков коннектится
вот, действительно, опять я поток на элемент примеряю, а ведь, действительно, может и несколько потоков на линк... всё время 1к1 равняю -- спасибо, что не устаёте править...

Добавлено через 16 минут
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Я тебе вроде показывал свою реализацию примитивного пула потоков.
По сути там описан асинхронный обработчик задач. Эти задачи кладутся в очередь, потом потоки забирают их оттуда и выполняют
по коду - не могу запустить:
m_tasks и m_pool was not declared in this scope
-- и действительно, по коду не вижу декларацию
и почему-то
C++
1
std::list<T> m_tasks, m_pool{m_cap}; //Очередь задач и список зарезервированных элементов, пул.
error: 'list' in namespace 'std' does not name a template type
-- эту ошибку уж совсем не понимаю ( даже если using namespace std; )
и ещё несколько
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
04.06.2020, 20:51
Цитата Сообщение от JeyCi Посмотреть сообщение
error: 'list' in namespace 'std' does not name a template type
-- эту ошибку уж совсем не понимаю ( даже если using namespace std; )
Сделай #include <list>
забыл добавить
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
04.06.2020, 21:10  [ТС]
error: 'bind' is not a member of 'std'
? что-то в include тоже нет
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
04.06.2020, 21:12
Цитата Сообщение от JeyCi Посмотреть сообщение
error: 'bind' is not a member of 'std'
? что-то в include тоже нет
#include <functional>
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
04.06.2020, 21:19  [ТС]
спасибо запустила - но я взяла только сам классCTaskRunner и пример CThreadPool...
буду примерять
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
05.06.2020, 09:17  [ТС]
ВЫВОД по многопоточности:
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
К одному линку могут несколько потоков коннектится.
- особенно для загрузки больших файлов актуально...
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Мьютексы выделяют не на потоки, а на данные, доступ к которым необходимо синхронизировать
- потоки планировать отдельно (во избежание ресурсного голода и др проблем многопоточности), доступ к общим данным обеспечивать блокировкой...
не путать понятия "данные" и "потоки"!
P.S.
оборачивать (если ещё не обёрнуто используемым классом) атомарные операции в <atomic>
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
05.06.2020, 10:57
Цитата Сообщение от JeyCi Посмотреть сообщение
P.S.
оборачивать (если ещё не обёрнуто используемым классом) атомарные операции в <atomic>
Ну и, чтоб добить - есть ещё вот такая интересная статья - https://habr.com/ru/post/328362/
2
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
05.06.2020, 19:59  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Ну и, чтоб добить
Кликните здесь для просмотра всего текста

Цитата Сообщение от oleg-m1973 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main(int argc, const char *argv[])
{
 std::vector<std::future<void>> futures;
 for (int i = 0; i < 100; ++i)
 futures.push_back(std::async([i]
 {
 printf("Hello world #%d\n", i);
 }));
for (auto &fut : futures)
 fut.get();
return 0;
}

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <future>
#include <vector>
#include <numeric>
#include <functional>
 
using namespace std;
 
int square(int x) {
    return x * x;
}
 
int main() {
    std::vector<std::future<int>> futures;
    for (int i = 0; i < 3; ++i)
        futures.push_back(std::async(&square, i));
 
    auto res=[](int n, std::future<int> a) {n=a.get(); return n;};
    int sum = std::accumulate(futures.begin(),futures.end(),0,res);     //??????    
    cout << "all threads returned sum of squares: " << sum << endl;
    return 0;
}
error: use of deleted function 'std::future<_Res>::future(const std::future<_Res>&) [with _Res = int]'
в header'e <future>: // Disable copying
? т.е. неужели мы элементы вектора фьючей не сможем использовать в лямбде, например, функции std::accumulate ? (вероятно, функтор называется лямбда здесь)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.06.2020, 19:59

В указанном dsn архитектура драйвера и архитектура приложения не соответствуют друг другу
Добрый день. При запуске программы выскакивает вот такая вот ошибка. В чем может быть проблема и как ее исправить?

архитектура процессоров и компьютерная архитектура,Intel32. для первокурсников
сабж. кто чем может помочь юному,непонемающему в этой области человеку.желательно книгами.спасибо.

Ошибка "в указанном dsn архитектура драйвера и архитектура приложения"
Вот такая ошибка при нажатии на кнопку &quot;Проверить соединение&quot; Я прочитал, что это возможно из за того, что моя система 64, а...

Архитектура бд
Я начинающий php-разраб. Пишу свой проект для своего города. Но встал вопрос о архитектуре. Пользователь создает свою страницу с...

Архитектура БД
Доброго времени суток.Задание написать АИС Учёт абонентов телефонной сети предприятия. Краткое описание предметной области: В состав...


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

Или воспользуйтесь поиском по форуму:
160
Ответ Создать тему
Новые блоги и статьи
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 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-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru