С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12
1

Определение функции максимально быстрого перемещения на заданное расстояние

03.03.2023, 14:30. Показов 1039. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Точка перемещается от начала координат до расстояния L. Помимо этого расстояния известна максимально возможная скорость движения, а также максимальное ускорение. Задача: определить гладкую или кусочно-гладкую функцию скорости, при которой точка будет перемещаться за минимально возможное время. В начале и конце маршрута скорость должна равняться 0. На выход выдать массив T, X, V, A.

У меня просто кончились идеи реализации алгоритма. Были такие версии:
1) Движение с переменным ускорением можно выразить как интеграл по v(t), значение которого на концах известны, а площадь, т.е. значение интеграла - пройденный путь. Но чтоб работать с интегралом нужно знать пределы интегрирования, а это время начало и время старта. Разумеется это неизвестно.
2) Сымитировать релейный регулятор. Т.е. ускоряемся в каждой точке до максимального ускорения и максимальной скорости, а где надо тормозим. Но тогда будут разрывы и непонятно что с концом.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2023, 14:30
Ответы с готовыми решениями:

Список для максимально быстрого поиска по нему
Сейчас у меня есть два списка строк - List<string> один MainBase, второй TempBase, мне надо выбрать...

Добавить папки для быстрого копирования и перемещения файлов. Linux Mint 13 Maya
Linux Mint 13 Cinnamon "Maya". Здравствуйте. Подскажите, возможно ли добавить сюда: для...

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

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

Время заданное для перемещения между операциями
Здравствуйте В цех поступают заготовки через 3+-1 мин. Вначале деталь обрабатывается на...

