Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Алгоритмы

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8

Открыть новую тему     Написать ответ в эту тему

akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
все вопросы по алгоритмам, их созданию и сопровождению без привязки к какому-нибудь конкретному языку программирования...
ну или с привязкой :)
дать идею, помочь с математикой или, если вам не помогли в профильном топе...
 
по возможности используйте псевдокод в своих сообщениях
 
ссылки
 
  •  "ebook'и -- сборники алгоритмов"
     


    только помните, что тут никто ничего _делать за вас_ не обязан!
    для этого есть специальные места со своими ценами...

  • Всего записей: 21360 | Зарегистр. 06-12-2002 | Отправлено: 09:28 16-12-2016 | Исправлено: akaGM, 09:03 12-07-2019
    Forumman



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как в C++ реализовать в игре алгоритм ставок.
     
    1. Есть 100% потеря, любая сумма если не выигрыш = 100% потеря
    2. Есть плавающее значение именуемое "Текущий % прибыльности", от этого значения зависит сколько от суммы ставки попадет средств на счет. Например: Текущий % прибыльности=80%, это значит, что при выигрыше от ставки 10 на счет прибавится 8 на 20% меньше
    3. Есть желание ставить так, чтоб предыдущий проигрыш учитывался ставкой согласно этому % прибыльности, чтоб при выигрыше сумма получаемая на счет перекрывала прошлый проигрыш, иными словами, что-то вроде системы ставок по Мартингейлу
    4. Надо чтоб можно было указать программе, что ставить с расчетом % прибыльности + желаемый % в случае выигрыша от текущей ставки (например: 9 + 2.5%, но чтоб эти 9 перекрывали убыток согласно % прибыльности, а этот дополнительно указанный % чтоб брался от текущей ставки).
     
    Помогите это записать в коде лаконичнее, чтоб дополнительный % который я хочу получить от текущей ставки (например, 2.5% сверху) чтоб можно было включать чекбоксом или выбрать в выпадающем меню. Еще бы понять как этот процесс записать формулой.
     
    Учусь основам, помогите понять как вернее это воссоздать в коде) Очень поможете, если подскажете. Всех благ!)

    Всего записей: 284 | Зарегистр. 24-09-2008 | Отправлено: 16:06 12-02-2019 | Исправлено: Forumman, 16:21 12-02-2019
    stixik

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Подскажите как в C++ реализовать в игре алгоритм ставок.

     
    Хорошо бы увидеть Ваши попытки реализовать это в коде.

    Всего записей: 39 | Зарегистр. 18-01-2009 | Отправлено: 14:33 14-02-2019
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    имеется рациональное число X, надо "восстановить" целые числитель и знаменатель дроби
     
    X = N / M
     
    задача немного упрощается тем, что искомые числа лежат в известных диапазонах
     
    No..Nn
    Mo..Mm
     
    НОДы, НОКи, всё забыл и совсем запарился...
     
    у кого-то есть какие-нибудь соображения?

    Всего записей: 21360 | Зарегистр. 06-12-2002 | Отправлено: 00:51 12-07-2019
    Alex_Piggy

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Доброе время, akaGM
    Единственное, что в голову приходит - перевести в вид N = M * X и перебирать M
    В общем, на JScript что-то такое...

    Код:
     
    var X = 11/97;  
    var d  = 0.001
    var Mmin = 0; var Mmax = 400
    var Nmin = 0; var Nmax = 40
    var res  = []; var Ntmp, Nrnd, Ndif;
    for (i = Mmin; i <= Mmax; i++) {
      Ntmp = X * i;
      if ( Ntmp < (Nmin - d)) continue;
      if ( Ntmp > (Nmax + d)) break;
      Nrnd  = Math.round (Ntmp);
      Ndiff = Math.abs(Ntmp-Nrnd);
      if (Ndiff < d) res.push([i,Nrnd,Ndiff]);
    }
    WScript.Echo(res.join('\r\n'));
     

    PS. Выше была аналогичная задача от r u b o a r d m a n
    UPD - немного поправлены границы.

    Всего записей: 1813 | Зарегистр. 07-08-2002 | Отправлено: 06:57 12-07-2019 | Исправлено: Alex_Piggy, 07:01 12-07-2019
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alex_Piggy
     
    сам я очень похоже исполнил :)
    и ещё домножал на 10^16 и потом, через НОД находил,
    а хотелось бы аналитики, "на бумажке" :)
    но понимаю уже, что всё равно численно придётся...
     
    спасибо за внимание...
     
    Добавлено:
    res.push([i,Nrnd,Ndiff])
     
    а это что в JS? :)
     
    пойду в шапку...

    Всего записей: 21360 | Зарегистр. 06-12-2002 | Отправлено: 08:22 12-07-2019
    Alex_Piggy

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Array.push(val) в JS - это  
    vector::push_back(val) в C++.
    Можно попробовать цикл итераций с (множитель)= 1/ (дробная часть) - но так легко улететь в сторону на точности...

    Всего записей: 1813 | Зарегистр. 07-08-2002 | Отправлено: 09:41 12-07-2019
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    vector::push_back(val) в C++.
    зашибись...
    ещё какие будут варианты? :)
    можно из
    -паскаль
    -фортран

    -псевдокод
    :)
     
    задача дико упростилась, т.к. в ТЗ прописаноо Nmax, Mmax <= 10,
    а просмотр таблицы 10х10 и нахождение ближайшего значения -- полная фигня...

    Всего записей: 21360 | Зарегистр. 06-12-2002 | Отправлено: 10:27 12-07-2019
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM

    Цитата:
    ещё какие будут варианты?

    можно много на чем... а на чем надо-то?
    powershell не надо?
     

    Цитата:
    т.к. в ТЗ прописаноо Nmax, Mmax <= 10

    Если для знаменателя множество конечно, то для числителя, это может быть бесконечное множество в отрицательных целых числах, при этом условие будет выполнено. Т.е. ограничивать придется рациональные числа, чтобы попасть в диапазон...
     
    А что в итоге требуется-то в задаче?

    Всего записей: 3173 | Зарегистр. 03-02-2009 | Отправлено: 17:49 12-07-2019
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2

    Цитата:
    можно много на чем... а на чем надо-то?
    это я так показал, что ни JS ни С++ я не знаю, а знаю только перечисленное
    поэтому и написал в шапке о псевдокоде...
     

    Цитата:
    А что в итоге требуется-то в задаче?
    ну так в первом посте всё написано или тебе физ.смысл нужен? :)
     
    X=N/M
     
    зная Х, найти целые N и M из [1..10]
     
    задача-то решено, но осадочек остался,
    казалось, что решить можно аналитически из элементарной алгебры...
     
    Добавлено:
     
     
    блин, щас оптимизатор подключу...
     
    условная оптимизация X - X1/X2 = 0
    с условиями
    X1, X2 -- целые
    1 <= X1, Х2 <= 10
     
    гы-гы

    Всего записей: 21360 | Зарегистр. 06-12-2002 | Отправлено: 18:12 12-07-2019
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM

    Цитата:
    ну так в первом посте всё написано или тебе физ.смысл нужен?

    ну получим ряд дробей, т.е. по сути, однозначного решения получить не сможем, ибо, например:
    0,5 = 1/2 = 2/4 = 3/6 = 4/8 = 5/10
    и что это даст? Условия-то выполнены...
    Вот я и спрашиваю: задача на теорию или имеет практическое значение?
    Если теория, то например, сюда можно заглянуть, а если практика, то задачу полностью надо бы увидеть, чтобы определиться с направлением движения к решению.

    Всего записей: 3173 | Зарегистр. 03-02-2009 | Отправлено: 18:39 12-07-2019
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
     
    да нормально я всё отписал, наоборот считаю заслугой, что абстрагировался от физики...
     

    Цитата:
    0,5 = 1/2 = 2/4 = 3/6 = 4/8 = 5/10
    0.5= N * 1/2 -- по бутылке на брата :)
    а если серьёзно, то это одно решение для моей задачи, N -- порядок отражения...

    Всего записей: 21360 | Зарегистр. 06-12-2002 | Отправлено: 18:53 12-07-2019
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM

    Цитата:
    по бутылке на брата

    О! Нормальная тара

    Цитата:
    то это одно решение для моей задачи

    в принципе, множество значений - тоже решение.

    Всего записей: 3173 | Зарегистр. 03-02-2009 | Отправлено: 09:02 13-07-2019
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2

    Цитата:
    множество значений - тоже решение.
    да не множество это, это одно решение в рамках задачи, недаром же я про НОД/НОК говорил...
     
    как не избито: но отсутствие решения -- тоже решение...

    Цитата:
    0.5= N * 1/2 -- по бутылке на брата :)
    О! Нормальная тара
    ты тоже после пятницы? ;)
    ошибочка тут...
    0.5= N/N * 1/2

    Всего записей: 21360 | Зарегистр. 06-12-2002 | Отправлено: 10:13 13-07-2019
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM

    Цитата:
    да не множество это, это одно решение в рамках задачи, недаром же я про НОД/НОК говорил...

    я хоть и туго соображаю сегодня, но это, как не крути, всё же множество... а вот то, что нам известно (рациональное число), то единственное...
    Нам ведь надо получить числитель и знаменатель из известного рационального числа - так? А если так, то 1/2, 2/4 и т.д., хоть и представляют одно и то же рац.число, но это разные записи и по алгоритму с заданным множеством значений числителей и знаменателей, они будут найдены. Если конечно, не расширить условие и не указать, что требуется получить несократимые дроби с взаимно простыми числителем и знаменателем... но в условиях этого не было. Или было? Вчера я мог что-нибудь и упустить...
     

    Цитата:
    ты тоже после пятницы?  

    малого того, ещё и после собственного ДР...
     

    Цитата:
    ошибочка тут...  
    0.5= N/N * 1/2

    это да...

    Всего записей: 3173 | Зарегистр. 03-02-2009 | Отправлено: 12:18 13-07-2019
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
     
    ну, во-первых, поздравляю с Днём рождения!
    Желаю всего и побольше, побольше хорошего и поменьше плохого...
     
     
     

    Цитата:
    требуется получить несократимые дроби с взаимно простыми числителем и знаменателем... но в условиях этого не было. Или было?
    теперь будет...
    просто было не актуально и если находилось 2 и 4 или 5 и 10, то мне этого было
    достаточно и решением считались значения 1 и 2.

    Всего записей: 21360 | Зарегистр. 06-12-2002 | Отправлено: 13:02 13-07-2019
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    ну, во-первых, поздравляю с Днём рождения!  
    Желаю всего и побольше, побольше хорошего и поменьше плохого...  

    спасибо!
     

    Цитата:
    теперь будет...

    ну, тогда нужна функция поиска НОД и дело в шляпе!
    Для наглядности, powershell:

    Код:
     
    $n = 1,2,3,4,5
    $m = 2,4,6,8,10
    function gcd($a,$b){
        while ($b) {
            $a,$b = $b,($a%$b)
        }
        write-output ([math]::abs($a))
    }
    0..($n.length-1)|%{
        $gcd = gcd $n[$_] $m[$_]
        $x,$y = ($n[$_]/$gcd),($m[$_]/$gcd)
        "N/M = $x/$y"
    }
     
     

    как-то так...

    Всего записей: 3173 | Зарегистр. 03-02-2009 | Отправлено: 19:04 13-07-2019 | Исправлено: YuS_2, 19:05 13-07-2019
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
     
    чё-то ни один транслятор мне не переводит,
    ну не знаю я повершел и всякие другие пыхапы, написал же:
    или словами или ел классик: с/паскаль/фортран...
    васик ещё можно...
    для особо одарённых сожру модулу, алгол и ПЛ/2...

    Всего записей: 21360 | Зарегистр. 06-12-2002 | Отправлено: 22:20 13-07-2019
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM

    Цитата:
    чё-то ни один транслятор мне не переводит,  
    ну не знаю я повершел и всякие другие пыхапы

    Дык powershell же, в основном, словесный по синтаксису, т.е. транслировать только если с аглицкого на русский...
    В функции используется цикл с условием (справедливо для многих языков), если записать её в стандартном виде:

    Код:
    Функция имя-функции ($элемент1, $элемент2) {
        Пока ($элемент2 -неравно 0){
            $X = $элемент1
            $элемент1 = $элемент2
            $элемент2 = $X % $элемент2  #то бишь, остаток от деления
        }
        Возврат абсолютное_значение($элемент1)
    }

    В итоге: получаем НОД (натуральное число).
    - вот, собственно и вся функция. Остальное - пример разбора массивов по парам значений и их подстановка в вызов функции.

    Всего записей: 3173 | Зарегистр. 03-02-2009 | Отправлено: 08:43 14-07-2019
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
     
    так это функция нахождения НОД? :)
     
    Добавлено:

    Код:
    0..($n.length-1)|%{
        $gcd = gcd $n[$_] $m[$_]
        $x,$y = ($n[$_]/$gcd),($m[$_]/$gcd)
        "N/M = $x/$y"
    }

     
    вот тут точно нужен Ш.Холмс чтобы разбирать этих пляшущих человечков...

    Всего записей: 21360 | Зарегистр. 06-12-2002 | Отправлено: 14:15 14-07-2019
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM

    Цитата:
    так это функция нахождения НОД?

    угу
     

    Цитата:
    тут точно нужен Ш.Холмс

    Не нужен. Совсем не нужен
     
    0..($n.length-1) - это массив чисел от 0 и до конечного номера элементов массива $n
    % - алиас командлета foreach-object
    $_ - автоматическая переменная, принимает значение того, что передается по ковейеру
    $n[0] - пример первого элемента из массива $n
    $n[$_] - соответственно, элемент массива с номером $_  
    / - деление
    $gcd = gcd  $n[$_] $m[$_]  - присваивание значения переменной $gcd из вызова функции gcd с числовыми значениями элементов массивов $n и $m
     
     
    Имхо, сложного ничего нет в таких человечках.

    Всего записей: 3173 | Зарегистр. 03-02-2009 | Отправлено: 15:54 14-07-2019
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Алгоритмы


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru