Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116

Продвинутый рандом (возможность задать рандомное число в нескольких диапазонах)

22.09.2014, 22:00. Показов 5058. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
закончил с лабами и от скуки написал продвинутую версию рандома просто короче мне понадобилось чтобы можно было задать рандомное число в нескольких диапазонах, вот и не найдя готового решения написал сам, оценивайте

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
#include <iostream>
#include <vector>
#include <time.h>
#include <conio.h>
 
using namespace std;
 
struct Range
{
    int min;
    int max;
};
 
int random(Range range, ...)
{
    static bool flag = false;
    if (!flag)
    {
        srand(time(0));
        flag = true;
    }
    Range* value = &range;
    vector<int> values;
    while (value->min || value->max)
    {
        values.push_back(value->min + rand() % (value->max - value->min));
        value++;
    }
    return values[rand() % values.size()];
}
 
int main(int argc, char *argv[])
{
    for (int i = 0; i < 10; i++)
    {
        int x = random(Range({ 0, 10 }), Range({ 50, 60 }));
        cout << "x[" << i << "] = " << x << endl;
    }
    return getch();
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.09.2014, 22:00
Ответы с готовыми решениями:

Задать рандомное число
Собственно когда каждый раз жму ctrl-f5, то выводит одно и тоже числоа. Как сделать так, чтобы каждый раз было разные? #include...

Как задать рандомное число от 200 до 800?
Как это правильно оформить? Может кто-нибудь сказать, какой-нибудь простой для понимания алгоритм, по которому задаются диапазоны? Я только...

Как задать Рандомное число в заданном диапазоне
Не всё так просто как написано в шапке ;D Допустим есть число типа double d = 0.100200000000000; Как задать случайное число в...

44
2404 / 1934 / 763
Регистрация: 27.07.2012
Сообщений: 5,573
22.09.2014, 22:55
Студворк — интернет-сервис помощи студентам
Ну и замечу, что нет никакого "автоприведения" типов в С++. Есть неявное приведение. Даже на уровне русского языка это немного разные вещи. Неявно - это как бы что-то, что может быть сделано без ведома автора кода. И не всегда это желаемое действие.
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
22.09.2014, 23:03  [ТС]
Продвинутый рандом (возможность задать рандомное число в нескольких диапазонах) ежели кто не заметил...
0
2404 / 1934 / 763
Регистрация: 27.07.2012
Сообщений: 5,573
22.09.2014, 23:04
Цитата Сообщение от GetHelp Посмотреть сообщение
"error C2955: "std::map": для использования класс шаблон требуется список аргументов шаблон"
C++
1
int x = random(map<int, int>{ -10, 10 }, map<int, int>{ 50, 60 }, map<int, int>{ 100, 120 });
Цитата Сообщение от GetHelp Посмотреть сообщение
хмм а если так?
Не так. Во-первых, функция принимает один map, а ты передаёшь сразу 3.
Во-вторых, зачем сразу map? Map для других целей. Здесь же подойдёт контейнер попроще, например, vector<Range>.
C++
1
int random(vector<Range> ranges)
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
22.09.2014, 23:11  [ТС]
Цитата Сообщение от John Prick Посмотреть сообщение
Не так. Во-первых, функция принимает один map, а ты передаёшь сразу 3.
аа нда... тогда мне кажется лучше вернуться к переменному числу параметров... просто для каждого вызова создавать несколько объектов класса (map не map, да какого хочешь), инициализировать их и потом подавать не комильфо... хотелось бы чтобы вызов функции умещался в одну строку, а не в несколько...
Цитата Сообщение от John Prick Посмотреть сообщение
Во-вторых, зачем сразу map? Map для других целей. Здесь же подойдёт контейнер попроще, например, vector<Range>.
можно, просто так можно обойтись без лишней структуры... да и большая ли разница между map и vector? честно говоря я с map еще не работал, только с вектором... поэтому не очень представляю себе что этот map из себя представляет, знаю только что это контейнер по типу вектора, но на 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
#include <iostream>
#include <vector>
#include <time.h>
#include <conio.h>
#include <map>
 
using namespace std;
 
struct SrandFlag
{
    SrandFlag() { srand(time(0)); };
};
 
int random(map<int, int> ranges)
{
    static SrandFlag flag;
    vector<int> values;
    for (auto range : ranges)
        values.push_back(range.first + rand() % (range.second - range.first));
    return values[rand() % values.size()];
}
 
int main()
{
    for (int i = 0; i < 100; i++)
    {
        int x = random(map<int, int> { {-10, 10}, { 50, 60 } });
        cout << "x[" << i << "] = " << x << endl;
    }
    return getch();
}
0
22.09.2014, 23:19

Не по теме:

Еще продвинутишей рандом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <vector>
#include <random>
#include <ctime>
 
int main()
{
   std::mt19937 gen{static_cast<unsigned>(time(nullptr))};
   std::vector<std::uniform_int_distribution<>> vdistr;
   vdistr.emplace_back(-10,10);
   vdistr.emplace_back(50, 60);
   vdistr.emplace_back(0, vdistr.size()-1);
 
   for (int i = 0; i < 40; ++i)
      std::cout << vdistr[vdistr.back()(gen)](gen) << "\n";
 
   return 0;
}

0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
22.09.2014, 23:21  [ТС]
Цитата Сообщение от DiffEreD Посмотреть сообщение
Еще продвинутишей рандом:
што за страшные букаффки? не пугайте меня так не понял ни строчки...
0
2404 / 1934 / 763
Регистрация: 27.07.2012
Сообщений: 5,573
22.09.2014, 23:22
Цитата Сообщение от GetHelp Посмотреть сообщение
знаю только что это контейнер по типу вектора, но на 2 значения...
map - это ассоциативный контейнер, в нём лежат элементы-пары "ключ-значение". Ну и внутри, соответсвенно, совсем другая "кухня". А вектор, по сути, обёртка над массивом.
Цитата Сообщение от GetHelp Посмотреть сообщение
тогда мне кажется лучше вернуться к переменному числу параметров... просто для каждого вызова создавать несколько объектов класса
Ты их и так создаёшь. Если уж есть такое желание использовать эллипсис, то так или иначе, надо передать число входных параметров в функцию. Без этого никак. Как это сделать, я чуть выше писал.
Но я бы использовал контейнер. Это в твоём примере тебе удобно вызвать всё одной строкой. А если представить, что диапазоны создаются где-то в другом месте кода?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
22.09.2014, 23:22
Лучший ответ Сообщение было отмечено GetHelp как решение

Решение

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
#include <cmath>
#include <iostream>
#include <forward_list>
#include <vector>
#include <utility>
 
using type = int;
 
struct SrandFlag
{
    SrandFlag() { std::srand(time(0)); };
};
 
type random(const std::forward_list<std::pair<type, type>> &ranges)
{
    static SrandFlag flag;
    std::vector<type> values;
    for (auto range : ranges)
        values.push_back(range.first + rand() % std::abs(range.second - range.first));
    return values[rand() % values.size()];
}
 
int main()
{
    for (int i = 0; i < 100; i++)
    {
        const type x = random({ {-10, 10}, { 50, 60 } });
        std::cout << "x[" << i << "] = " << x << std::endl;
    }
}
1
2404 / 1934 / 763
Регистрация: 27.07.2012
Сообщений: 5,573
22.09.2014, 23:25
Цитата Сообщение от GetHelp Посмотреть сообщение
а хотя вот так вроде можно...
С++11 не сильно знаком, но подозреваю, что вот так тоже можно:
C++
1
2
3
4
5
6
7
8
int random(vector<Range> ranges)
//...
int main()
{
//...
        int x = random(vector<Ranges> { {-10, 10}, { 50, 60 } });
//...
}
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
22.09.2014, 23:29  [ТС]
MrGluck, вооо спасибо, так вообще идеально

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
#include <iostream>
#include <vector>
#include <time.h>
#include <conio.h>
#include <forward_list>
 
using namespace std;
 
struct SrandFlag
{
    SrandFlag() { srand(static_cast<unsigned int>(time(0))); };
};
 
int random(const forward_list<pair<int, int>> &ranges)
{
    static SrandFlag flag;
    vector<int> values;
    for (auto range : ranges)
        values.push_back(range.first + rand() % (range.second - range.first));
    return values[rand() % values.size()];
}
 
int main()
{
    for (int i = 0; i < 100; i++)
    {
        int x = random({ {-10, 10}, { 50, 60 } });
        cout << "x[" << i << "] = " << x << endl;
    }
    return getch();
}
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
23.09.2014, 00:36
Дались вам эти вектора и мапы...
С++11 (заменить на нормальный рандом из новой std:: по вкусу):
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
#include <iostream>
#include <random>
#include <ctime>
 
struct Range
{
    int min_;
    int max_;
 
    operator int() const
    {
        return min_ + rand() % (max_ - min_);
    }
};
 
template <typename ...RangeT>
int random(RangeT const & ...args)
{
    static struct srand_randomize
    {
        srand_randomize() { std::srand(time(0)); }
    } randomize_;
 
    int values[] = { args... };
    return values[std::rand() % sizeof...(args)];
}
 
int main()
{
    std::cout << "random: " << random(Range{1, 10}, Range{25, 30}) << std::endl;
}
Добавлено через 15 минут
Чуть безопаснее вариант с лямбдой генератором (контроль, правда не очень явный, но для примера и так сойдет, что переданный тип именно Range или его наследник):
Кликните здесь для просмотра всего текста

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
struct Range
{
    int min;
    int max;
};
 
template <typename ...RangeT>
int random(RangeT const & ...args)
{
    static struct srand_randomize
    {
        srand_randomize() { std::srand(time(0)); }
    } const randomize_;
 
    auto gen = [](Range const & x)
    {
        return int(x.min + rand() % (x.max - x.min));
    };
    int const values[] = { gen(args)... };
    return values[std::rand() % sizeof...(args)];
}
 
int main()
{
    std::cout << "random: " << random(Range{25, 30}, Range{1, 10}) << std::endl;
}
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
23.09.2014, 00:52
GetHelp, DrOffset, вы конечно меня извините, что со своим уставом, но у меня понятие генератора псевдослучайных чисел немного другое. А именно при десяке итераций
C++
1
random(Range{ 0, 1 }, Range{ 100, 30000 })
генерируется половина 0, хотя наличие нуля должно быть очень маловероятно.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
23.09.2014, 01:07
Цитата Сообщение от КОП Посмотреть сообщение
генерируется половина 0, хотя наличие нуля должно быть очень маловероятно.
Потому что не надо использовать std::rand, он устарел и не годится для серьезного применения, см. ответ DiffEreD.

Добавлено через 5 минут
КОП, А, я понял что тебя удивляет.
Ну а чего ты хотел? Последний бросок нам дает 50/50 первый или второй элемент (соответственно либо [0,1], либо другое число из второго диапазона). Здесь нужен по-хорошему другой алгоритм совсем.
Лично я вообще не утверждал, что этот генератор рабочий. Я привел только вариант оптимизации функции ТС.
1
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
23.09.2014, 01:18
DrOffset, я то в курсе почему) и это был не пост удивления. Я к тому и вел, что пока вы там аргументы мусолите, алгоритм тоже косячит.
Цитата Сообщение от DrOffset Посмотреть сообщение
Я привел только вариант оптимизации функции ТС.
я так и понял, потому и решил вставить свои 5 копеек.
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
23.09.2014, 01:33
Цитата Сообщение от КОП Посмотреть сообщение
Я к тому и вел, что пока вы там аргументы мусолите, алгоритм тоже косячит.
ИМХО, сделать правильную функцию на прерывистом диапазоне распределения не так-то просто (была идея дать веса каждому броску в зависимости от широты диапазона, но это бездоказательно).
Я лично пока не готов продолжать конструктивную беседу на эту тему. Если будут идеи - напишу.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
23.09.2014, 01:39
DrOffset, что если найти общее число возможных вариантов (кол-во чисел во всех диапазонах), сгенерировать рандомное число от 0 до этого кол-ва. А потом вернуть соответствующее число из соответствующего диапазона?
PS: пробную функцию пока нет времени писать.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
23.09.2014, 02:10
Цитата Сообщение от КОП Посмотреть сообщение
DrOffset, что если найти общее число возможных вариантов (кол-во чисел во всех диапазонах), сгенерировать рандомное число от 0 до этого кол-ва. А потом вернуть соответствующее число из соответствующего диапазона?
У меня тоже было много таких идей, но все они нуждаются в строгом математическом обосновании.
Вот набросок идеи из предыдущего сообщения (заодно, если кому интересно, сделал контроль типа Range).
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
#include <iostream>
#include <random>
#include <ctime>
 