16
Модератор
Эксперт CЭксперт С++
5202 / 2919 / 1509
Регистрация: 14.12.2018
Сообщений: 5,261
Записей в блоге: 1
03.03.2023, 17:38 2
rerre, как понимать величины в вашей задаче ? И их математические отношения ?
0
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12
03.03.2023, 18:19  [ТС] 3
Volga_, возможно я совсем не так понял ваш вопрос но попытаюсь. Условимся таким образом:
L - расстояние, которое необходимо пройти (м)
Vmax - максимально возможная скорость (м/с)
Amax - максимально возможное ускорение (м/(с^2)
Начальная координата 0. Конечная (что логично) - L
0
Модератор
Эксперт CЭксперт С++
5202 / 2919 / 1509
Регистрация: 14.12.2018
Сообщений: 5,261
Записей в блоге: 1
03.03.2023, 18:47 4
rerre, кажется, нужно применять "вариационное исчисление" ?
0
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,520
Записей в блоге: 1
03.03.2023, 19:05 5
если я понял задачу, то решение простое,
выбираем
ускорение = максимальное ускорение, направление = на цель, не изменяем их на протяжении маршрута. - приедем быстрее всего!
0
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12
03.03.2023, 19:12  [ТС] 6
Volga_, Честно говоря, впервые читаю про это, но ближайшее похоже, что наше из этого - это задача о брахистохроне. Однако там рассматривается движение под действием постоянной силы тяжести, а это не туда.

Добавлено через 2 минуты
Kuzia domovenok, Так действительно можно было бы решить, но в условии указано, что в конце маршрута скорость должна быть равной 0. Это значит, что помимо достижения максимумов по ускорению и скорости нужно предусмотреть торможение, дабы в конечной точке остановиться. Это то, что и помешало решить задачу как в простейшей робототехнике с релейным регулятором
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
03.03.2023, 19:21 7
Цитата Сообщение от rerre Посмотреть сообщение
Так действительно можно было бы решить
Ну ну совсем так, функция скорости вам нужна гладкая по условию. А порядок гладкости - другой вопрос. Я не спец в мат. анализе, можно решить просто - до середины пути двигаемся с максимальным ускорением или максимальной скоростью, вторую половину пути проходим так же, только "наоборот". При этом получим соблюдение всех условий, кроме гладкости - кривая скорости будет ломанной. А сгладить её можно разложив в ряд фурье, и чем выше дискретизация, тем точнее получится.
0
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12
03.03.2023, 21:11  [ТС] 8
zayats80888, Пока набросал расчет движения только в тех случаях, при которых время разгона не будет превышать половину пути. Но по непонятной мне причине где-то в конце постоянно теряю 1-2 метра от нужного.
Для примера, L = 100, Vmax = 10, Amax = 2 => конечная дистанция 98 метров.

Как это сглаживать пока ума не приложу.

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
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
 
 
int main()
{
    //freopen("output.csv","w",stdout);
    float L, Vmax, Amax, x = 0, current_V = 0, current_A = 0, t = 0, h = 0.1;
    cin>>L>>Vmax>>Amax;
    float t_Vmax = Vmax/Amax; // время до достижения максимальной скорости
    float s_Vmax = (Amax*pow(t_Vmax,2))/2; // дистанция разгона/торможения
    if (s_Vmax < L/2){
    float t_mid = t_Vmax+(L/2-s_Vmax)/Vmax; // время до достижения середины пути
    float t_braking = t_mid + (t_mid-t_Vmax); // время до тороможения
    float t_all = t_Vmax + t_braking; // суммарное время
    //cout<<t_all<<" "<<t_Vmax<<" "<<t_mid<<" "<<t_braking<<" "<<s_Vmax<<endl;
    cout<<"X"<<";"<<"V"<<";"<<"A"<<";"<<"t"<<endl;
    for (float i = 0; i<=t_all; i+=h)
    {
        if(i<=t_Vmax) // если не достигли времени набора критичной скорости
        {
            current_A = Amax;
            current_V = current_A*i;
            x = (current_A*pow(i,2))/2;
        }
        else
        {
            if(i<t_braking) // если не достигли времени торможения
            {
                current_A = 0;
                current_V = Vmax;
                x += (current_V*h);
            }
            else // тормозим
            {
                current_A = -Amax;
                current_V = current_V + current_A*h;
                x += current_V*h + (current_A*pow(h,2))/2;
            }
        }
        cout<<x<<";"<<current_V<<";"<<current_A<<";"<<i<<endl;
    }
    }
             return 0;
}
0
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,520
Записей в блоге: 1
03.03.2023, 21:21 9
Цитата Сообщение от rerre Посмотреть сообщение
Kuzia domovenok, Так действительно можно было бы решить, но в условии указано, что в конце маршрута скорость должна быть равной 0.
первую половину пути разгоняемся с максимальным ускорением, вторую - тормозим. Не сильно пострадлало решение в простоте с этим дополнением.
0
3719 / 2648 / 761
Регистрация: 29.06.2020
Сообщений: 9,800
03.03.2023, 21:36 10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
первую половину пути разгоняемся с максимальным ускорением, вторую - тормозим
Так может не получится.
Если максимального ускорения будет недостаточно для достижения максимальной скорости.

rerre,
Походу задачка чисто математическая.
Чой-та оно тута делает ?

Добавлено через 1 минуту
Ну да, там же загвоздка в типе функции, гладкой...

Добавлено через 7 минут
rerre,
Цитата Сообщение от rerre Посмотреть сообщение
Пока набросал расчет движения
Где, собственно ваша функция (мат.)?
0
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12
03.03.2023, 21:44  [ТС] 11
Цитата Сообщение от SmallEvil Посмотреть сообщение
Если максимального ускорения будет недостаточно для достижения максимальной скорости.
теоретически, и тут смысл вроде есть. Просто разгоняться надо либо до достижения максимальной скорости. Либо до середины пути. Если ускорения хватает, то выходим на плато и тормозим. Иначе половину пути разгоняемся, а вторую тормозим.

Цитата Сообщение от SmallEvil Посмотреть сообщение
Где, собственно ваша функция (мат.)?
Одной функцией описать это не смог.
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
03.03.2023, 22:56 12
Цитата Сообщение от rerre Посмотреть сообщение
Но по непонятной мне причине где-то в конце постоянно теряю 1-2 метра от нужного.
У вас цикл по float, сделайте нормально.
Что-то типа такого(не проверял)
Кликните здесь для просмотра всего текста
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
#include <cassert>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
 
// кусочная функция
class Function {
    // тут только V(t), остальное сами добавьте
    std::vector<std::pair<double, double>> m_fn;
 
public:
    Function(double vMax, double aMax, double L) {
        m_fn.emplace_back(0.0, 0.0);
        double halfL = L * 0.5;
        double tvMax = vMax / aMax;
        double lvMax = aMax * tvMax * tvMax * 0.5;
        if (lvMax >= halfL) {
            double dt = std::sqrt(halfL / aMax * 2.0);
            m_fn.emplace_back(dt, aMax * dt);
            m_fn.emplace_back(dt + dt, 0.0);
        } else {
            m_fn.emplace_back(tvMax, vMax);
            double dt = (halfL - lvMax) / vMax * 2.0;
            m_fn.emplace_back(dt + tvMax, vMax);
            m_fn.emplace_back(dt + tvMax + tvMax, 0.0);
        }
        assert(m_fn.size() > 1);
        assert(std::is_sorted(m_fn.begin(), m_fn.end()));
    }
 
    std::pair<double, double> minMaxArg() const {
        return {m_fn.front().first, m_fn.back().first};
    }
 
    double get(double t) const
    {
        auto it = std::lower_bound(m_fn.begin(),
                                   m_fn.end(),
                                   t,
                                   [](auto const &p, double t)
                                   { return p.first < t; });
        if (it == m_fn.end())
            return m_fn.back().second;
        else if (it == m_fn.begin())
            return m_fn.front().second;
 
        auto prev = it - 1;
        return std::lerp(prev->second, it->second, (t - prev->first) / (it->first - prev->first));
    }
};
 
int main()
{
    Function f(10, 2, 100);
    auto dt = f.minMaxArg();
    std::cout << "t = " << dt.second << '\n';
    for (int i = 0; i < 100; ++i)
        std::cout << f.get(std::lerp(dt.first, dt.second, i / 99.0)) << '\n';
}

Цитата Сообщение от rerre Посмотреть сообщение
Как это сглаживать пока ума не приложу.
Ну вы сначала определите критерий сглаженной функции, как дифференцировать её будете и т.д.
1
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12
04.03.2023, 00:33  [ТС] 13
Цитата Сообщение от zayats80888 Посмотреть сообщение
Что-то типа такого(не проверял)
Спасибо. Для меня пока очень сложный синтаксис, но буду потихоньку разбираться
0
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12
06.03.2023, 02:42  [ТС] 14
zayats80888, помозговал выходные и пришел к выводу о том, что можно решить задачу без дополнительного сглаживания, пользуясь только определениями гладкой и кусочно-гладкой функциями. Гладкость обеспечивается непрерывностью производной функции. Соответственно, для того, чтобы V(t) была гладкой - a(t) должна быть непрерывной линейной или кусочно-линейной функцией. С такой функцией ускорения остается определить путь, который необходимо пройти за время разгона/торможения, а это двойной интеграл, который спокойно считается численными методами. Расчет скорости и пройденного пути - просто комбинации s v t.

Переделал код. И вроде бы складно, но все равно либо завышает по скорости или пути, либо занижает (в зависимости от случая). Стоит ли вообще в эту сторону идти или искать ответ в другом месте?
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <cassert>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
#include <fstream>
using namespace std;
 
 
double lerp(double a, double b, double t)
{
    return(a+t*(b-a));
}
 
double f(double x, double y)
{
    return y*x*x*0.5;
}
double integ(double a1,double b1,double a2,double b2, int n1,int n2)
{
    double I=0,h1=(b1-a1)/n1,h2=(b2-a2)/n2;
    for (double x=a1;x<=b1;x+=h1)
    {
        for (double y=a2;y<=b2;y+=h1)
            I+=h1*h2*f(x+h1/2,y+h2/2);
 
    }
        return I;
 
}
 
// кусочная функция
class Function {
 
    vector<pair<double, double>> m_fn; // A(t)
 
 
public:
    Function(double vMax, double aMax, double L) {
        m_fn.emplace_back(0.0, aMax);
 
        double halfL = L * 0.5;
        double tvMax = (vMax / aMax)*2; /// время разгона до максимальной скорости
        double lvMax = integ(0, tvMax, 0, aMax, 100, 100); /// lvMax - путь, пройденный до достижения максимальной скорости
        if (lvMax >= halfL) { /// если путь разгона больше либо равен половине пути, тогда тормозим
            double dt = tvMax + (halfL - lvMax) / vMax; /// здесь dt - время на половине пути
            m_fn.emplace_back(dt, 0);
 
            m_fn.emplace_back(dt + dt, -aMax);
 
        } else {
            m_fn.emplace_back(tvMax, 0); /// в конец время разгона ускорение = 0
 
 
            double dt = (halfL - lvMax) / vMax * 2.0; /// здесь dt - время движения с максимальной скоростью, но без ускорения
            m_fn.emplace_back(dt + tvMax, 0);
 
            m_fn.emplace_back(dt + tvMax + tvMax, -aMax);
 
        }
        assert(m_fn.size() > 1);
        assert(is_sorted(m_fn.begin(), m_fn.end()));
    }
 
    pair<double, double> minMaxArg() const {
        return {m_fn.front().first, m_fn.back().first};
    }
 
    double get(double t) const
    {
        auto it = lower_bound(m_fn.begin(), m_fn.end(),t,[](auto const &p, double t){ return p.first < t; }); /// it -
        if (it == m_fn.end())
            return m_fn.back().second;
        else if (it == m_fn.begin())
            return m_fn.front().second;
 
        auto prev = it - 1;
        return lerp(prev->second, it->second, (t - prev->first) / (it->first - prev->first));
    }
 
};
 
int main()
{
    //freopen("output.csv","w",stdout);
    Function f(10, 2, 300);
    auto dt = f.minMaxArg();
    cout << "t" << ";" << "a" << "; " << "v" << "  " << "s" <<endl;
    double v = 0, a = 0, s =0, t = 0;
 
    for (int i = 0; i < 100; ++i)
    {
 
        t = lerp(dt.first, dt.second, i / 99.0);
        a = f.get(t);
        v += a * ((dt.second-dt.first)/100);
        s += v * ((dt.second-dt.first)/100);
        cout << t << "; " << a << "; " << v << "; "  << s<<endl;
 
    }
}
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
06.03.2023, 16:06 15
Лучший ответ Сообщение было отмечено rerre как решение

Решение

Цитата Сообщение от rerre Посмотреть сообщение
Гладкость обеспечивается непрерывностью производной функции.
Допустим, просто в точках "излома" вообще говоря производная не существует, т.к. левая и правая производная не равны.
Цитата Сообщение от rerre Посмотреть сообщение
Переделал код. И вроде бы складно, но все равно либо завышает по скорости или пути, либо занижает (в зависимости от случая).
Численное интегрирование не точно, но чем меньше шаг, тем точнее.
Цитата Сообщение от rerre Посмотреть сообщение
Соответственно, для того, чтобы V(t) была гладкой - a(t) должна быть непрерывной линейной или кусочно-линейной функцией. С такой функцией ускорения остается определить путь, который необходимо пройти за время разгона/торможения, а это двойной интеграл, который спокойно считается численными методами.
1) По условию требуется "гладкость" только для функции скорости, и если пользоваться только критерием непрерывности, то функция ускорения может иметь разрывы первого рода.
2) Не вижу необходимости интегрирования, можно кусочные функции для всех значений сделать. Тогда для скорости и ускорения использовать линейную интерполяцию, а для перемещения считать по фрмуле, т.к. там квадратичная зависимось.

