Испытание:Вечный вопрос

Сделайте вызов функции в консоль в конце и все заработает
console.log(calculateDeposit(initialAmount, duration, simplePercent, complexPercent));

1 лайк

Спасибо!

подскажите логику - а зачем выводить это в консоль?
Спасибо.

В консоль не обязательно, нужно вызов функции произвести…

Считая уже сумму вкладов, как программа заменяет данные при выполнении функции(расчет процентов)?Я никак не могу понять этого, поэтому и не смогла выполнить задание((

Данные в функцию обычно передаются через параметры при вызове ф-ии, либо ф-ия замыкает внешнее окружение при определение(читайте про замыкание)


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

Код текстом, пожалуйста. Кнопка для форматирования </> в редакторе сообщений.
Ваш код не верный, хотя бы потому что сумма не совпадает, и она не округляется, если заметили.

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

И не думаю что здесь нужен вообще возврат

Что не так?
Ни один код не воспроизводит(

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

var initialAmount = 250000;
var depositDuration = 14;
var simplePercent = 7;
var complexPercent = 6.8;

var simpleDeposit = simplePercent / 1200 * depositDuration * initialAmount + initialAmount;
var complexDeposit = initialAmount;
for (var i = 1; i <= depositDuration; i++) {
  complexDeposit += complexPercent / 1200 * complexDeposit; 
}

if ( simpleDeposit > complexDeposit) {
  var recommendedType = 'simple';
  var finalAmount = Math.round(simpleDeposit);
} else {
  var recommendedType = 'complex';
  var finalAmount = Math.round(complexDeposit);
}

UPD: Ошибку сам нашел в цикле была неверная формула:

 complexDeposit += complexPercent / 1200 * initialAmount;

а должно быть:

 complexDeposit += complexPercent / 1200 * complexDeposit;

Мой топорный вариант, нужны комментарии :pensive:

Вечный вопрос
var initialAmount = 50000;
var depositDuration = 12;
var simplePercent = 7;
var complexPercent = 6;
var recommendedType = '';
var finalAmount = 0;


var calculateDeposit = function (initialAmount, percent, depositDuration, isCapitalization) {
  var totalAmount = initialAmount;
  if (isCapitalization) {
    for (var i = 0; i < depositDuration; i++) {
      totalAmount += totalAmount * (percent / 100 / 12);
    }
  }else {
    totalAmount += totalAmount * (percent / 100 / 12 * depositDuration);
  }
  return Math.round(totalAmount);
}

var simpleAmount = calculateDeposit(initialAmount, simplePercent, depositDuration, false);
var complexAmount= calculateDeposit(initialAmount, complexPercent, depositDuration, true);

if (simpleAmount > complexAmount) {
  recommendedType = 'simple';
  finalAmount = simpleAmount;
  
}else {
  recommendedType = 'complex';
  finalAmount = complexAmount;
}

Тож отпишусь

моё рабочее
var initialAmount = 50000;
var depositDuration = 12;
var simplePercent = 7;
var complexPercent = 6;
var recommendedType;
var finalAmount;

var calculateDeposit = function(deposit, percent, duration, isCapitalization) {
  if (!isCapitalization) {
    deposit *= (100+percent/12*duration)/100; 
  } else {
      for (var i = 0; i < duration; i++) {
        deposit *= (100+percent/12)/100;
      }
    }
  return Math.round(deposit);  
}
var simple = calculateDeposit(initialAmount, simplePercent, depositDuration, false);
var complex = calculateDeposit(initialAmount, complexPercent, depositDuration, true)
if (complex <= simple) {
  recommendedType = 'simple';
  finalAmount = simple;
  
} else {
  recommendedType = 'complex';
  finalAmount = complex;
  }

Обратите внимание, в функцию пишем параметры, а в сравнении уже переменные, которые принимают значение аргументов, чтобы было понятнее как делать. Также заметьте, значение “флага” капитализации не передается пользователем, оно автоматом подцепается из вызова функции в зависимости какой процент используется.

Как я понял задачу немного доработали и изменили…
Не проходит 1 проверку из 3.
По причине, как я понимаю, неверного округления в функции из предыдущего задания.
Вопрос уже задавал ранее: http://forum.academy/t/ispytanie-dengi-k-dengam/8382/61

Код
var calculateDeposit = function (dep, pr, per, isK) {
  var x = 0;
  if (!isK) {
    x = (pr / 100 / 12) * per * dep;
  }
  if (isK) {
    for (var i = 1; i <= per; i++) {
      x += (pr / 100 / 12) * (dep + x)
    }
  }
  return Math.round(x + dep);
};

var getProfitableDeposit = function (dep, per, prS, prK) {
  var zz = '';
  var xx = calculateDeposit(dep, prS, per, false);
  var yy = calculateDeposit(dep, prK, per, true);
  if (xx > yy) {
   zz = 'Выбирай обычный вклад. Заработаешь ' + xx;
  } else {
    zz = 'Выбирай капитализацию. Заработаешь ' + yy;
  }
  return zz;
};

Угу, Math.floor применяйте

1 лайк

Спасибо!

Судя по предыдущим комментариям условия в задаче немного поменялись. Кому интересны разные варианты решения -

Пожалуйста, напомните как правильно нужно вставлять код в комментарий и исправлю, использовал знак </> и не работает.

Мой код -

Сводка

/*

  1. startM - исходный размер депозита
  2. term - срок депозита в месяцах
  3. simpleInt - процентная ставка для депозита с простыми процентами
  4. capitalInt - процентная ставка для депозита с капитализацией процентов
    */

var getProfitableDeposit = function (startM, term, simpleInt, capitalInt) {
var intPmonthS = simpleInt / 12 / 100;
var intPmonthC = capitalInt / 12 / 100;
var endMS = startM + ((startM * intPmonthS) * term);
var endMC1 = startM;

for (var j = 0;j < term;j++) {
  var endMC2 = endMC1 + intPmonthC * endMC1;
  endMC1 = endMC2;
  } 
  
if (endMS > endMC1) {
  return 'Выбирай обычный вклад. Заработаешь ' + Math.floor(endMS);
  } else {return 'Выбирай капитализацию. Заработаешь ' + Math.floor(endMC1);
  } 

}

безумие какое-то. еще и работает.
вы точно не индус? :alien:

Даже не пакистанец.:wink: Я сам удивился, но работает.

странно, что вы решение предыдущей задачи сюда не прикрутили