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

Программирование стоит на операторах. % - один из них. То, что остальные заглянули чуть дальше, не делает их снобами. Решайте, как у вас получается. Здесь же не банковским счетом меряются

Очень хотелось бы в курсе больше объяснять логику применения разных операторов и переменных. Например ‘i’ в for - что это? Это не переменная - она нигде не объявляется, но мы ее применяем. Почему и что это такое не ясно из теории курса. (Просто тупое повторение задания не дает объяснений что к чему) Или почему в заданиях “Драйвер печати: режим копий” ставим “===” при выполнении задания “После объявления переменных добавьте условие, проверяющее, что mode имеет значение ‘pageCopy’.” Почему не просто = или ==… Таких нюансов много вылазит при выполнении основного задания самостоятельно. возникает много вопросов.

4 лайка

Как же не объявляется? Вот, в теории описываются все части цикла, в том числе первая часть с объявление переменной-счетчика.
По поводу знака равенства, один знак равенства = используется для присвоения, поэтому для сравнения значений использоваться не может. А чем отличается == от === в теории написано, правда в предыдущем курсе программы.
Также хотелось бы обратить ваше внимание на то, что теория в курсах - это минимум информации, а максимум - в книгах и справочниках, например https://learn.javascript.ru/

1 лайк

Спасибо большое за объяснение (так как не учла, что внутри for и есть var, который объявляет переменную i) и за хороший ресурс с расширенной теорией. Буду углубляться. так как действительно минимума не хватает для понимания применений разных операторов в определенных случаях. Надо шире и больше) Спасибо еще раз)

= - это оператор присвоения.
a = 10 - это значит вы переменной а присвоили значение 10
== и === - это операторы сравнения, которые дают значения false или true в зависимости от результата сравнения
== - нестрогое сравнение, допускается приведение значений переменных к одному типу "10": string == 10: number // true
=== - строгое сравнение, учитывается тип данных "10": string === 10: number // false

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

var weekEnd = 0; //Количество выходных в промежутке
var total = 0; //Общее количество протеина
var regDay = 0; //Количетсво протеиновых дней

for (i=period; i <= days; i+= period){ 
  regDay++; //Ищем протеиновые дни в промежутке времени
  if (i%7===0 || i%7===6){
    weekEnd++;//считаем количетсво выходных
  }
}

total = ((regDay-weekEnd)*200)+(weekEnd*100)//находим количество протеина в будни и выходные.

200 и 100 - это значения переменных. Пользуйтесь ими, тогда код будет универсальным.

1 лайк

Верно, упустил, спасибо.

Где объясняется про эту часть кода:
“regDay++; //Ищем протеиновые дни в промежутке времени”?
Почему прибавляет именно period?

А вы что хотите прибавить?

Потому что в цикле объявлена переменная var i = period? Почему тогда пишете i+=period, а не i++?

Хорошо мы общаемся вопросами на вопрос!

Прибавляется period, потому что в расчетах нас не интересует каждый следующий день, а только каждый третий.

Смысл мне понятен. Мне не понятно как это работает. Почему ‘regDay++’ === ‘regDay+=period’?

Не может быть знака равенства между этими величинами. Я не знаю, откуда вы это взяли.
Оператор ++ увеличивает на единицу, а += period в данном случае увеличивает на 3. Какое может быть равенство?

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

for(var i = period; i <= days; i+=period){
if (i%7===0 || i%7===6){
total += weekendAmount;
}
else {
total += workDayAmount;
}
}
console.log(‘Нужно сьесть ’ + total + ’ гр. протеина’);

Согласен, код читается просто и без всяких %. Но не совсем понял откуда цифры взял.
По возможности хотелось бы подробнее разобрать твой код, если не сложно.
Спасибо!

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

for(var i = 1; i <= days; i++){
if(i % 3 == 0){
if(i % 6 == 0 || i % 6 == 1){
total+=weekendAmount}else{
total += workDayAmount}
}
}

Программа выдает 3/5 проверок, и, насколько я понимаю, что-то не так с воскресеньем. Буду очень признателен!

Добрый день!
Попробуйте так:
for(var i = 1; i <= days; i++) {
if(i % 3 === 0) {
if(i % 7 === 0 || i % 7 === 6) {
total+=weekendAmount} else {
total += workDayAmount}
}
}

Остаток от деления номера любого субботнего дня на 7 будет равен 6.

Мое лаконичное решение:

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

for ( var i = period; i <= days; i += period ){
  if ( (i % 7) == 6 || (i % 7) == 0) total += weekendAmount;
  else total += workDayAmount;
}
1 лайк