Допустим если просто написать if (i%3 == 0) будет как бы в цикле условие выполняться через 3! это понятно! И то я его понял лишь запустив программу и посмотрев как рабоает! а на уровне языка я его не понял! То есть что значит == 0. Прям туман какой то в голове
Уже не говорю про это if ((i+1)%3 != 0) хотя я знаю что это условие будет делать! но не могу понять на уровне языка программирования что за что отвечает...
C/C++
Учу с++, можете объяснить на пальцах? не понимаю работу условия в теле цикла... if ((i+1)%3 != 0)
Когда вы делите одно целое число на другое целое число, то оно может поделиться нацело, то есть если частное умножить на делитель, получите делимое. Во всех остальных случаях деление будет с остатком. Там где остатка нет, принято считать, что остаток равен нулю. Это и есть ваш тяжёлый случай.
То есть, ты знаешь, что возвращает выражение i%3 ?
И что???
Теперь, что возвращает (i+1)%3 ???
И что???
Теперь, что возвращает (i+1)%3 ???
a % b - один из бинарных операторов, позволяет узнать остаток от целочисленного деления a на b ( 5 % 3 будет 2)
== и != бинарные операторы сравнения, которые возвращают true или false
a == b будет возвращать true если a и b равны между собой и false если нет
a != b будет делать все наоборот, если a и b равны он вернет false и true если НЕ равны.
вообще символ! в си-подобных языках унарный оператор и означает инверсию логического значения или его изменение на противоположное (было true станет false, например !(7 == 2) будет true)
далее a и b не обязаны быть только заранее определенными значениями, ими так же могут быть значения переменных, мат. операций или других функций, в случае мат. операций их часто берут в скобки чтобы однозначно указать порядок действий (хотя он такой же как в математике) и избежать проблем толкования компилятором
т. е. в вашем случае выражение (i + 1) и есть a
вам бы подучить унарные и бинарные операторы и порядок действий
так же вам возможно поможет понимание того что (i + 1) вычисляется но в i не сохраняется т. к. оператор + не изменяет исходных данных (для этого есть присвоение или =)
== и != бинарные операторы сравнения, которые возвращают true или false
a == b будет возвращать true если a и b равны между собой и false если нет
a != b будет делать все наоборот, если a и b равны он вернет false и true если НЕ равны.
вообще символ! в си-подобных языках унарный оператор и означает инверсию логического значения или его изменение на противоположное (было true станет false, например !(7 == 2) будет true)
далее a и b не обязаны быть только заранее определенными значениями, ими так же могут быть значения переменных, мат. операций или других функций, в случае мат. операций их часто берут в скобки чтобы однозначно указать порядок действий (хотя он такой же как в математике) и избежать проблем толкования компилятором
т. е. в вашем случае выражение (i + 1) и есть a
вам бы подучить унарные и бинарные операторы и порядок действий
так же вам возможно поможет понимание того что (i + 1) вычисляется но в i не сохраняется т. к. оператор + не изменяет исходных данных (для этого есть присвоение или =)
Андрей @}->
я вот этого пока понять не могу.... то что в скобках на том и акцент? и выполняется первым?
Андрей @}->
ну в случае с условием if (i%3 == 0) я понял, когда остаток деления будет == 0 условие выполняется!
По поводу второго условия if ((i+1)%3 != 0) я затрудняюсь в понимании... Ну я знаю что при запуске программы будет пропускаться каждое третий раз выполнения условия в цикле
Я для эксперимента написал так i%3 != 0 и получился почти такой же результат только пропускается каждое первое раз выполнения условия из 3х в теле цикла...
и я тоже впринципе понял, что выполнение условия в теле цикла будет выполнятся до тех пор пока остатком деления не станет 0.
Возвращаюсь к этому условию в теле цикла if ((i+1)%3 != 0)
и очевидно что часть (i+1) влияет на условие. но что именно она делает я не догоняю... и все так же туман.
По поводу второго условия if ((i+1)%3 != 0) я затрудняюсь в понимании... Ну я знаю что при запуске программы будет пропускаться каждое третий раз выполнения условия в цикле
Я для эксперимента написал так i%3 != 0 и получился почти такой же результат только пропускается каждое первое раз выполнения условия из 3х в теле цикла...
и я тоже впринципе понял, что выполнение условия в теле цикла будет выполнятся до тех пор пока остатком деления не станет 0.
Возвращаюсь к этому условию в теле цикла if ((i+1)%3 != 0)
и очевидно что часть (i+1) влияет на условие. но что именно она делает я не догоняю... и все так же туман.
Анатолий Ерохин
если первое условие будет выполянться только каждую третью итерацию цикла (т. е. когда i будет равен 0, 3, 6 и т. д.) то второе условие делает все наоборот - НЕ выполняется каждую третью итерацию, а +1 это всего лишь "отступ/смещение" которое приводит к тому что условие будет НЕ выполняться когда i = -1, 2, 5 и т. д. прибавляя к i единицу вы как бы отодвигаете ту границу на которое данное условие заточено (это уже мат. часть нежели программирование)
а касательно первого пропуска - i небось с нуля у вас начинается в цикле (аля for (int i =0; i < __; i++) { ...} ) отсюда и пропуск - 0 кратен любому числу :D измените стартовое значение в for и получите такой же результат но с i%3 != 0
а касательно первого пропуска - i небось с нуля у вас начинается в цикле (аля for (int i =0; i < __; i++) { ...} ) отсюда и пропуск - 0 кратен любому числу :D измените стартовое значение в for и получите такой же результат но с i%3 != 0
Если остаток от деления на 3 == 0, то выполнить условие
% - выявить остаток от деления
Пр
5 % 3 = 2
6 % 3 = 0
7 % 3 = 1
% - выявить остаток от деления
Пр
5 % 3 = 2
6 % 3 = 0
7 % 3 = 1
Андрей @}->
а если написать 1? почему 0 выполнить условие? ведь 0 это false или нет?
Похожие вопросы
- C++ как написать if(x!=1,2,3)
- Как это реализовать в с++? вычислить сумму S =1*3+3*5+5*7 +..+(2n -1)(2n +1) для заданного n
- Можете объяснить пожалуйста строчки в этом коде С++
- Найти решение уравнения(arccos(x-1)+x^3-4=0) на указанном диапазоне ([0.5;1.9]). используя численный метод-Метод Ньютона
- Объясните мне принцип работы циклов
- Объясните работу цикла for в c++
- Друзья помогите с ребусом VOLVO+FIAT=MOTOR. I need your help urgently...Мой код ниже. Посоветуйте с циклами!)))
- Кто нибудь, объясните мне нормально, ясно, на русском, зачем нужен return 0 в с++?
- С++ Циклы. Помогите написать условие
- Помогите С++ с цикла for нужно сделать while цикл и do while цикл точнее у меня вышла только с циклом for
По поводу второго условия if ((i+1)%3 != 0) я затрудняюсь в понимании... Ну я знаю что при запуске программы будет пропускаться каждое третий раз выполнения условия в цикле
Я для эксперимента написал так i%3 != 0 и получился почти такой же результат только пропускается каждое первое раз выполнения условия из 3х в теле цикла...
и я тоже впринципе понял, что выполнение условия в теле цикла будет выполнятся до тех пор пока остатком деления не станет 0.
Возвращаюсь к этому условию в теле цикла if ((i+1)%3 != 0)
и очевидно что часть (i+1) влияет на условие. но что именно она делает я не догоняю... и все так же туман.
if ((i+1)%3 != 0) - каждая 3 е условие пропускается
if(i%3 != 0 ) - каждое 1е условие пропускается