Например, так:
c++
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <cassert>
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <cmath>
 
struct Value {
    double a, v, l;
};
// кусочная функция
class Function {
 
    std::vector<std::pair<double, Value>> m_fn;
 
public:
    Function(double vMax, double aMax, double L) {
        Value val{};
        m_fn.emplace_back(0.0, val);
        double halfL = L * 0.5;
        double tvMax = vMax / aMax;
        double lvMax = aMax * tvMax * tvMax * 0.5;
        val.a = aMax;
        m_fn.emplace_back(0.0, val);
        if (lvMax >= halfL) {
            double dt = std::sqrt(halfL / aMax * 2.0);
            val.v = aMax * dt;
            val.l = halfL;
            m_fn.emplace_back(dt, val);
            val.a = -aMax;
            m_fn.emplace_back(dt, val);
            val.l = L;
            val.v = 0;
            m_fn.emplace_back(dt + dt, val);
        } else {
            val.v = vMax;
            val.l = lvMax;
            m_fn.emplace_back(tvMax, val);
            val.a = 0;
            m_fn.emplace_back(tvMax, val);
            double dt = (halfL - lvMax) / vMax * 2.0;
            val.l = L - lvMax;
            m_fn.emplace_back(dt + tvMax, val);
            val.a = -aMax;
            m_fn.emplace_back(dt + tvMax, val);
            val.v = 0;
            val.l = L;
            m_fn.emplace_back(dt + tvMax + tvMax, val);
            val.a = 0;
            m_fn.emplace_back(dt + tvMax + tvMax, val);
        }
    }
 
    std::pair<double, double> minMaxArg() const {
        return {m_fn.front().first, m_fn.back().first};
    }
 
    Value get(double t) const
    {
        auto it = std::lower_bound(m_fn.begin(),
                                   m_fn.end(),
                                   t,
                                   [](auto const &p, double t)
                                   { return p.first < t; });
        if (it == m_fn.end())
            return m_fn.back().second;
        else if (it == m_fn.begin())
            return m_fn.front().second;
 
        auto prev = it - 1;
        double dt = (t - prev->first);
        double param = dt / (it->first - prev->first);
        return {
            std::lerp(prev->second.a, it->second.a, param),
            std::lerp(prev->second.v, it->second.v, param),
            prev->second.v * dt + prev->second.a * dt * dt * 0.5 + prev->second.l,
        };
    }
};
 
int main()
{
    Function f(3, 5, 4);
    auto dt = f.minMaxArg();
    constexpr int width = 10;
    std::cout << std::setw(width) << 'T' << ' '
              << std::setw(width) << 'A' << ' '
              << std::setw(width) << 'V' << ' '
              << std::setw(width) << 'L' << std::endl;
    for (int i = 0; i < 100; ++i) {
        double t = std::lerp(dt.first, dt.second, i / 99.0);
        Value val = f.get(t);
        std::cout << std::setw(width) << t << ' '
                  << std::setw(width) << val.a << ' '
                  << std::setw(width) << val.v << ' '
                  << std::setw(width) << val.l << std::endl;
    }
}

