За последние 24 часа нас посетили 17502 программиста и 1279 роботов. Сейчас ищут 1455 программистов ...

Не работает арифметическая прогрессия :((

Тема в разделе "Вопросы от блондинок", создана пользователем EvelRus, 28 дек 2009.

  1. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Задача:
    Посчитать стоимость строения (в игре) определенного уровня, с учетом стоимости предыдущих. имеется формула удорожания следующего уровня (60*1,5^(УРОВЕНЬ-1))

    Пример:
    Есть рудник металла 5 уровня.
    1 ур. - 60
    2 ур - 90
    3 ур. - 135
    4 ур. - 203
    5 ур. - 304

    Делаю:
    Чтобы найти сумму первых 5 уровней,
    Код (Text):
    1. 60+(5-1)*((60*1,5^(УРОВЕНЬ-1))
    ответ должен быть 60+90+135+203+304=792, но он получается 151 863

    Собственно, где я не прав?:((
    Формула нахождения n-члена прогрессии [​IMG]
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Господи, а определение-то арифметической прогрессии хоть помним?
    Сумничать с формулой легко, а вот вспомнить, что показатель d всегда должен быть одним и тем же числом, а энный член арифметической прогрессии отличается от предыдущих на d(n-1).
    А тут что?
    1. 90-60=30
    2. 135-90=45
    Дальше уже считать не надо, d не одинаковый.
     
  3. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Прогрессия у тебя в показателе степени в формуле сложных процентов.
    Именно по ней, если я визуально не ошибаюсь, у тебя рассчитывается стоимость чего-то на следующем уровне.
    Там вот именно этот показатель, в который возводится 1.5, и является самой прогрессией.

    n = уровень
    C = 60 * (1 + 50/100)^n-1
    C = 60 * (1 + 0.5)^n-1
    C = 60 * 1.5^n-1

    Уровень 3:
    (Расписываю очень подробно, математики меня бы за это палками избили)
    An = 0 + 1(3 - 1)
    An = 2
    C = 60 * 1.5^An

    В полном (комплексном виде выглядит это так):
    C = 60 * 1.5^An-1

    Т.е вернулись к исходному варианту, а если вспомним, что с самого начала я поставил An в качестве члена арифметической прогрессии, то что мы получим в выдодах?
    Получим мы вопрос: зачем топикстартеру вообще нужна была какая-то прогрессия?
    Да и зачем тему было открывать?

    Тут не получится арифметической, потому что общий член вовсе не общий.
    Можно, конечно, натянуть геометрическую прогрессию с общим членом 1.5.
     
  4. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Хе, пока думал как посчитать тут уже написали...

    Ну, во-первых, это действительно нефига не арифметическая прогрессия.
    Прогрессия есть, но геометрическая и в коэффициенте подорожания.

    Далее, вот это (60*1,5^(УРОВЕНЬ-1)) это формула наценки по сравнению с предыдущим уровнем или стоимость здания определенного уровня?
    Т.е. во втором случае здания стоят:
    и их сумма:
    Код (Text):
    1. 791.25
    В первом случае здания стоят:
    и их сумма:
    Код (Text):
    1. 1773.75
    Так вот для второго случая сумма зданий вычисляется с применением формулы геометрической прогрессии:
    [​IMG]
    Т.е.
    Код (Text):
    1. 60*(1-1.5^5)/(1-1.5)
    Для первого случая формулу пока не придумал...
     
  5. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Потому что посчитать надо, но как ХЗ (((
    Мне сказали прогрессия, ну я и посчитал как в первом посте :(
     
  6. Gulfstream_km

    Gulfstream_km Новичок

    С нами с:
    3 сен 2015
    Сообщения:
    2
    Симпатии:
    0
    Скиньте, пожалуйста, код рекурсивной функции для вычисления арифметической прогрессии на PHP. Заранее 100 "спасибов")
     
  7. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Код (PHP):
    1. /* * *
    2.  * Арифметическая прогрессия
    3.  * 
    4.  * @param $a1 - первый член прогрессии
    5.  * @param $d - Разность
    6.  * @Param $n - номер члена прогрессии 
    7.  * В нашем случае $n обязательно должен быть инициализирован "1"
    8.  * 
    9.  * @param $max - максимальное значение прогрессии
    10.  */
    11.  
    12. function progression($a1, $d, $n, $max) {
    13.     $val = $a1 + (($n - 1) * $d);
    14.     $n++;
    15.     echo "<br>".$val;
    16.  
    17.     if ($val < $max - $d) {
    18.         progression($a1, $d, $n, $max);
    19.         
    20.     } 
    21.     
    22. }
    23. progression(1, 2, 1, 10);
    24. /*
    25.  * вывод
    26.  * 
    27.  * 1
    28.  * 3
    29.  * 5
    30.  * 7
    31.  * 9
    32.  */
    33.  
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    mahmuzar а чего такой извращенский коммент? это ж не phpDoc уже.
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    он шаман. он видал где-то и сделал так же не вникая =)
     
  10. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Ganzal, вспоминается из java. В Php нельзя?
     
  11. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Можно. Точно так же, но не так как у тебя )
     
  12. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Покажи как будет правильно)
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  14. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Надо же, одна лишняя звездочка может все испортить?
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не испортить. начинаться должно с /** а там че хочешь пиши, но если будешь использовать ключевые слова в правильном порядке, то будут потом подсказки в IDE и как оказалось даже в рефлекшенах вроде вылезать.

    Добавлено спустя 1 минуту 33 секунды:
    более того, можно даже отдельную переменную откомментить так, чтобы были подсказки удобные, ну там методы объекта например вылезали при наборе.
    /** @var SomeClass $peremennaya */
    $peremennaya->а тут подсказки лезут
     
  16. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    По поводу этого я в курсе. Мне интересно, выше комментарий который я привел, там есть какие-нибудь ошибки, неточности? кроме *, которая вовсе и не ошибка, как ты сказал. А в чем шаманство? И почему уже не PhpDoc???
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нету. Шаманство потому, что без /** оно не работает =)
     
  18. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    ну так если ты про пробел между звездочками, то это не специально, NetBeans добавил. Но в любом случае, я не знал.

    Добавлено спустя 43 секунды:
    Не знал насчет:
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    удобная штука
     
  20. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    во-первых /** (именно слэш-астериск-астериск, а не слэш-астериск-пробел-астериск-пробел-астериск) и во-вторых нотация переменных @param type name desctiption. а у тебя что? у тебя парам-имя-тире-описание. в общем смотри общепринятые phpdoc и javadoc. программист-то поймет твою филькину грамоту, но её же пишут скорее для генераторов документации и вот последние-то тебя и не поймут.