не понимаю, почему код выдает такое значение
задача из html academy
Назови функцию getPrice. У неё должно быть два параметра:
- время (в часах), которое нужно потратить на проект;
- булево значение, которое указывает на срочность проекта — true для срочного заказа и false для обычного.
Названия параметров могу быть любыми.
Для каждого проекта есть фиксированная ставка — 1500 рублей в час. Расчёт стоимости проектов выглядит так: время * ставка в час.
Есть несколько нюансов. Если проект срочный, то часы уменьшаются в два раза, а ставка за час повышается в 2.5 раз.
А если время проекта больше 150 часов, ставка в час уменьшается на 250 рублей.
В первую очередь проверяй срочность. Функция должна возвращать стоимость проекта.
вот мой код
function getPrice(time,isImportant){
let sum;
if (isImportant && time <= 150){
sum = (time / 2) * (1500*2.5)
} else if(isImportant && time > 150){
sum = (time / 2)* (1500*2.5-250)
}
else if (!isImportant && time <=150){
sum = time * 1500;
} else if(!isImportant && time > 150){
sum = (time) * 1250;
} else {
sum = time/2 * 1250
}
return sum;
}
есть 6 проверок, 5 из них пройдены,6 не проходится, не могу понять, почему??
Первый тест. Время в часах: 200, срочный ли проект: true. Ожидаемая стоимость: 375000 Результат функции getPrice равен 350000 и не совпадает с ожидаемым значением
Второй тест. Время в часах: 150, срочный ли проект: false. Ожидаемая стоимость: 225000 Результат выполнения функции getPrice равен 225000 и совпадает с ожидаемым значением
Третий тест. Время в часах: 100, срочный ли проект: true. Ожидаемая стоимость: 187500 Результат выполнения функции getPrice равен 187500 и совпадает с ожидаемым значением
Четвёртый тест. Время в часах: 150, срочный ли проект: true. Ожидаемая стоимость: 281250 Результат выполнения функции getPrice равен 281250 и совпадает с ожидаемым значением
Пятый тест. Время в часах: 320, срочный ли проект: true. Ожидаемая стоимость: 560000 Результат выполнения функции getPrice равен 560000 и совпадает с ожидаемым значением
Шестой тест. Время в часах: 320, срочный ли проект: false. Ожидаемая стоимость: 400000 Результат выполнения функции getPrice равен 400000 и совпадает с ожидаемым значением Всего проверок: 6, пройдено: 5 (String)
РАЗОБРАЛСЯ, суть была в том что в любом случае, если проект срочный мы умножаем на 1500*2.5 даже если часов после уменьшения в 2 раза будет меньше 150
function getPrice(time,isImportant){
let sum;
if (isImportant){
time = time/2;
if (time > 150){
sum = time * (1500*2.5-250)
}
if (time <=150){
sum = time * (1500 * 2.5)
}
}
else if (!isImportant && time <=150){
sum = time * 1500;
} else if(!isImportant && time > 150){
sum = (time) * 1250;
} else {
sum = time/2 * 1250
}
return sum;
}
Я СНАЧАЛА не дочитал до конца условие задачи...
Почему нужно сначала проверять срочность? Чтобы программа работала корректно.
Представьте, что пришёл срочный проект на 160 часов. Сначала мы проверяем срочность, увеличиваем ставку и уменьшаем количество часов вдвоё. Часов станет 80. Тогда проверка на количество часов уже не пройдёт и не внесёт свои коррективы в ответ. Так как время часов изменилось, эта проверка и не должна проходить.
Если пришёл срочный проект на 400 часов, то сначала мы сокращаем время в два раза, увеличиваем ставку. Время проекта теперь 200 часов, что всё равно больше 150, поэтому мы снижаем ставку на 250 рублей, раз проект всё равно большой.
Ответы (1 шт):
Проблема в том, что после того, как ваш проект стал срочным, вы не проверяете ещё раз - является он долгим или нет.
После срочности время сократилось в два раза, то есть он перестал иметь отметку "долгий", вот и вся проблема.
function getPrice(time, isImportant) {
let cost = 1500;
if (isImportant) {
cost = cost * 2.5;
time = time / 2;
}
if (time > 150) {
cost = cost - 250;
};
return cost * time;
};
console.log(getPrice(200, true) === 375000);
console.log(getPrice(150, false) === 225000);
console.log(getPrice(100, true) === 187500);
console.log(getPrice(150, true) === 281250);
console.log(getPrice(320, true) === 560000);
console.log(getPrice(320, false) === 400000);