“…которое будет ответом, является остатком от деления, а в определении этот факт отрицается” Можете математически это показать? То есть то что при делений 1 на 2 остаток получится 1? Я вам написал что 1/2=0,5 Вы на это сказали что десятич. дроби не интересуют. Как же вы получили 1?
"Правильно будет так: “при делении меньшего числа на большее остатком от деления будет само это число”. И снова ошиблись.
Почему вы считаете, что при делении любого числа (Х) на большее число (Y) остаток всегда будет равен делимому числу(Х)???
Я вас просил объяснить как вы получили математическийостаток =1 при делении 1 / 2, вы же расписали работу оператора “%”. Я в курсе как работает этот оператор.
Второй пример 5%3 - (т.е. когда делимое больше делителя) в контексте нашей беседы вообще излишен, т.к. речь шла только о случаях: делимое<делителя.
если число меньше делителя, то остатком от деления оно и является. это и без ЯП очевидно.
собственно это верно и в других ситуациях. число уменьшается на N целых делителей, пока не станет меньше делителя и возвращается в результате
операция применима естественно только ко множеству целых чисел. молите богов жабаскрипта, что не заставляют вас приводить числа к числовым типам, типа integer, float и пр.
var days = 5; // Дней в периоде
var evenDayAmount = 200; // Количество протеина в чётные дни
var oddDayAmount = 100; // Количество протеина в нечётные дни
var total = 0; // Общее количество протеина
for (days; days >= 1; days–) {
if ((days % 2) === 0) {
total = total + evenDayAmount;
}
var days = 9; // Дней в периоде
var period = 3; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будние
var weekendAmount = 100; // Количество протеина в выходные
var total = 0;
for(var i = 1; days >= i; i++) {
if (i % period === 0) {
var dayWeek =i % 7;
if (dayWeek > 0 && dayWeek < 6) {
total += workDayAmount;
} else {
total += weekendAmount;
}
Не догадался использовать % для определения выходного дня. Выходные дни нашел так: первый выходной день увеличивал на 7 в каждом цикле. Определил отдельно сумму для каждого третьего дня и для выходных дней, и нашел разницу между ними. Получилось громоздко, немного топорно и притянуто за уши, но в целом код рабочий)
var days = 25; // Дней в периоде
var period = 3; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будние
var weekendAmount = 100; // Количество протеина в выходные
var workDay = 0;
var weekEnd = 0;
var total = 0;
if ( days => 6){
for (var i = 6; i <= days; i += 7){
if (i % 3 === 0) {
weekEnd += weekendAmount;
}
}
}
if ( days => 7){
for (var i = 7; i <= days; i += 7){
if (i % 3 === 0) {
weekEnd += weekendAmount;
}
}
}
for (var i = 1; i <= days; i++) {
if (i % 3 === 0) {
workDay += workDayAmount
}
}
total = workDay - weekEnd;
В Visual Studio Code все работает как надо, но редактор не принимает. В чем может быть проблема?
var days = 25; // Дней в периоде
var period = 3; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будние
var weekendAmount = 100; // Количество протеина в выходные
var total = 0;
// мы вводим проверку, делится ли numberOfDays на 3 без остатка. если да, то кормим кота.
for(var name = 1, numberOfDays = 1; numberOfDays <= days; name++, numberOfDays++) //what day is it today?
{
if (numberOfDays%3 === 0)
{
if (name >= 1 && name <= 5) //today is workday
{
total = total + workDayAmount;
}
if (name === 6) //today is weekend
{
total = total + weekendAmount;
}
if (name === 7) //today is weekend
{
total = total + weekendAmount;
name = 0;
}
}
else
{
if (name === 7)
{
name = 0;
}
}
console.log(numberOfDays = ${numberOfDays}, name = ${name}, total = ${total});
вот это добавьте последним в цикл, чтобы проинспектировать, с какого момента у вас косячки начинают идти.
у вас не используется переменная period почему-то.
и есть решение попроще, слишком мудрено у вас
поправил ваше решение, чтобы работало - спойлер
var days = 25; // Дней в периоде
var period = 3; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будние
var weekendAmount = 100; // Количество протеина в выходные
var total = 0;
// мы вводим проверку, делится ли numberOfDays на 3 без остатка. если да, то кормим кота.
for (var name = 1, numberOfDays = 1; numberOfDays <= days; name++, numberOfDays++) {
if (numberOfDays % period === 0) {
if (name >= 1 && name <= 5) {total += workDayAmount;}
if (name == 6 || name == 7) {total += weekendAmount;}
}
if (name == 7) {name = 0;}
console.log(`numberOfDays = ${numberOfDays}, name = ${name}, total = ${total}`);
}
Нашел ошибку. Ответили тут https://toster.ru/q/612902.
А переменная period не используется так как это решение работает только для period = 3; Поэтому не стал подставлять переменную в решение.
ну я вам там поправил, на будущее, если используете var, то при сравнении числовых переменных используйте нестрогое сравнение “==”. Почему так происходит - объяснение доступно только для тех, кто глубоко погрузился в этот безумный язык. Ну для прикола можете после объявления переменной через var проверить его тип: console.log(typeof(name)); например. оно будет строкой =) поэтому строгое сравнение c числом в условии не будет срабатывать никогда.
А лучше изучите let и const и используйте только их.
Всем привет!) У меня получилось вот такое решение (сначала):
var days = 25; // Дней в периоде
var period = 3; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будние
var weekendAmount = 100; // Количество протеина в выходные
var total = 0;
for (var i = 1; i <= days; i++) {
if (i % period === 0) {
if (i <= 7 && i % 6 === 0 || i % 7 === 0) {
total = total + weekendAmount;
console.log(total);
} else {
total = total + workDayAmount;
console.log(total);
}
}
}
И это решение работает. Может вопрос глупый: но почему оно срабатывает на проверке???
Если посмотреть, то во втором условии я проверяю только первую неделю на тип дня недели (будни / выходные), а дальше по идее всегда должно срабатывать действие, указанное в else.
объясню: ни одна проверка не выпадает на субботу следующих за первой недель
а еще вы не понимаете как работает остаток от деления, суббота это 6 день 7-дневной недели. значит i % 7 == 6 будет субботой, а не ваше i % 6.
рассмотрим недели, где i > 7 (которое заведомо false) if (false && false || true) {/*bla-bla-bla*/} - как решится это условие по воскресеньям?
первая операция по приоритету будет (false && false) - это даст [false] в итоге (и она будет давать false всегда, начиная со второй недели)
вторая операция ([false] || true) - по воскресеньям условие всегда дает true, независимо от того, какие операнды подставить в первые две логики условия.
а суббота по тестам вам просто не попадается вне первой недели
так что вы – Нео, гордитесь, что написали неправильный код, который обошел проверку
естественно код нужно переделать на правильный, мой совет - сократите количество итераций цикла, можно же стартовать сразу со значения period и прибавлять его же в цикле, проверка на i <= 7 вообще бесполезная, она ничего не показывает, кроме того, что неделя не первая.
@GreenLera а можно тесты для этой задачи переделать? тут человек обошел проверку очень элегантно. Например, подгадать такие периоды и длину цикла, чтобы проверка выпадала на субботу и воскресенье внутри одного теста.
Спасибо большое за разъяснение! Теперь все встало на свои места
Но до Нео мне еще далеко - это решение вышло случайно, но интуиция подсказывала, что я решила задачку не честно и решила выяснить это!
Сейчас уже разобралась с оператором %, а то он действительно вводил меня в ступор, когда делимое было меньше делителя.