Третья программа: «Протеиновый коктейль!» Подробное объяснение


#1

//Решение Инески (Третья программа "Протеиновый коктейль"), понравилось, постараюсь разложить на составляющие, т.к. сам потерял не один час, пока дошло. Сам бы никогда не решил, пришлось подсматривать. Код немного изменил в смысле подробности для лучшего усвоения.

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;
}
}
}

  1. var total = 0; - объявляем переменную total, которая запрашивалась в условии задачи. Переменная должна быть приравнена к нулю. Если просто объявить переменную (без нуля), программа не работает. Если поставить любое число, оно будет прибавляться к результату расчетов.

  2. var currentDay - объявляем переменную “текущего дня” для удобства расчетов.

  3. for (var i = days; i > 0; i–) код цикла (цикл будет отрицательным, т.е. расчет будет происходить в обратном порядке, как печать листов от конца к началу): объявляется переменная i, равная количеству расчетного периода в днях (конечное число расчетов); i должен быть больше нуля, первый день (начальное число расчетов); переменная счетчик i = i - 1, означающая, что переменная будет уменьшаться от “days” до “0” с шагом в 1 день.

  4. Далее идет тело цикла {currentDay = i % period; , обозначающее, что для текущего расчетного дня “currentDay” необходимое количество дней “i” делится на период “period” с вычислением остатка деления. В данном случае нас интересует только деление без остатка, т.к. это будет означать третий день, т.е. день приема протеина. Получаем, что если условие третьего дня выполняется (3 строка), то будет прием пищи, который в последствии (в п.5) будет излагаться в скобках { } (с учетом будней и выходных).
    for (var i = days; i > 0; i = i - 1) {
    currentDay = i % period;
    if (currentDay === 0) { }
    }

  5. Теперь разбираемся с приемом протеина. 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;
    }

  6. Осталось собрать два пункта в один.
    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;
    }
    }
    }


#2

В чем смысл этой ветки?


#3

Не кормить в первый и второй день


#4

А если мы эту ветку уберем, то кушать будет в первый и второй день?)


#5

Без ветки получается незаконченная связка if - else


#6

Это нормальная практика, нет такого понятия как незаконченная связка if- else


#7

Напиши, как ты видишь?


#8
for (var i = days; i > 0; i -= 1) {
  currentDay = i % period;
  if (currentDay === 0) {
    if (i % 7 === 6 || i % 7 === 0 ) {
      total += weekendAmount;
    } else {
      total += workDayAmount;
    }
  }
}

#9

Логично, работает)))


#10

Форматируйте свой код в первом сообщении с помощью кнопки </> в редакторе сообщений, пожалуйста.


#11

Ready


#12

Видимо не ready


#13

Было бы намного удобнее, если бы Вы, разработчики, детально разбирали КАЖДОЕ задание. Теория преподается из рук вон, приходится ползать по сторонним сайтам. Странно, что я взял решение админа, которое должно быть образцовым, а потом вылезают непонятные ляпы. И Ваш раздел по JS просто ужасен, даже по сравнению с остальными темами. Простите за резкость


#14

@juwain, @GreenLera, :point_up: отзыв по разделу js.

Не видела решения админа, поделитесь?


#16

#24

Здесь js изучается не в контексте программирования, а в контексте оживления верстки. Для первого знакомства not bad