Третья программа "Протеиновый коктейль"


#83

Воспользуйтесь цитированием. Где вы видели i = 9 % 7 === 6 ?


#84

var i = days; а например days = 9 или неважно сколько, просто мой код тоже работает с 2. Поэтому я не понимаю, я совсем новичок).


#85

Остаток от деления 9 на 7 равен 2. Где вы видели 6?


#86

Вопрос откуда взялось 6?


#87

В подсказке была запись. i - это счетчик, значение его в цикле меняется. Поэтому никак не будет 9 % 7 = 6.
Остаток 6 - соответствует шестому дню недели - субботе, остаток 0 - воскресенью.


#88

Спасибо! Подсказку не увидел. Интересно почему же с 2 вместо 6, тоже работает?


#89

Покажите весь свой код, пожалуйста.


#90

var days = 9; // Дней в периоде
var period = 3; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будние
var weekendAmount = 100; // Количество протеина в выходные
var total = 0;
var currentDay;

for (var i = days; i > 0; i–) {
currentDay = i % period;
if(currentDay ===0) {
if (i % 7 === 2 || i % 7 === 0) {
total += weekendAmount;
} else {
total += workDayAmount;
}
}
else {
total;
}
}
Но я изначально не правильно думал, что надо считать остаток, поэтому на бумаге у меня получился остаток 9%7=2; Не разобрался;


#91

Это просто удачное совпадение. Например, при количестве дней равном 28, результаты уже будут различаться.


#92

Мое решение.
for(period; period<=days; period+=3){
if ((period-k)%6==0 || period%7==0){
total+=weekendAmount;
k+=0.5;
}
else{
total+=workDayAmount;
}
}


#93

Откуда вы берете остаток от деления на шесть?


#94

Господи, ну и задача. Давно я не чувствовала такого абсолютного непонимания, с какой стороны подойти ))) и первый раз за все курсы пришлось подсматривать, как решают.
Молодцы, кто сам справился.

Подсказку про % надо как-то повыше поднять, или сделать на нее указание в начале, как и многие - узнала о ней только из темы на форуме.
А еще лучше если бы этот оператор рассматривался в курсе до того, как он пригодится.


#95

var days = 18; // Дней в периоде
var period = 3; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будние
var weekendAmount = 100; // Количество протеина в выходные
var total = 0;
var currentDay;
var weekDay = 0;
var word = 'выходной день ';
var alternateWord = ‘выходных дней’;

for (var i = days; i > 0; i --) {
currentDay = i % period;
if (currentDay === 0) {
if (i % 7 === 0 || i % 7 === 6 ) {
total += weekendAmount;
weekDay++;
}
else {
total += workDayAmount;
}
}
else {
total += 0;
}
}
if (weekDay > 1) {
word = alternateWord;
}
console.log(‘Весь период составит ‘+ days + ’ дней, из них будет ’ + weekDay + ’ ’ + word +’ в которые Кексу необходимо принять больше протеина. За этот период Кексу необходимо будет запастись ’ + total + ’ граммами протеина’);
Мой вариант такой же как и у Ineski, но немного дополнил его более грамотной обратной связью с пользователем.


#96

Это блин шутка? Я даже в сути задания запутался.


#97

Мне кажеться этот участок кода можно просто убрать?

А от этого:

можно избавиться если поменять условие в цикле на
for (var i = period; i <= days; i += period) {

}


#98

Получилось решить без единого цикла:

var days = 9; // Дней в периоде
var period = 3; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будние
var weekendAmount = 100; // Количество протеина в выходные

var intake = Math.floor(days / period);
var weekendDays = intake / 3;
var total = workDayAmount * intake - weekendAmount * Math.floor(weekendDays);

intake - кол-во приемов
Math.floor() - оркугление в меньшую сторону
weekendDays - кол-во выходных дней приема


#99

Ребят я решил так, только вот 20 минут бился с одной проблемой. Почему переменной total обязательно с самого начала присваивать значение = 0? иначе результат будет равен Null. Разве переменная не может сразу присвоить результат вычислений?

var total = 0;
for (var n = 1; days >= n; n++){
if (n % period === 0) {
if ( n % 7 === 6 || n % 7 === 0) {
total = +total + weekendAmount;
} else {
total = +total + workDayAmount;
}
}
}


#100

В таком случае результат будет равен NaN. Дело в том, что если переменной не присвоено никакое значение, то по умолчанию присваивается значение undefined.
Сложение undefined с числом дает NaN - “not a number”.


#101

Вот мое решение. Сделал сам, все работает.

var days = 7; // Дней в периоде
var period = 3; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будние 
var weekendAmount = 100; // Количество протеина в выходные 
var total = 0;


for (i = 3; i <= days; i = i + period){
  if ((i%7)<=5 && (i%7)!==0) {
        total += workDayAmount;
  }
  else {
            total += weekendAmount;
  }  
}

#102
var days = 9; // Дней в периоде
var period = 3; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будние
var weekendAmount = 100; // Количество протеина в выходные
var startDay = period;
var total = 0;

for (var i = startDay; i <= days; i += 3) {
  (i == 6 || !((i - 6) % 7) || !((i) % 7)) ? total += weekendAmount : total += workDayAmount;
}