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

Всем привет, скажите пожалуйста почему мой код не проходит проверку?
В консоли всё работает отлично!

var initialAmount;
var duration;
var simplePercent;
var complexPercent;
var result1;
var result2;
var recommendedType;
var finalAmount;

function calculateDeposit(initialAmount, duration, simplePercent, complexPercent) {
  result1 = initialAmount;
  result2 = initialAmount;
  result1 += (result1 * simplePercent / 100 * duration / 12);

  for (i = 0; i < duration; i++) {
    result2 += result2 * complexPercent / 100 / 12;
  }

  if (result1 > result2) {
    finalAmount = Math.round(result1);
    recommendedType = 'simple';
  } else {
    finalAmount = Math.round(result2);
    recommendedType = 'complex';
  }
}

upd спустя 5 минут: дошло. Убрал функцию и всё заработало:

var initialAmount;
var duration;
var simplePercent;
var complexPercent;
var result1;
var result2;
var recommendedType;
var finalAmount;

result1 = initialAmount;
result2 = initialAmount;
result1 += (result1 * simplePercent / 100 * duration / 12);

for (i = 0; i < duration; i++) {
  result2 += result2 * complexPercent / 100 / 12;
}

if (result1 > result2) {
  finalAmount = Math.round(result1);
  recommendedType = 'simple';
} else {
  finalAmount = Math.round(result2);
  recommendedType = 'complex';
}

Ваша функция не содержит return, потому никакое значение не выводится.

Переменные recommendedType и finalAmount должны быть объявлены за пределами функции.
Что касается второго варианта, то вы объявили переменные только для одной ветки условия. Для ветки else обе переменных остаются не определены. То есть здесь тоже переменные нужно было объявить строкой выше условия.

Ааа, я понял свою ошибку. Я забыл вызвать функцию. Переделал:

var initialAmount,
    duration,
    simplePercent,
    complexPercent,
    result1,
    result2,
    recommendedType,
    finalAmount;

function calculateDeposit(initialAmount, duration, simplePercent, complexPercent) {
  result1 = initialAmount;
  result2 = initialAmount;
  result1 += (result1 * simplePercent / 100 * duration / 12);

  for (i = 0; i < duration; i++) {
    result2 += result2 * complexPercent / 100 / 12;
  }

  if (result1 > result2) {
    finalAmount = Math.round(result1);
    recommendedType = 'simple';
  } else {
    finalAmount = Math.round(result2);
    recommendedType = 'complex';
  }
}

calculateDeposit(initialAmount, duration, simplePercent, complexPercent);

Ага, я поняла. Объявила переменные, мне выдает просто " ‘’ ‘’ ",

var recommendedType = ‘’;
var finalAmount = ‘’;

var simple = calculateDeposit(initialAmount, simplePercent, duration, false);
var capitalize = calculateDeposit(initialAmount, complexPercent, duration, true);

console.log(simple, capitalize);

var recommend = function(simple, capitalize) {
recommendedType = 'simple’
finalAmount = simple;
if (simple < capitalize) {
recommendedType = ‘complex’;
finalAmount = capitalize;
}
return recommendedType
};