struct Range
{
    int min;
    int max;
};
 
template <typename... T>
struct and_
    : std::true_type
{};
 
template <typename First, typename... Other>
struct and_<First, Other...>
    : std::integral_constant<bool, First::value && and_<Other...>::value>
{};
 
template < typename ...RangeT
         , typename = typename std::enable_if<
                    and_<
                        std::is_same<RangeT, Range>...
                    >::value
                >::type
>
int random(RangeT const &...args)
{
    static std::mt19937 mt(static_cast<unsigned>(time(nullptr)));
    auto gen = [](Range const & x, std::mt19937 & g)
    {
        return std::uniform_int_distribution<int>(x.min, x.max)(g);
    };
    int const values[] = { gen(args, mt)... };
    std::discrete_distribution<int> idx({ std::fabs(args.min - args.max)... });
    return values[idx(mt)];
}
 
int main()
{
    for(int i = 0; i < 10; ++i)
    {
        std::cout << random(Range{ 0, 99 }, Range{ 100, 30000 }) << std::endl;
    }
}
1
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
23.09.2014, 03:05
Цитата Сообщение от DrOffset Посмотреть сообщение
набросок идеи
что-то у меня не то... забросали шаблонными функциями, сейчас уже сил нет разбираться, спать пора.

вот что выводит:
Ошибка 1 error C2668: fabs: неоднозначный вызов перегруженной функции
Ошибка 2 error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции
Цитата Сообщение от DrOffset Посмотреть сообщение
нуждаются в строгом математическом обосновании
честно говоря, недолюбливаю строгие обоснования. Да и что вы под этим понимаете?

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

