Восьмая программа: «Деньги к деньгам»

Добрый день. Подскажите пожалуйста, никак не могу разобраться с решением этой программы. Не проходит одна проверка, вот код который я написал:

var calculateDeposit = function (startcash, percent, period, isCapitalizetion) {
  if (isCapitalizetion) {
  for (var i=1; i <= period; i++) {
   startcash += (startcash*percent/100/12)*period;
  }
  return Math.round(startcash);
  }
  else {
  var sumcash = startcash + Math.round((startcash*percent/100/12)*period);
   return Math.round(sumcash);
  }
}

При такой реализации не проходит проверка: https://prnt.sc/k2pw3w

Может кто-то подскажет, что не так в моей функции, так как я упорно не понимаю почему результат 103361 не подходит. Хотя по подсчету с калькулятором, за 2 месяца должна быть такая сумма.

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

Окееей, отформатировал. А что с кодом то?какие то варианты в чем ошибка, есть?

Это неверная формула при расчете депозита с капитализацией. Вы не можете здесь умножать на period, ведь в каждом месяце сумма процентов другая.

Вдруг кому нужно.

Summary
var calculateDeposit = function (deposit, percent, month, isCapitalise) {
  if (isCapitalise) {
    for (var i = 0; i < month; i++){
      deposit += deposit * (percent / 100 / 12);
    }
  } else {
    deposit += deposit * (percent / 100 / 12 * month)
  }
  return Math.round(deposit);
};

var calculateDeposit = function (startDeposit, percent, term, KapitalPercent) {
var Itog = startDeposit;
if (KapitalPercent) {
var Itog = startDeposit;
for (var i = 1; i <= term; i++) {
Itog += Itog * (percent / 12 / 100)}
} else {
Itog += startDeposit * (percent / 12 * term /100);
}
return Math.round(Itog);
};

Думаю задать переменную для начала отсчета более верное решение, нежели менять исходное данное депозит и возвращать его, нет?

ну да, только так переменные не называют! только английский язык, поэтому никаких Itog и Kapital. И с заглавной буквы в js начинаются только классы
И у вас строчка var Itog = startDeposit; повторяется два раза

Как-то так, практически как и у всех…

Деньги к деньгам
var calculateDeposit = function (deposit, percent, period, isCapitalization) {
  var totalAmount = deposit;
  if (isCapitalization) {
    for (var i = 0; i < period; i++) {
      totalAmount += totalAmount * (percent / 100 / 12);
    }
  }else {
    totalAmount += totalAmount * (percent / 100 / 12 * period);
  }
  return Math.round(totalAmount);
}

Беда с проверкой.
если в конце вызываю функцию с корректными аргументами - считает правильно, а при проверке - не находит математических функций.
Кто-то сталкивался с подобным?

скриншот

(upload://kG4OGpYmT5ygVATYmal01es8Re7.png)

Самое смешное, что этот же текст функции использованный в следующей задаче (“Вечный вопрос”) работает и принимается системой!

второй скрин

У меня такая же проблема

minwin спасибо, мы проверим, в чём проблема. Буду держать вас в курсе

var i = 0;
var calculateDeposit = function (sumInit, procent, period, isCapitalization) {
var procent = procent / 100;
if (!isCapitalization) {
return Math.round(((procent / 12 * period) * sumInit) + sumInit);
};
while (i < period) {
sumInit += ((procent / 12) * sumInit);
i++;
}
return Math.round(sumInit);
};

Здравствуйте. Если я правильно понимаю, вы проходите курс из Edge. Попробуйте другой браузер, например Chrome. Там всё должно работать. Edge в целом хорошо поддерживает JavaScript, но не полностью, есть несколько сложностей.

1 лайк

чуть подсократил вариант, похоже на то, что сделал @Die

моё рабочее
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.floor(deposit);  
}

Почему-то не проходит проверка на вклад без капитализации сроком больше 1 мес. Считаю вручную по той же формуле - всё сходится.

var calculateDeposit = function (startSum, yearPercent, month, capitalize) {
 var sum;
 if ( capitalize = false ) {
   sum = yearPercent / 12 * month / 100 * startSum + startSum;
 } else {
   sum = startSum;
   for ( i = 0; i < month; i++ ) {
     sum = yearPercent / 12 / 100 * sum + sum;
   }
 }
 return Math.round(sum);

}

Один знак = означает только присвоение.

Спасибо, сработало. Опять перепутал программирование с арифметикой :slight_smile:

var calculateDeposit = function (firstSum, percent, period, capital) {
  if (capital) {
    for (var i = 0; i < period; i++) {
    firstSum = (percent / 12 * 1 / 100 + 1) * firstSum;
     period--;
     return Math.round((percent / 12 * period / 100 + 1) * firstSum);
    }
  } else {
    return Math.round((percent / 12 * period / 100 + 1) * firstSum)
  }
};

Решение в сводке

Сводка

const culculatePercent = percent => percent / 12 / 100;

const calculateDeposit = (deposit, percent, months, isCapitalized) => {
  const percentYear = culculatePercent(percent)

  if (isCapitalized) {
    let capDeposit = deposit;
    let sumPercent = 0;
    for (let i = months; i > 0; i--) {
      capDeposit += percentYear * capDeposit;
    }

    return Math.floor(capDeposit);
  }
  
  return Math.floor(percentYear * months * deposit + deposit);
};