C/C++

Программирование язык с++

Подскажите, пожалуйста.
for (int i = (a / d + (a % d > c)) * d + c; i <= b; i += d) { cout << i << ' '; }
Как работает этот цикл? Он верный, система его приняла. Не понимаю, как действует знак сравнения в центральных скобках арифметического выражения. Что будет если a % d будет меньше с?
(a % d > c) будет равно 1, если верно, и 0, если неверно.
Строго говоря, это выражение дает true или false, которые в арифметических выражениях приводятся к 1 или 0.
Иван Ашпаров
Иван Ашпаров
63 784
Лучший ответ
a % d > c возвращает true либо false, которые при неявном приведении к типу int принимают одно из двух значений 0 либо 1
Юрий Клыпин
Юрий Клыпин
85 921
a % d > c возвращает либо true, либо false
после этого следует неявная конвертация в int, true становится 1, false становить 0.
можешь записать это как
if( a % d > c ) for (int i = (a / d + 1) * d + c; i <= b; i += d) { cout << i << ' '; }
else for (int i = (a / d ) * d + c; i <= b; i += d) { cout << i << ' '; }
а на будущее - вот такие конструкции НЕ НУЖНЫ от слова совсем. Ибо разбираться в заумностях какого-нибудь высокообразованного идиота не хочется никому. В начале задача разбивается на простые и понятные большинству подзадачи и потом уже по промежуточному результату идёт сравнение и ... так далее
DT
Dj Tiesto Из Баку
21 700
>> Что будет если a % d будет меньше с?
Будет то же самое действие что и при a % d больше с. Оператор ">" будет выполнять операцию сравнения левого операнда с правым и в выражение будет подставлен итог совершенной операции (true или false).
Дмитрий Ковтун
Дмитрий Ковтун
12 593