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

С++, Чем отличаеться цикл for, от while?

По сути своей мало чем отличаются, нюансами - сильно отличаются.
while (условное выражение)
{
тело цикла
}

for (выражение инициализации; условное выражение; выражение завершения тела цикла)
{
тело цикла
}

Суть - цикл с предусловием. Сначала вычисляется условное выражение, если оно истинно, то выполняется тело цикла.

в for выражение инициализации, условное выражение и выражение завершения тела цикла могут отсутствовать
в while условное выражение не может отсутствовать
for(;;) - допустимая форма for
{
тело цикла
}

while() - бред
{
тело цикла
}

for содержит выражение инициализации
для while выражение инициализации может быть определено до самого цикла
Но (C++) в выражение инициализации for можно объявить переменную. Она будет видна только в теле цикла
for (int i = 0; i < 100; i++)
{
// i - доступна только в теле цикла
}
// здесь i - не доступна

for содержит выражение завершения тела цикла
для while выражение завершения тела цикла можно вставить в конец тела
while (условное выражение)
{
тело цикла
выражение завершения тела цикла
}

нюансы возникают с оператором continue.
Если в теле цикла for есть оператор continue, то он прыгнет на выражение завершения тела цикла, отуда на условное выражение.
Если в теле цикла while есть оператор continue, то он прыгнет сразу на условное выражение.
Петр Дронюк
Петр Дронюк
21 360
Лучший ответ
один цикл в другой переделываются без особого труда.
но читать код с while-циклом реализованным как for-цикл (или наоборот) не доставляет особого удовольствия, структура программы становится запутанной.

если алгоритм гласит "для каждого... выполнить... ", то и делаете for-цикл.

если же алгоритм гласит "пока... выполнить... " или "выполниять... пока.... " , то и делаете while или do-while циклы.

и не выёживаетесь...
в принципе, внешним видом :)

for ( оператор_1 выражение_1; выражение_2 ) оператор_2

анологично следующему:

оператор_1
while ( выражение_1 ) {
оператор_2
выражение_2;
}
Юрий Волохов
Юрий Волохов
96 229
for - цикл с параметром, кот. инициализируется, модифицируется и проверяется в заголовке цикла.

while - цикл с предусловием. изменяемая или неизменяемая (для бесконечного цикла, иногда нужно) переменная д/б объявлена до цикла и модифицироваться в теле цикла.

while может быть приведен к for и наоборот.
for - цикл со счетчиком
while - с предусловием.
do-while (или repeat-until в паскале) - с постусловием.

примеры
for (си)
int i;
int a;
a = 0;
for (i = 0; i < 10; i++)
a += i;

while (предусловие, си)
int a = 1;
int b = 5;
while (a < b)
a++

while (постусловие, си)
int a = 1;
int b = 5;
do {
a++
} while (a < b);

for (x86-ассемблер)
xor ax,ax
mov cx,10
do_for:
inc ax
dec cx
jnz do_for

while (предусловие, x86-ассемблер)
mov ax, 2
mov bx, 10
do_while:
cmp ax,bx
ja end_while
inc ax
jmp do_while
end_while:

while (постусловние, x86-ассемблер)
mov ax, 2
mov bx, 10
do_while:
inc ax
cmp ax,bx
jb do_while
AZ
Almaz Zhaparov
3 846
2 Ivantrs
"в принципе, внешним видом :)" - не дай Бог Вам преподавать

2 u3IOM4uk
Если Вам знаком Pascal, то Вы поймете меня: не нужно рассказывать про repeat until, когда спрашивают про while. Цикл с предусловием и цикл с постусловием - это крайне важные отличия

2 Ixer
"Тоесть в цыкл фор устроен счетчик, и он сам добавляет 1 к переменной, или отнимает) "
Вам лучше пойти и самому почитать про for, чтобы не объяснять кому-нибудь, что приращение идет на +1 или -1.
i++ и i-- -это да, но что разве не бывает i+=2, например?

2 V Vga
отличное объяснение, отличное

2 Виктор Харченко
"while может быть приведен к for и наоборот" - наоборот - это хорошо, да, пару-тройку операторов дописать и будет наоборот, да. Интересно-то как. Нет конечно в каких-то случаях.. . но чтобы так писать :)

P.S. общую картину из всего этого получить можно конечно. Но советую всем (и тому, кто спрашивал, и тем, кто отвечал) почитать еще и документацию :)
EB
Emazri Bolkvadze
1 741
В цыкле for ты устанавливаеш количество повторов. Цикл while виполняется до тех пор пока не выполнится какоето условие.
Тоесть в цыкл фор устроен счетчик, и он сам добавляет 1 к переменной, или отнимает) . В цыкл while ты можешь устоновить любое условие, например ждать нажатия клавишы, питаться подключится к серверу, что угодно.
Как бы for выполняет действия для каждого значениия, а while исполняет действия до определенного условия.
Оператор цикла do while называется оператором цикла с постусловием и используется в тех случаях, когда необходимо выполнить тело цикла хотя бы один раз. Формат оператора имеет следующий вид:

do тело while (выражение) ;

Схема выполнения оператора do while :

1. Выполняется тело цикла (которое может быть составным оператором) .

2. Вычисляется выражение.

3. Если выражение ложно, то выполнение оператора do while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполнение оператора продолжается с пункта 1.

Чтобы прервать выполнение цикла до того, как условие станет ложным, можно использовать оператор break.

Операторы while и do while могут быть вложенными.

Пример:

int i,j,k; ...i=0; j=0; k=0; do { i++; j--; while (a[k] < i) k++; } while (i<30 && j<-30);