Добавлено через 7 минут
не удержался, воткнул явное преобразование, результат такой:
диапазоны - 0..2, 50..100
Тест в 10000 итераций.
числа 0..2 встретились по ~120 раз,
50..100 по ~190 раз.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
23.09.2014, 13:11
Цитата Сообщение от КОП Посмотреть сообщение
честно говоря, недолюбливаю строгие обоснования. Да и что вы под этим понимаете?
Понимаю в прямом смысле. Доказать, что распределение равномерно на всем диапазоне (для этого, кстати, надо знать как реализованы ГПСЧ в std:: ).
Но вообще, я говорил про свои мысли, т.к. не рискну ничего утверждать или советовать, пока не буду уверен на 100%.
От тебя я никаких доказательств не требую.
То что я выше выложил - это баловство.
Давай пока исходить из экспериментов. Предложи вариант реализации, посмотрим как он себя ведет.

Цитата Сообщение от КОП Посмотреть сообщение
что-то у меня не то...
Компилятор какой?

Цитата Сообщение от КОП Посмотреть сообщение
не удержался, воткнул явное преобразование, результат такой:
Вот тест. В принципе по нему видно на глаз, что 0, 1, 2 - появляются гораздо реже, чем остальные числа. Это уже неправильно, т.к. не сответствует равномерному распределению. Хотя, наверное, где-то в сферическом вакууме можно найти задачу, где такое поведение будет полезно.

Цитата Сообщение от КОП Посмотреть сообщение
что если найти общее число возможных вариантов (кол-во чисел во всех диапазонах), сгенерировать рандомное число от 0 до этого кол-ва. А потом вернуть соответствующее число из соответствующего диапазона?
На первый взгляд должно работать. А что делать, если мы попали между диапазонами? Аппроксимировать?

Добавлено через 2 часа 48 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
А что делать, если мы попали между диапазонами? Аппроксимировать?
Выдалась свободная минутка.
КОП, Я неправильно сперва понял твою идею.
Вот моя реализация:
Тест.
Похоже то, что нужно .
Добавлено через 23 минуты
Заменил реализацию, на чуток поприличнее (корректность цикла обеспечивается по условию суммы + защита он перепутанных min и max):
Кликните здесь для просмотра всего текста
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
struct Range
{
    int min;
    int max;
};
 
template <typename... T>
struct and_
    : std::true_type
{};
 
template <typename First, typename... Other>
struct and_<First, Other...>
    : std::integral_constant<bool, First::value && and_<Other...>::value>
{};
 
template < typename ...RangeT
         , typename = typename std::enable_if<
                    (and_<
                        std::is_same<RangeT, Range>...
                    >::value) && (sizeof...(RangeT) > 0)
                >::type
>
int random(std::mt19937 & mt, RangeT const & ...args)
{
    int sum = 0;
    struct MRange
    {
        const int min, max;
        const int distance;
 
        MRange(int min, int max, int & sum)
            : min(min), max(max), distance(std::abs(min - max))
        {
            sum += distance;
        }
    } const ranges[] =
    {
        MRange(args.min, args.max, sum)...
    };
    int index = std::uniform_int_distribution<int>(0, sum)(mt);
 
    auto check_ = [&index](int ret, MRange const & x)
    {
        bool const f = ret > std::max(x.max, x.min);
        if(f)
        {
            index -= x.distance;
        }
        return f;
    };
    size_t i = 0;
    int pos;
    do
    {
        pos = std::min(ranges[i].min, ranges[i].max) + index;
    }
    while(check_(pos, ranges[i++]));
 
    return pos;
}
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
23.09.2014, 18:58
Цитата Сообщение от DrOffset Посмотреть сообщение
Предложи вариант реализации, посмотрим как он себя ведет.
чувствую мой вариант уже не потребуется
Цитата Сообщение от DrOffset Посмотреть сообщение
Компилятор какой?
студия 13, там просто явно надо было привести тип и все норм.
Цитата Сообщение от DrOffset Посмотреть сообщение
Доказать, что распределение равномерно на всем диапазоне
Цитата Сообщение от DrOffset Посмотреть сообщение
для этого, кстати, надо знать как реализованы ГПСЧ
ГПСЧ пусть разработчики языка реализуют, я лишь принимаю на веру, что он работает как надо и доказываю уже отталкиваясь от этого.
Цитата Сообщение от DrOffset Посмотреть сообщение
Похоже то, что нужно .
Именно! даже с нулевыми диапазонами работает. Честно говоря, никогда не разбирал код с таким количеством шаблонов + переменное число аргументов. Есть над чем подумать. Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.09.2014, 18:58
Помогаю со студенческими работами здесь

Рандомное проставление и суммирование целых чисел в ячейках в выборных диапазонах в Excel
Доброго времени суток! За ранее извиняюсь если не правильно обозвал тему и за орфографические ошибки =( Я не шарю в программировании...

Дать программе возможность самостоятельно выбрать число из нескольких введенных пользователем
Есть поля для ввода текста и есть кнопка рядом. Я допустим пишу в поле ввода текст допустим ну то есть повторяю, например, 1 потом 5 потом...

Подсчёт количества текстового значения ячейки в нескольких диапазонах
Помогите пожалуйста с формулой подсчёта... При подсчёте в одном диапазоне я использовал формулу =СЧЁТЕСЛИМН($B$3:$J$19;B22). В ячейке В22...

Как сделать, чтобы random работал в нескольких диапазонах?
Нужно отобразить в одном массиве цифры и буквы в случайном порядке и потом использывать группировку элементов массива. Уже на первом...

Задать рандомное направление шара
Необходимо задать рандомное направление шара, подскажите как это делать


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru