Покажите код.
Первое испытание, включая бесплатные курсы, которое не прошел((. Нарушилась последовательность преподнесения материала, а искать в сторонних материалах более подробную информацию о % совсем сейчас не хочется.
Объяснения кодов в этой ветке, ну как-то тоже не доходят. Не могу понять причину своего тупизма)). Может потому что есть подозрение, что для своего проекта я бы делал подобную задачу гораздо проще.
Оставил эту задачку себе на потом, когда самостоятельно более глубже буду изучать js.
Решение без деления по модулю. Весьма извращенное, лучше юзать модуль.
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;
}
}
Прямо мои мысли прочитали))).
Я все-таки добил это задание таким образом, как Вы написали.
Может и извращенно, но зато в коде есть все то, что давалось в уроках на данный момент.))
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;
}
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 (бесконечный цикл). Проверьте условие остановки цикла
Это и решением сложно назвать, но работает и ушел всего час на все про все Так сказать, вариант от людей, которые не ищут легких путей но хотят быстро…
Код
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;
}
}
Его нельзя назвать универсальным, он подогнан под варианты из тестов.
Как-то так, все тесты проходит:
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;
}
}
странно - все выкладывают решение через “%” - этого нет в курсах, я понятия не имею что это такое, ладно предположим я поняла из объяснений (спасибо SNPR), но простите какой кайф тут сидеть и что то там решать способами и методами которых не т в теории - еще и выкладывать, все равно что я вам дам задание пошить брюки вручную, а когда вы меня спросите как же это сделать - достану красивую швейную машину и пошью, у меня такая аналогия. не профессионально, как мне кажется
Об операторе % есть в подсказке к заданию. Достаточно простое объяснение там изложено.
Возможно я использовал костыль, там где добавил неравно нулю и равно нулю. Потому что 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==7n-1){
weekend=1;
}
if(day==nperiod&&weekend==0){
total+=workDayAmount;
}
if(day==nperiod&&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;
}
Остаток будет равен 2. Вы делите меньшее число на большее. Целой части от деления не будет. А всё, что остается - это остаток.