output

Bash
1
$ gnuplot -e "set term png size 600, 400; set output 'out.png'; plot '< ./test' using 'T':'A' with lines lw 2, '' using 'T':'V' with lines lw 2, '' using 'T':'L' with lines lw 2"
f(5, 1, 4)
Определение функции максимально быстрого перемещения на заданное расстояние


f(3, 5, 4)
Определение функции максимально быстрого перемещения на заданное расстояние
2
2 / 1 / 1
Регистрация: 03.03.2023
Сообщений: 12
06.03.2023, 17:53  [ТС] 16
Цитата Сообщение от zayats80888 Посмотреть сообщение
Например, так:
В данных случаях графики V(T) не являются гладким, т.к. существует скачок, появившийся в следствие устранения разрыва 1 рода.

Я стремлюсь к чему-то такому (рисунок ниже). Собственно отсюда и выскочил интеграл. То, что ускорение имеет разрыв перед нулевым значением, является следствием того, что определенное время разгона/торможения является неточным.


Цитата Сообщение от zayats80888 Посмотреть сообщение
Не вижу необходимости интегрирования, можно кусочные функции для всех значений сделать
Да. Ускорение можно представить кусочно-линейной функцией:
a(t) = (-aMax/tvMax)*t + aMax при 0 <= t <= tvMax
a(t) = 0 при tvMax < t <= tvMax + (halfL - lvMax) / vMax * 2.0
a(t) = (-aMax/tvMax)*(t-(halfL - lvMax) / vMax * 2.0) + aMax при tvMax + (halfL - lvMax) / vMax * 2.0 <= t <= (halfL - lvMax) / vMax * 2.0 + tvMax * 2

Однако и здесь для принятия решения о пути разгона нужно интегрирование.

Цитата Сообщение от zayats80888 Посмотреть сообщение
Численное интегрирование не точно, но чем меньше шаг, тем точнее.
Ошибка, которая вызывает неточность связана с неточностью моего варианта определения времени разгона. Считал я его исходя из физического смысла интеграла, тогда задача определения времени сводится к определению такого катета прямоугольного треугольника, что его площадь будет равна площади под графиком в случае постоянного ускорения. Но расчетное значение завышено
Миниатюры
Определение функции максимально быстрого перемещения на заданное расстояние  
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
06.03.2023, 18:36 17
Цитата Сообщение от rerre Посмотреть сообщение
В данных случаях графики V(T) не являются гладким,
Но является кусочно-гладким, по крайней мере по определению из википедии.
0
06.03.2023, 18:36
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.03.2023, 18:36
Помогаю со студенческими работами здесь

Определить, при каком х расстояние между f1 (x) и f2 (x) максимально
Помогите пожалуйста с двумя задачами: 1) Значения функции f1(х)=3+sqr(sin(x/2)) и...

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

Определить номера станций, расстояние между которыми максимально
:)В массиве T содержаться данные о расстоянии меджу парами станций , расположенных на участке...

Определение наименьшего времени перемещения
Здравствуйте! Помогите пожалуйста с дальнейшей формализацией следующей задачи (если она необходима)...

Найти пару отрезков, расстояние между центрами которых максимально
Дано n отрезков на плоскости, заданных координатами своих концов. Найти пару отрезков, расстояние...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru