Можно ли заменить следующий бесконечный цикл на обычный цикл? Слышал, что всегда можно, но не понимаю как.
while (true) {
if (c1(a)) {
a = f1(a);
}
if (c2(a)) {
break;
}
a = f2(a);
}
Здесь f1, f2
- функции, возвращающие какое-то значение, зависящее от a
, c1, c2
- условия (функции, возвращающие bool
), зависящие от a
.
upd:
под обычным я понимаю без break, continue, goto
и прочих хаков, а чтобы условие было не постоянным/пустым
Заменить можно так
do {
if (c1(a)) {
a = f1(a);
}
cond = !c2(a);
if (cond)
a = f2(a);
} while (cond);
но в данном случае бесконечный цикл нагляднее
Например можно так. Но я бы не сказал что это улучшит читабельность.
for (;!c2(a=!c1(a)?:f1(a));a=f2(a));
Внезапный код-гольф?
Если вы хотите for
(обычный) - то можно просто
for(;;) {
if (c1(a)) {
a = f1(a);
}
if (c2(a)) {
break;
}
a = f2(a);
}
Или
for(;;a = f2(a)) {
if (c1(a)) a = f1(a);
if (c2(a)) break;
}
Мне кажется, что так понятнее всего.
Если захотите, то можно ещё использовать Go to, но это не советуется использовать. Главное не забывайте, что нужно условие выхода, оно делается через
if() {
}
Самым практичным является
while (true) {
Тело
}
Либо
for(;;) {
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Необходимо написать оптимальную по обращению к памяти функцию для обрезки пробелов справаСама обрезка сложностей не вызывает, непонятно,...
Вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x) с точностью ε (табл8
https://wandboxorg/permlink/fNyh3Nj0LroooFFq