Спасибо за ответ, буду разбираться)
а почему в задаче требуется вывести “доход от вклада”, а проверка в качестве ответа требует сумму дохода и вклада?
Добрый день!
Это неточность в формулировке задания. Передам информацию авторам, поправим в ближайшее время.
Все-таки введение доп. переменных для сокращения ветвления больше нравится))
код здесь
var calculateDeposit = function (amount, rate, term, isСapitalize) {
var totalSum = amount + ((rate * 0.01 / 12) * term * amount);
if (isСapitalize) {
for (var i = 0; i < term; i++) {
amount += ((rate * 0.01 / 12) * amount);
totalSum = amount;
}
}
return (Math.floor(totalSum));
};
var getProfitableDeposit = function (amount, term, simpleRate, complexRate) {
var simple = calculateDeposit(amount, simpleRate, term, false);
var complex = calculateDeposit(amount, complexRate, term, true);
var profitableDeposit = simple;
var recommendation = 'Выбирай обычный вклад. Заработаешь ';
if (complex >= simple) {
profitableDeposit = complex;
recommendation = 'Выбирай капитализацию. Заработаешь ';
}
return recommendation + profitableDeposit;
};
Вроде просто получилось и код менял минимум после предыдущего задания.
` let getProfitableDeposit = function (startSum,months,percentNorm, percentCap) {
let finalSumCap = startSum;
let winSum = percentNorm/100/12monthsstartSum;
let finalSumNorm = startSum + winSum;
for (var i=0; i<months; i++){
let winMonth =finalSumCap*percentCap/100/12;
finalSumCap += winMonth
}
let console;
let finalSum;
if (finalSumNorm>finalSumCap){
finalSum = Math.floor(finalSumNorm);
console = 'Выбирай обычный вклад. Получишь ’ + finalSum
} else {
finalSum = Math.floor(finalSumCap);
console = 'Выбирай капитализацию. Получишь ’ + finalSum
}
return console
}; `
С функциями как то попроще дела, чем с массивами
Сводка
let calculateDeposit = function (sum, percent, term, isPlowBack) {
if (isPlowBack) {
for (let i = 0; i < term; i++) {
sum += sum * (percent / 12 * term) / 100 / term
}
} else {
sum += sum * (percent / 12 * term) / 100
}
return Math.floor(sum)
}
let getProfitableDeposit = function (sum, term, percent, percentPlowBack) {
let simple = calculateDeposit(sum, percent, term, false)
let plowBack = calculateDeposit(sum, percentPlowBack, term, true)
if (simple > plowBack) {
return 'Выбирай обычный вклад. Получишь ' + simple
} else {
return 'Выбирай капитализацию. Получишь ' + plowBack
}
}
Задание не сложное, т.к. в прошлом уже всё решено почти, но надо быть внимательным, третья проверка запарывалась, как у многих.
Сводка
let getProfitableDeposit = function (
deposit,
months,
simplePercent,
capitalisePercent
) {
let simpleMoney = Math.floor((simplePercent / 100 / 12) * months * deposit + deposit);
let capitaliseMoney = Math.floor(deposit * (1 + capitalisePercent / 100 / 12) ** months);
if (simpleMoney > capitaliseMoney) {
return "Выбирай обычный вклад. Получишь " + simpleMoney;
} else {
return "Выбирай капитализацию. Получишь " + capitaliseMoney;
}
};
Но ведь в задании четко написано, что предыдущую функцию нужно вызвать из новой (дважды, для каждого вида вклада).
Моё решение:
Сводка
let calculateDeposit = function (depoSum, percent, depoTerm, isCapital) {
if (isCapital) {
for (let i = 1; i <= depoTerm; i++) {
let capitalRate = percent*0.01/12*depoSum;
depoSum += capitalRate;
}
}
else {
let usualRate = percent*0.01/12*depoSum*depoTerm;
depoSum += usualRate;
}
return Math.floor(depoSum);
}
let getProfitableDeposit = function (depoSum, depoTerm, usualRate, capitalRate) {
let result = '';
let capitalProfit = calculateDeposit(depoSum, capitalRate, depoTerm, true);
let usualProfit = calculateDeposit(depoSum, usualRate, depoTerm, false);
if (capitalProfit > usualProfit) {
result = 'Выбирай капитализацию. Получишь ' + Math.floor(capitalProfit);
} else {
result = 'Выбирай обычный вклад. Получишь ' + Math.floor(usualProfit);
}
return result;
};
Но ведь в задании четко написано, что предыдущую функцию нужно вызвать из новой (дважды, для каждого вида вклада).
?
простите, кому-то другому хотела написать, а случайно вас тегнула
Не увидел тут вариант похожий на мой. Может будет кому интересно
function playScore(itStart, itPercent) {
return monthPercent = itStart * (itPercent/12) / 100
}
function getProfitableDeposit(start, time, percent, percentС) {
let startC = start;
for (let i = 0; i < time; i++){
startC += playScore(startC, percentС) * 1;
}
start += playScore(start, percent) * time;
if (start - startC > 0){
start = 'Выбирай обычный вклад. Получишь ’ + Math.floor(start);
} else {
start = 'Выбирай капитализацию. Получишь ’ + Math.floor(startC);
}
return start
}
Сделал на базе предыдущей, но без вызова одной функции из другой
Сводка
let getProfitableDeposit = function (baze, month, simpleInterest, compoundInterest) {
//Депозит с простых %
let newPercent = simpleInterest / 12 * month;
let furtherAmount = baze/100 * newPercent;
let total = Math.floor(baze + furtherAmount);
//Депозит со сложных %
let monthPercent = compoundInterest / 12;
for (let i = 1; i <= month; i++) {
baze += (baze/100 *monthPercent);
}
let totalCompound = Math.floor(baze);
// Сравнение
if (total > totalCompound) {
return ('Выбирай обычный вклад. Получишь ') + total;
} return ('Выбирай капитализацию. Получишь ') + totalCompound;
}
let calculateDeposit = function (startDep, percent, time, isCapital) {
let summ = 0;
percent = percent / 100;
if(!isCapital) {
percent = (percent / 12 * time);
summ = startDep + Math.floor(startDep * percent);
} else {
for(let i = 0; i < time; i++) {
startDep += startDep * percent / 12;
summ = Math.floor(startDep);
}
}
return summ;
};
let getProfitableDeposit = function(depSource, depTime, freePercent, capitalPercent) {
let simple = calculateDeposit(depSource, freePercent, depTime, false);
let hard = calculateDeposit(depSource, capitalPercent, depTime, true);
if(simple > hard) {
return 'Выбирай обычный вклад. Получишь ' + simple;
} else if (simple < hard){
return 'Выбирай капитализацию. Получишь ' + hard;
}
}
getProfitableDeposit();
Мой вариант решения на основе изученных материалов:
Сводка
let getProfitableDeposit = function (startSum, period, persentNonCap, persentCap) {
let totalCap = startSum;
let totalNonCap;
let decision;
totalNonCap = startSum + (startSum * (persentNonCap / 12 * period) / 100);
for (let i=1; i<=period; i++) {
totalCap += totalCap * (persentCap / 12) / 100;
};
if (totalNonCap > totalCap) {
decision = 'Выбирай обычный вклад. Получишь ' + Math.floor(totalNonCap);
};
if (totalNonCap < totalCap) {
decision = 'Выбирай капитализацию. Получишь ' + Math.floor(totalCap);
};
return decision
}
Мой вариант. У меня всё работает.)))
let calculateDeposit = function (initialSum, percentAge, depositMonths, boolVariable) {
let percent = percentAge / 100;
let depositTotal = 0;
if(!boolVariable) {
depositTotal = ((percent / 12) * depositMonths * initialSum) + initialSum;
}
else {
depositTotal = calculateDepositMonths(initialSum, percentAge, depositMonths);
}
return Math.floor(depositTotal);
};
let calculateDepositMonths = function (initialSum, percentAge, depositMonths) {
let percent = percentAge / 100;
let depositTotal = initialSum;
for(let i = 0; i <= depositMonths - 1; i++) {
depositTotal += (percent / 12) * depositTotal;
}
return depositTotal;
};
getProfitableDeposit = function (initialSum, depositMonths, simplePercent, capitalPercent) {
OutCapitalization = calculateDeposit(initialSum, simplePercent, depositMonths, false);
Capitalization = calculateDeposit(initialSum, capitalPercent, depositMonths, true);
if(OutCapitalization >= Capitalization) {
return strVal1 = 'Выбирай обычный вклад. Получишь ' + OutCapitalization;
} else {
return strVal2 = 'Выбирай капитализацию. Получишь ' + Capitalization;
}
}
console.log(getProfitableDeposit(10000, 9, 7, 6.8));
Ого, интересное решение)
Я решил так, добавлю в общую кучу - может кому-то поможет понять:
let getProfitableDeposit =function(startDeposit, termDeposit, percentDef, percentCap) {
let percentDefProfit = (startDeposit * 0.01) * (100 + percentDef / 12 * termDeposit);
let percentCapProfit = startDeposit;
for(i = 1; i <= termDeposit; i++) {
percentCapProfit += (percentCapProfit * percentCap / 1200);
}
if(percentDefProfit > percentCapProfit) {
return 'Выбирай обычный вклад. Получишь ' + Math.floor(percentDefProfit);
}
return 'Выбирай капитализацию. Получишь ' + Math.floor(percentCapProfit);
}
Рабочий код, проходит проверку.
let getProfitableDeposit = function(depositAmount,termOfDeposit, percentYearNotCap, percentYearCap){
let totalSumNotCap = Math.floor(depositAmount + depositAmount * (percentYearNotCap/12*termOfDeposit/100))
let profitAmount = 0;
for (let i = 1; i <= termOfDeposit; i++){
profitAmount += (depositAmount + profitAmount) * (percentYearCap/12/100)
};
let totalSumCap = depositAmount+Math.floor(profitAmount);
console.log(totalSumCap);
if(totalSumNotCap-depositAmount > totalSumCap-depositAmount){
return 'Выбирай обычный вклад. Получишь ' + totalSumNotCap;
} else{
return 'Выбирай капитализацию. Получишь ' + totalSumCap;
}
}