//Решение Инески (Третья программа "Протеиновый коктейль"), понравилось, постараюсь разложить на составляющие, т.к. сам потерял не один час, пока дошло. Сам бы никогда не решил, пришлось подсматривать. Код немного изменил в смысле подробности для лучшего усвоения.
var days = 9; // Дней в периоде
var period = 3; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будни
var weekendAmount = 100; // Количество протеина в выходные
var total = 0;
var currentDay;
for (var i = days; i > 0; i = i - 1) {
currentDay = i % period;
if(currentDay === 0) {
if (i % 7 === 6 || i % 7 === 0 ) {
total = total + weekendAmount;
} else {
total = total + workDayAmount;
}
}
}
-
var total = 0; - объявляем переменную total, которая запрашивалась в условии задачи. Переменная должна быть приравнена к нулю. Если просто объявить переменную (без нуля), программа не работает. Если поставить любое число, оно будет прибавляться к результату расчетов.
-
var currentDay - объявляем переменную “текущего дня” для удобства расчетов.
-
for (var i = days; i > 0; i–) код цикла (цикл будет отрицательным, т.е. расчет будет происходить в обратном порядке, как печать листов от конца к началу): объявляется переменная i, равная количеству расчетного периода в днях (конечное число расчетов); i должен быть больше нуля, первый день (начальное число расчетов); переменная счетчик i = i - 1, означающая, что переменная будет уменьшаться от “days” до “0” с шагом в 1 день.
-
Далее идет тело цикла {currentDay = i % period; , обозначающее, что для текущего расчетного дня “currentDay” необходимое количество дней “i” делится на период “period” с вычислением остатка деления. В данном случае нас интересует только деление без остатка, т.к. это будет означать третий день, т.е. день приема протеина. Получаем, что если условие третьего дня выполняется (3 строка), то будет прием пищи, который в последствии (в п.5) будет излагаться в скобках { } (с учетом будней и выходных).
for (var i = days; i > 0; i = i - 1) {
currentDay = i % period;
if (currentDay === 0) { }
} -
Теперь разбираемся с приемом протеина. if (i % 7 === 6 || i % 7 === 0 ) Если переменная i делится на количество дней в неделе 7 и получается остаток 6, т.е. шестой день недели (суббота) или без остатка, т.е. седьмой день недели (воскресенье), выполняется условие {total = total + weekendAmount;}, т.е. total равен предыдущим суммам съеденного протеина плюс норма выходного дня (100 г). В противном случае, если деление “i % 7” получилось с остатками 1, 2, 3, 4 или 5 (будние дни), выполняется условие else {total = total + workDayAmount;}, т.е. total равен предыдущим суммам съеденного протеина плюс норма буднего дня (200 г). В общем виде пятый пункт объяснения выглядит так:
if (i % 7 === 6 || i % 7 === 0 ) {
total = total + weekendAmount;
} else {
total = total + workDayAmount;
} -
Осталось собрать два пункта в один.
for (var i = days; i > 0; i–) {
currentDay = i % period;
if (currentDay === 0) {
if (i % 7 === 6 || i % 7 === 0 ) {
total = total + weekendAmount;
} else {
total = total + workDayAmount;
}
}
}