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

Покажите код.

Первое испытание, включая бесплатные курсы, которое не прошел((. Нарушилась последовательность преподнесения материала, а искать в сторонних материалах более подробную информацию о % совсем сейчас не хочется.
Объяснения кодов в этой ветке, ну как-то тоже не доходят. Не могу понять причину своего тупизма)). Может потому что есть подозрение, что для своего проекта я бы делал подобную задачу гораздо проще.
Оставил эту задачку себе на потом, когда самостоятельно более глубже буду изучать js.

4 лайка

Решение без деления по модулю. Весьма извращенное, лучше юзать модуль.

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

var total = 0;
var saturday = 6;
var sunday = 7;

for(var i = 0 ; i <= days; i+=3 ){

if (i == saturday )    
{
  saturday*=2 + 1;
  total += weekendAmount;  
 }
else if( i == sunday ){
  sunday*=2 + 1;
  total += weekendAmount;
}
else if(i / period)
{
  total += workDayAmount;      
}    

}

1 лайк

Прямо мои мысли прочитали))).
Я все-таки добил это задание таким образом, как Вы написали.
Может и извращенно, но зато в коде есть все то, что давалось в уроках на данный момент.))

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

function isWeekend(day) {
  return day % 7 === 6 || day % 7 === 0;
}

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

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

Вероятнее всего у вас получается infinite loop (бесконечный цикл). Проверьте условие остановки цикла

Это и решением сложно назвать, но работает и ушел всего час на все про все :face_with_raised_eyebrow: Так сказать, вариант от людей, которые не ищут легких путей но хотят быстро…

Код

var days = 9;
var period = 3;
var workDayAmount = 200;
var weekendAmount = 100;
var total = 0;
var today;
var countDays = 1;
var countPeriod = 1;

for (var t = 1; t <= 7; t++) {
if (t >= 1 && t <=5) { today = ‘workDay’ }
else { today = ‘weekend’};
if (t === 7) { t = 0 };
if (countDays === days || days <= 0) { t = 8 };
countDays = countDays + 1;
if (countPeriod === period) {
if (today === ‘workDay’) {
total = total + workDayAmount;
}
else {
total = total + weekendAmount;
};
countPeriod = 0
};
countPeriod = countPeriod + 1;
}

console.log('На ’ + days + ’ дней необходимо ’ + total + ‘г протеина’);

мой код, все работает и, на мой взгляд, самый простой.

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

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

2 лайка

Его нельзя назвать универсальным, он подогнан под варианты из тестов.

Как-то так, все тесты проходит:

var days = 9;           
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 % 7 === 6) || (i % 7 === 0)) {
      total += weekendAmount;    
    } else {
      total += workDayAmount;   
    }
  } else {
    total == 0;
  }  
  console.log(total);
}
for(var i =1 ; i <= days  ; ++i) {
   if (i % 3 == 0)
    {
      if (i % 6 == 0 && i % 12 != 0){
         total = total + weekendAmount;
        }
      
      else {
        total = total + workDayAmount;
        }
    }
  }

Вот так почему-то тоже прокатывает.

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

for (var i = period; i <= days; i += period) {
  var currentDayInWeek = i; 

  if (i > countDaysInWeek) {
    currentDayInWeek = i % countDaysInWeek;
  }
  
  if(!currentDayInWeek) {
    currentDayInWeek = saturdayIs;
  }
  
  if (currentDayInWeek === sundayIs || currentDayInWeek === saturdayIs) {
    total += weekendAmount;
  } else {
    total += workDayAmount;
  }
}
var days = 5;            // Дней в периоде
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 лайк

странно - все выкладывают решение через “%” - этого нет в курсах, я понятия не имею что это такое, ладно предположим я поняла из объяснений (спасибо SNPR), но простите какой кайф тут сидеть и что то там решать способами и методами которых не т в теории - еще и выкладывать, все равно что я вам дам задание пошить брюки вручную, а когда вы меня спросите как же это сделать - достану красивую швейную машину и пошью, у меня такая аналогия. не профессионально, как мне кажется

8 лайков

Об операторе % есть в подсказке к заданию. Достаточно простое объяснение там изложено.

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

var days = 30;            // Дней в периоде
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 % 7 <= 5 && i % 7 != 0) {
            total += workDayAmount;
        }
        if (i % 7 > 5 || i % 7 === 0){
            total += weekendAmount;
        }
    }
}

А еще это непонятное деление по модулю. Я постоянно его путаю с обычным делением. Хорошо, я понял что использование % это значит будет выводить остаток. А какой остаток в делении скажем 2 % 3? это получается дробное число, там нет остатка. Остаток будет нуль. Как же тогда вычисляется день недели в первой неделе если остаток всегда получается нулем? Не понимаю как это работает -_-

Сделал не смотря подсказку.

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

var total=0;
var weekend=0;

for (var day=1;day<=days; day++) {
for(var n=1; n<=10;n++){
if(day==7n){
weekend=1;
}
if(day==7
n-1){
weekend=1;
}
if(day==nperiod&&weekend==0){
total+=workDayAmount;
}
if(day==n
period&&weekend==1){
total+=weekendAmount;
}
}
weekend=0;
}

Потом посмотрел подсказку. Хорошо что не смотрел, лично для меня так как то проще.

Сократил код с помощью тернарного оператора:


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

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

Остаток будет равен 2. Вы делите меньшее число на большее. Целой части от деления не будет. А всё, что остается - это остаток.

1 лайк