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

Частично прикрепил, но в этой задаче пришлось изменить.

Предыдущая задача:

Сводка

`var calculateDeposit = function (startM, interest, term, capitalized) {
var intPmonth = interest / 12 / 100;
var intSum = 0;

if (capitalized) {
for (var i = 0; i < term; i++) {
intSum = startM * intPmonth;
startM += intSum;
}
} else {
intSum = startM * intPmonth * term;
startM += intSum;
}
return Math.floor(startM);
};`

тут вся фича в том, чтобы итоговую функцию выразить через предыдущую с разными аргументами

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

Сводка
let calculateDeposit = function(deposit, percent, duration, isCapitalization) {
  if (!isCapitalization) {
    deposit += percent/12*duration*deposit/100; 
  } else {
      for (let i = 0; i < duration; i++) {
        deposit += percent/12/100*deposit;
      }
    }
  return Math.floor(deposit);  
}

let getProfitableDeposit = function(deposit, duration, simplePercent, complexPercent) {
  let simple = calculateDeposit(deposit, simplePercent, duration, false);
  let complex = calculateDeposit(deposit, complexPercent, duration, true);
  let recommendedType = 'капитализацию';
  let finalAmount = complex;
  
  if (complex <= simple) {
    recommendedType = 'обычный вклад';
    finalAmount = simple;
  } 
  return `Выбирай ${recommendedType}. Заработаешь ${finalAmount}`;
}
1 лайк

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

Сейчас расшифровку сделаю.

var getProfitableDeposit = function(deposit, time, simplePercent, complexPercent) {
var rezForSimple,
rezForCapitaliz;

rezForSimple = deposit + Math.round((deposit * simplePercent * time) / 12/100);

rezForCapitaliz = Math.floor(deposit * (Math.pow(1+complexPercent/100/12, time)));

if(rezForSimple > rezForCapitaliz) {
  return 'Выбирай обычный вклад. Заработаешь ' + rezForSimple;  
} else {return 'Выбирай капитализацию. Заработаешь ' + rezForCapitaliz; }

}

1 лайк

var calculateDeposit = function (capital, percent, term, isCapital) {
var sum;
if(isCapital == false) {
sum = Math.floor((capital / 100 * (percent / 12 * term)) + capital);
}
else if(isCapital == true) {
var monthly;
for(var i = term; i > 0; i–) {
monthly = (capital / 100 * (percent / 12)) + capital;
capital = monthly;
sum = capital;
}
}
return Math.floor(sum);
};

var getProfitableDeposit = function(capital, term, procentSimple, procentCapital) {
var answer = ‘’;
var simple = calculateDeposit(capital, procentSimple, term, isCapital = false);
var complex = calculateDeposit(capital, procentCapital, term, isCapital = true);
if(simple > complex) {
answer = 'Выбирай обычный вклад. Заработаешь ’ + simple;
}
else if (complex > simple) {
answer = 'Выбирай капитализацию. Заработаешь ’ + complex;
}
return answer;
}

var calculateDeposit = function (sumatDep, stavkaYehr, srokVkl, kakoi) {
var sumPercent = 0;
if(kakoi){
for (var i = 0; i < srokVkl; i++) {
sumPercent = sumatDep * (stavkaYehr / 12 * 0.01);
sumatDep += sumPercent;
}
}else{
sumPercent += sumatDep * (stavkaYehr / 12 * srokVkl * 0.01);
sumatDep += sumPercent;
}
return Math.floor(sumatDep);
};

var getProfitableDeposit = function(sumatDep, srokVkl, stavkaYehr, procentCapital) {
var answer = ‘’;
var simple = calculateDeposit(sumatDep, stavkaYehr, srokVkl, kakoi = false);
var complex = calculateDeposit(sumatDep, procentCapital, srokVkl, kakoi = true);
if(simple > complex) {
answer = 'Выбирай обычный вклад. Заработаешь ’ + simple;
} else {
answer = 'Выбирай капитализацию. Заработаешь ’ + complex;
}
return answer;
}

true и false местами поменяйте

Как то так. Правда переделал предыдущий из задания, а то он не очень подходил

 var getProfitableDeposit = function (startDeposit, timeForDeposit, persentForNormal, persentForCapitalizetion) {
      //Normal
      var normal = Math.floor(startDeposit + (persentForNormal / 100 / 12) * timeForDeposit * startDeposit)
      //Capitalizetion
      for (var i = 1, j = startDeposit; i <= timeForDeposit; i++) {
        j += j * (persentForCapitalizetion / 100 / 12)
      } var capitalizetion = Math.floor(j);
      //Who more
      if (normal > capitalizetion) { return 'Выбирай обычный вклад. Заработаешь ' + normal }
      if (normal < capitalizetion) { return 'Выбирай капитализацию. Заработаешь ' + capitalizetion }
    }

Еще один вариант с полным использование старой функции. Мне лень делать больше