Для второго варианта так же объявила перменные выше, результат не поменялся(
if(simple > capitalize){
recommendedType = ‘simple’;
finalAmount = simple;
}else{
recommendedType = ‘complex’;
finalAmount = capitalize;
}

console.log(recommendedType, finalAmount);

Может заинтересует: http://codeguide.academy/javascript.html

2 лайка

Вы не вызвали функцию recommend(), а только объявили ее.

Проходит два испытания из двух с разницей значений между ожидаемым и фактическим 164 :flushed:
Подскажите, плиз!

for (var i = 1; i <= duration; i++) {
var hhh = initialAmount + (0.01*complexPercent/12)*initialAmount;
var finalMoneyComplex = hhh + (0.01*complexPercent/12)*hhh;
}
finalMoneyComplex = (Math.round(finalMoneyComplex));

 var finalMoneySimple = initialAmount +initialAmount*(0.01 * simplePercent/12)*duration;
finalMoneySimple = (Math.round(finalMoneySimple));
var recommendedType;
var finalAmount;
if (finalMoneyComplex > finalMoneySimple) {
var recommendedType = 'complex';
var finalAmount = finalMoneyComplex;
console.log('Рекомендую '+recommendedType+' сумма '+finalAmount); 
} else {
 var recommendedType = 'simple';
var finalAmount =finalMoneySimple;
console.log('Рекомендую '+recommendedType+' сумма '+finalAmount); 

}

Третий тест. Исходный размер депозита: 250000 рублей, срок вклада: 14 мес., простой процент: 7, сложный процент: 6.8. Ожидаю рекомендацию: complex, конечную сумму: 270581 рублей.

“Рекомендую simple сумма 270417” (string)

Ваше значение recommendedType равное “simple” не совпадает с ожидаемым значением “complex”.

Ваше значение finalAmount равное 270417 не совпадает с ожидаемым значением 270581.

“Всего проверок: 3, пройдено: 2”

Сильно криво? Тест проходит, но судя по предыдущем ответам не совсем правильно это делает.

Summary

var initialAmount = 50000;
var duration = 12;
var simplePercent = 7;
var complexPercent = 6;

var chooseBestDeposit = function (initialAmount, duration, simplePercent, complexPercent) {

var complexDeposit = Math.round(initialAmount * (Math.pow((1 + complexPercent / 100 / 12), duration)));

var simpleDeposit = Math.round(initialAmount + initialAmount * ((simplePercent / 100 / 12) * duration));

var final = [‘simple’, simpleDeposit];

if (simpleDeposit < complexDeposit) {
final[0] = ‘complex’;
final[1] = complexDeposit;
}
return(final)
};

var finalAmount = chooseBestDeposit(initialAmount, duration, simplePercent, complexPercent)[1];
var recommendedType = chooseBestDeposit(initialAmount, duration, simplePercent, complexPercent)[0];

А мне нравится, по крайней мере новая идея и массив нашли где применить.

Понял задание иначе чем остальные и сделал функцию сравнения, по идее здесь бы еще хорошо разделить время для разных видов вкладов и вполне рабочий вариант, наверное :thinking:

Оцените:
var initialAmount = 50000;
var duration = 12;
var simplePercent = 7;
var complexPercent = 6;
var finalAmount = 0;
var recommendedType = 0;

var calculateDeposit = function (initialAmount, simplePercent, complexPercent, duration) {
  
  // Рассчет депозита с простыми процентами
  var percent = simplePercent / 100 / 12;
  var sumSimpleDeposit = initialAmount;
  sumSimpleDeposit *= (1 + percent * duration)
  
  // Рассчет депозита с капитализацией процентов
  var percent = complexPercent / 100 / 12;
  var sumComplexDeposit = initialAmount;
  for (var i = 0; i < duration; i++) {
sumComplexDeposit += sumComplexDeposit*percent
  }
  
  // Сравнение депозитов
  if (sumSimpleDeposit > sumComplexDeposit) {
finalAmount = Math.round(sumSimpleDeposit);
recommendedType = 'simple';
} else {
finalAmount = Math.round(sumComplexDeposit);
recommendedType = 'complex';
  }
  return finalAmount
};

Ну и функция отдельно, сравнение отдельно

Summary
var initialAmount = 50000;
var duration = 12;
var simplePercent = 7;
var complexPercent = 6;
var finalAmount = 0;
var recommendedType = '';
var sumDeposit = 0;

var calculateDeposit = function (startDeposit, percentNumber, termDeposit, isCapital) {
  percent = percentNumber / 100 / 12;
  var sumDeposit = startDeposit;
  if(!isCapital) {
    sumDeposit *= (1 + percent * termDeposit)}
    else {
      for (var i = 0; i < termDeposit; i++) {
        sumDeposit += sumDeposit*percent}}
  return Math.round(sumDeposit)
};

if (calculateDeposit(initialAmount, simplePercent, duration, false) > calculateDeposit(initialAmount, complexPercent, duration, true)) {
    finalAmount = calculateDeposit(initialAmount, simplePercent, duration, false);
    recommendedType = 'simple';
    } else {
    finalAmount = calculateDeposit(initialAmount, complexPercent, duration, true);
    recommendedType = 'complex';
  }

Спасибо за курс! Познавательно!

Здравствуйте. Прошел данное испытание не без труда.

Я новичок, есть пара простых вопросов.

Summary

var initialAmount = 50000;
var duration = 2;
var simplePercent = 7;
var complexPercent = 6;
var finalAmount = 0;
var sum = 0;
var recommendedType = ‘’;

var calculateMoney = function (initialAmount, duration, persentNomber, isCapital) {
var sum = initialAmount;
if (!isCapital) {
sum = initialAmount + initialAmount * persentNomber / 100 / 12 * duration;
} else {
for (var i = 0; i < duration; i++) {
sum += sum * persentNomber / 100 / 12;
}
}
return Math.round(sum);
}

if (calculateMoney(initialAmount, duration, simplePercent, false) > calculateMoney(initialAmount, duration, complexPercent, true)) {
finalAmount = calculateMoney(initialAmount, duration, simplePercent, false);
recommendedType = ‘simple’;
} else {
finalAmount = calculateMoney(initialAmount, duration, complexPercent, true);
recommendedType = ‘complex’;
}

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

Вместо sum в функции не удается вставить сразу initialAmount - перестает проходить проверку. Почему здесь надо использовать именно другую переменную (ведь var sum = initialAmount)?

Мой вариант:

Summary
var initialAmount = 50000;
var duration = 12;
var simplePercent = 7;
var complexPercent = 6;

var calculateDeposit = function (initialDeposit, annualPercent, depositTerm, isInterestCapitalized) {
  for (var deposit = initialDeposit, term = 1; term <= depositTerm; term++) {
    isInterestCapitalized ? deposit *= 1 + annualPercent / 100 / 12 : deposit += initialDeposit * annualPercent / 100 / 12;
  }
  return Math.round(deposit);
}

var simpleDepositAmount = calculateDeposit(initialAmount, simplePercent, duration, false);
var complexDepositAmount = calculateDeposit(initialAmount, complexPercent, duration, true);

var recommendedType = simpleDepositAmount > complexDepositAmount ? 'simple' : 'complex';
var finalAmount = recommendedType == 'simple' ? simpleDepositAmount : complexDepositAmount;

Доброго времени суток.
Скажите, пожалуйста, для чего нужна вторая функция **“var recommend = function(value1, value2)”*** И где задаются значения для переменных “Value1” и “Value2”? И можно ли в место функции использовать условие? Например, если простой депозит лучше сложного, то одна рекомендация и сумма, и наоборот.

Вариант с функцией является более универсальным. То есть можно сравнивать два значения не один раз (когда вы просто пишете условие), а много раз, подставляя разные данные.
Значения для параметров value1, value2 берутся из вызовов функции calculateDeposit() чуть выше по коду.

Спасибо

Добрый день! Кто-нибудь может подсказать, что не так с кодом? При приемке все по нулям, а в консоли хрома он работает, на запросы recommendedType и finalAmount выдает те же ответы, что показываются в качестве ожидаемых при приемке программы.

Summary

var initialAmount = 50000;
var duration = 12;
var simplePercent = 7;
var complexPercent = 6;
var recommendedType = ‘’;
var finalAmount = 0;
var finalSim = 0;
var finalCom = 0;

var calculateDeposit = function(initialAmount, duration, simplePercent, complexPercent) {
finalSim = initialAmount + initialAmount * (simplePercent/12/100 * duration);
for (var i = 1; i <= duration; i++) {
initialAmount += initialAmount * complexPercent/12/100;
}
finalCom = initialAmount;
if (finalSim > finalCom) {
recommendedType = ‘simple’;
finalAmount = Math.round(finalSim);
} else {
recommendedType = ‘complex’;
finalAmount = Math.round(finalCom);
}
}

а в чем проблема?

мой пример

Вечный вопрос
var initialAmount = 250000;
var duration = 14;
var simplePercent = 7;
var complexPercent = 6.8;
var recommendedType, finalAmount;

var calculateDeposit = function(initialAmount, duration, simplePercent, complexPercent) {
  var complex = initialAmount, simple = initialAmount;
    for (var i = 1; i <= duration; i++){
      complex = complex * complexPercent / 1200 + complex;
    }
    var simple = simplePercent * duration / 1200 * initialAmount + initialAmount;
     if (complex > simple) {
      recommendedType = 'complex';
      return finalAmount = Math.round(complex);
     }
      recommendedType = 'simple';
      return finalAmount = Math.round(simple);
};
console.log(calculateDeposit(initialAmount, duration, simplePercent, complexPercent));