Деньги к деньгам


#1

Не проходит одну проверку, не понимаю почему…


#2

Я попробовала посчитать по-другому, и всеравно выходит другое значение (не 101 674), поправьте если ошибаюсь
Условие:
сумма вклада = 100 000
процент = 10%
вклад на 2 месяца
Решение —
1 месяц = 100 000 / 100 * (10/12) = 883
2 месяц = 100 883 / 100 * (10/12) = 890
итог = 100 000 +883 + 890 = 101 773


#3

В цикле расчета суммы депозита с капитализацией вы умножаете на periodDeposit. Но эта переменная отвечает только за количество итераций цикла (используется в условии
i < periodDeposit).


#4

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


#5

Здесь 833 получается, дальше соответственно уже неправильно тоже.


#6

Здравствуйте, та же проблема, не проходит проверку 2 мес 10% с капитализацией.
Приведу свою калькуляцию, 100000 * 0,1 / 12 = 833 * 2 => 1667 с округлением и, к сожалению, даже округление этой цифры с помощью Math.ceil вместо Math.round не превратит её никогда в 1674.
Попробовала последовать вашему совету в одном из топиков и пройти проверку в другом браузере, но проблема никуда не исчезает.
Напишите, пожалуйста, калькуляцию цифры 1674 в простых математических действиях, чтобы можно было понять логику вычислений.


#7

Спасибо, посчитала, нашла ответ сама, но в случае с цифрой 1674 подсказка в условии неверна и приводит к неверному написанию функции((


#8

О какой подсказке идет речь?


#9

Если верить подсказка в задании к этому упражнению, его можно решить обычным циклом, но для решения 1674 нужна рекурсия.


#10

а в чем разница будет между рекурсией и циклом? можете оба варианта кода показать?


#11

Вчера целый день пыталась вспомнить, как это нужно писать, пока ещё не закончила, но, когда сегодня писала ответ на ваш вопрос, уже задумалась над тем, что любую рекурсию можно описать циклом( Нужно подумать.


#12

Чувствую себя абсолютно дубовой в математике, написала несколько вариантов:

var calculateDeposit = function (startAmount, percent, time, isCapitalized) {
  var finalAmount = 0;
  var monthlyPercent = percent / 100 / 12;
  var capAmount = startAmount;
  
  if(!isCapitalized) {
    finalAmount += monthlyPercent * time * startAmount + startAmount;
    return Math.ceil(finalAmount);
  } 
  else if(percent === 0) {
    return startAmount;
  }  
  else {
    while(time > 0) {
      capAmount += capAmount * monthlyPercent;
      return Math.ceil(capAmount);
    } 
  }
};
var calculateDeposit = function (startAmount, percent, time, isCapitalized) {
  var finalAmount = startAmount;
  var monthlyPercent = percent / 100 / 12;
  var capAmount = monthlyPercent * startAmount;
  
  if(!isCapitalized) {
    finalAmount += monthlyPercent * time * startAmount;
    return Math.ceil(finalAmount);
  } 
  else if(percent === 0) {
    return finalAmount;
  }  
  else {
    var iter = function(amount, percent, period) {
      if(period === 0) {
        return amount;
      }
      return iter(amount + percent, percent, period - 1);
    }
    return Math.ceil(iter(finalAmount, capAmount, time));
  }
};

Каждый раз те же грабли, не могу присвоить новое значение на второй итерации!!!

А ещё, хотела попросить: научите, как скрывать код на форуме, пожалуйста.


#13

Под шестеренкой пункт меню Hide details

И скиньте плиз какие значение передаются на вход в функцию и какие ожидаются на выходе, согласно условию. Подписка давно закончилась, не могу посмотреть:)


#14

расскажите что у вас здесь происходит, как вы понимаете


#15

Вашу функцию с рекурсией отрефакторил, больно она тяжелая и не уверен что правильно считала

Если интересно - смотрите, если хотите обсудить ваш вариант для понимания сначала, можете не смотреть

Summary
var calculateDeposit = function (startAmount, percent, time, isCapitalized) {
  var monthlyPercent = percent / 100 / 12;
  var capAmount = monthlyPercent * startAmount;

  if (!isCapitalized) {
    return Math.ceil(startAmount + monthlyPercent * time * startAmount);
  } 
  else if (time === 0) {
    return startAmount;
  }  
   return Math.round(calculateDeposit(startAmount + capAmount, percent, time - 1, isCapitalized));
 
};

#16

Значения: 100000, 10%, 2 месяца, с капитализацией


#17

Здесь у меня сумма вклада, умножается на месячный процент и изменяется на новое значение, чтобы на второй интеграции снова быть умноженной на месячный %, если значение времени больше 0.


#18

А return что означает в цикле? И когда цикл закончится?


#19

return - возвращение значения после окончания цикла, а цикл заканчивается, когда time = 1, мне кажется, я поняла, сейчас проверю


#20

Нет, поняла не то, спасибо, Руслан, подгляжу ваш код((