var calculateDeposit = function (startMoney, percentInYear, depositTerm, capitalizetionPercent) {
  if (capitalizetionPercent) {
    for (var i = 1, j = startMoney; i <= depositTerm; i++) {      
      
      j += j * (percentInYear / 100 / 12);  
      
      } return Math.floor(j); 
      
      
      } else { return Math.floor(startMoney + (percentInYear / 100 / 12) * depositTerm * startMoney) } 
}

var getProfitableDeposit = function (startDeposit, timeForDeposit, persentForNormal, persentForCapitalizetion) {
  var normal = calculateDeposit(startDeposit, persentForNormal, timeForDeposit, false);
  var capitalizetion = calculateDeposit(startDeposit, persentForCapitalizetion, timeForDeposit, true);
  
  if (normal > capitalizetion) { return 'Выбирай обычный вклад. Заработаешь ' + normal }
  if (normal < capitalizetion) { return 'Выбирай капитализацию. Заработаешь ' + capitalizetion }
}

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

Есть такое))) сначала надо доучить, найти работенку, а потом уже можно и английский. Очень даже хорошая вещь.

Параллельно делайте, потому что что фронтэнд, что английский это не быстро

Оцените, пожалуйста :

var getProfitableDeposit = function (start, period, percentSimpl, percentCap) {
  var incomeCap = start;
  for (var i =0; i<period; i++) {
    incomeCap +=incomeCap*percentCap/1200
  }
  var incomeSimpl = start+start*period*percentSimpl/1200;
  if (incomeSimpl>incomeCap){
    return 'Выбирай обычный вклад. Заработаешь ' + Math.floor(incomeSimpl)
  } else {
    return 'Выбирай капитализацию. Заработаешь ' + Math.floor(incomeCap)
  }
}

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

Так лучше?

var calculateDeposit = function (startAmount, percent, depositTerm, isCapital) {
  if (isCapital) {
    for (var i=0; i<depositTerm; i++) {
    startAmount+=startAmount*percent/1200; 
    }
    return Math.floor(startAmount)
  } else {
    return Math.floor(startAmount +startAmount*depositTerm*percent/1200)
  }
};
var getProfitableDeposit = function (start, period, percentSimpl, percentCap) {
  var incomeSimpl=calculateDeposit(start,percentSimpl, period, false);
  var incomeCap=calculateDeposit(start,percentCap, period, true);
  if (incomeSimpl>incomeCap){
    return 'Выбирай обычный вклад. Заработаешь ' + Math.floor(incomeSimpl)
  } else {
    return 'Выбирай капитализацию. Заработаешь ' + Math.floor(incomeCap)
  }
}

ну тип того, разве что во второй функции убрать округление, а в первой вывести 1 return, повторяющиеся куски кода в ветвлении не ок.

учел рекомендации?

var calculateDeposit = function (startAmount, percent, depositTerm, isCapital) {
  if (isCapital) {
    for (var i=0; i<depositTerm; i++) {
    startAmount+=startAmount*percent/1200; 
    }
  } else {
   startAmount+=startAmount*depositTerm*percent/1200
  }
  return Math.floor(startAmount)
};
var getProfitableDeposit = function (start, period, percentSimpl, percentCap) {
  var incomeSimpl=calculateDeposit(start,percentSimpl, period, false);
  var incomeCap=calculateDeposit(start,percentCap, period, true);
  if (incomeSimpl>incomeCap){
    return 'Выбирай обычный вклад. Заработаешь ' + incomeSimpl
  } else {
    return 'Выбирай капитализацию. Заработаешь ' + incomeCap
  }
}

да, вот теперь нормас =)

Не работает, хотя первая программа в прошлом задании сработала четко.
Скорее ошибка в первом? Подскажите, знающие, пожалуйста :wink:

Не работает код на последней проверке
let calculateDeposit = function (money, percent, time, isCapital) {
let moneySumm = 0;
  for (let i = 1; i <= time; i++) {
    if (isCapital && time < 2) {
     moneySumm = money + (money * percent / 100 / 12);
    }
    if (isCapital && time >= 2) {
     let moneySumm1 = money + (money * percent / 100 / 12);
     moneySumm = moneySumm1 + (moneySumm1 * percent / 100 / 12);
    } else {
      moneySumm = money + (money * (percent / 100 / 12) * time);
      }
  };
  return Math.floor(moneySumm);
};

let getProfitableDeposit = function (money, percent, time, isCapital) {
let capital = calculateDeposit(money, percent, time, true)
let noCapital = calculateDeposit(money, percent, time, false)
  if (capital > noCapital) {
    message = 'Выбирай капитализацию. Заработаешь ' + capital;
  } else {
    message = 'Выбирай обычный вклад. Заработаешь ' + noCapital;
    }
  return message;
};

Добрый день!

  1. В прошлом задании спрашивалось, есть ли капитализация и при расчётах вы применяли true/false. Сейчас информация о капитализации точно есть, поэтому вместо логических значений нужно подставить числовые.
  2. Перепутан порядок входных параметров. Нужно: Сумма, срок, процент, процент. В Вашем коде: Сумма, процент, срок, процент.
1 лайк