Другие языки программирования и технологии

В этой программе можно переставить выражения, но результат работы почти не из-меняется. Почему?

int i;
for (i =10; - -i;i >0)
cout <
потому что она ничего не делает? даже не компилится?
Александр Филиппов
Александр Филиппов
38 447
Лучший ответ
Единственно о чем здесь может быть вопрос. Так это о строке:
for (i =10; - -i;i >0)

там действительно можно переставлять местами, ми правильнее выглядеть должно так

for (i =10; i >0;- -i)

но и первая конструкция отработает. Давайте ее прочитаем:
1. Элемент здает начальное значение i равноое 10
2. Элемент сообщает что цикл будет работать до тех пор пока данное выражение не вернет false. Но. Давайте вспомним что такое false. фактически если выражение расположеное во второй позиции вернет 0 то цикл прекратится. При этом в данном выражении на каждой итерации i уменьшается на 1. И на определенном этапе i становится равным 0 и данная операция возвращает 0 и мы выходим из цикла.

3. Элемент просто сравнивает i c 0ю Это выражение вообще ни на чего не влияет. Т. е. первы вариант можно сократить до:
for (i =10; --i;)

Другое дело, так поступать в реальном программировании не надо. Т. к. ухудшает читабельность (с позиции человека) программы.

В нормальном же варианте:
1. Приравниваем i к 10
2. Сравниваем текущее значение i c 0
3. уменьшаем i на 1

Отличие будет. Во втором (правиьном) варианте цикл отработает еще при i=10. В неправильном как в вопросе цикл при i = 10 работать не будет. Т. е. количество итераций будет различаться на 1

Полностью идентично будет при правиьной записи for (i =9; i >0;- -i)

Похожие вопросы