Форум программистов, компьютерный форум CyberForum.ru

Циклы while и for: в чем суть отличия? - C++

Восстановить пароль Регистрация
 
 
rep plz
Заблокирован
12.07.2015, 10:30     Циклы while и for: в чем суть отличия? #1
Пытаюсь понять в чем суть отличия между этими циклами. Пишутся по разному, а по сути тоже самое. Можно ли написать цикл while таким образом, чтобы нельзя было сделать аналогичный цикл с for? или наоборот
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2015, 10:30     Циклы while и for: в чем суть отличия?
Посмотрите здесь:

Объясните, в чем суть директив #ifndef/#define/#endif C++
Указатели - в чем суть? C++
C++ в чем суть ошибки?
ovefrlow? ошибка в чем суть C++
C++ В чем отличия классов и структур?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Никита Однороб
107 / 87 / 13
Регистрация: 21.08.2012
Сообщений: 352
12.07.2015, 10:59     Циклы while и for: в чем суть отличия? #2
Всегда одно можно заменить другим. Просто для каких-то задач удобнее использовать for, для других - while
rep plz
Заблокирован
12.07.2015, 11:08  [ТС]     Циклы while и for: в чем суть отличия? #3
Никита Однороб, вот и я про тоже. просто мне интересно, что подвигло создателя с++ на создание 2-х аналогичных циклов. ведь тоже самое можно было сделать и с тем же cout-ом. философия его непонятна, упростить усложнением или усложнить упрощением, так что ли?
Никита Однороб
107 / 87 / 13
Регистрация: 21.08.2012
Сообщений: 352
12.07.2015, 11:11     Циклы while и for: в чем суть отличия? #4
rep plz, для обхода массива например цикл for гораздо удобнее. Вот, например, заполнение массива из 10 элементов с клавиатуры
C++
1
2
3
4
5
6
//for
for (int i = 0; i < 10; i++) cin >> a[i];
 
//while
int i = 0;
while (i < 10) { cin >> a[i]; i++; }
В цикле for не надо самому задавать начальное значение и изменять счетчик
rep plz
Заблокирован
12.07.2015, 13:54  [ТС]     Циклы while и for: в чем суть отличия? #5
Никита Однороб, не надо?
а это тогда что:
Цитата Сообщение от Никита Однороб Посмотреть сообщение
int i = 0
и
Цитата Сообщение от Никита Однороб Посмотреть сообщение
i++
Никита Однороб
107 / 87 / 13
Регистрация: 21.08.2012
Сообщений: 352
12.07.2015, 14:27     Циклы while и for: в чем суть отличия? #6
rep plz, я имею ввиду в теле цикла вручную это делать не надо
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
12.07.2015, 15:17     Циклы while и for: в чем суть отличия? #7
Цитата Сообщение от rep plz Посмотреть сообщение
просто мне интересно, что подвигло создателя с++ на создание 2-х аналогичных циклов
Если взять две операции "x + x + x + x + x + x + x + x + x + x" и "x * 10", то их результат будет одинаковым. Но вторая запись более удобнее и читабельнее. Примерно то же самое и с циклами "do while", "while" и "for". Они все делают по сути дела одно и то же, но в разных условиях удобно использовать разные виды цикла. При построении кода компилятор по возможности все циклы сводит к виду "do while", потому что они более эффективно исполняются
Deno95
 Аватар для Deno95
9 / 9 / 3
Регистрация: 16.12.2013
Сообщений: 105
12.07.2015, 23:57     Циклы while и for: в чем суть отличия? #8
for используют в том случаи если ты знаешь сколько будет итераций (проходов цикла)
while когда не знаешь количество итераций (проходов цикла)

C++
1
for(int i = 0; i <= 6; i++)
i должно сделать 6 проходов что бы закончить цикл (тут мы знаем сколько раз должно это произойти)

C++
1
2
3
4
while(i != 6)
{
    i += 2;
}
тут мы не знаем сколько надо сделать проходов что бы получить 6
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
13.07.2015, 00:12     Циклы while и for: в чем суть отличия? #9
Цитата Сообщение от Deno95 Посмотреть сообщение
for используют в том случаи если ты знаешь сколько будет итераций (проходов цикла)
Не обязательно. Просто многие думают, что оно так. Но for'ом удобно обходить, например, список. Многие поисковые интерфейсы сделаны так, что ими удобно пользоваться для for'а, но люди по незнанию корячатся с while'ами (например Копирование их под каталогов.)
Deno95
 Аватар для Deno95
9 / 9 / 3
Регистрация: 16.12.2013
Сообщений: 105
13.07.2015, 00:18     Циклы while и for: в чем суть отличия? #10
Evg, бесконечный цикл можно и в for конечно задать for(; если не путаю
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,963
13.07.2015, 00:28     Циклы while и for: в чем суть отличия? #11
Цитата Сообщение от rep plz Посмотреть сообщение
Можно ли написать цикл while таким образом, чтобы нельзя было сделать аналогичный цикл с for? или наоборот
Вот так можно:
C++
1
2
3
for(int i=0;i<10;++i)//i существует лишь внутри цикла
    cout<<i<<endl;
double i=3;//поэтому, после цикла можно объявить i еще разок
Вот так нельзя, да и банально неудобно.
C++
1
2
3
4
5
6
7
int i=0;
while(i<10)
{
    cout<<i<<endl;
    ++i;
}
double i=3;//а здесь компилятор матюкнется
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
13.07.2015, 09:00     Циклы while и for: в чем суть отличия? #12
Цитата Сообщение от Deno95 Посмотреть сообщение
Evg, бесконечный цикл можно и в for конечно задать for
Можно

Цитата Сообщение от Renji Посмотреть сообщение
Вот так нельзя
Дык если пишешь аналог, то писать надо правильно

C++
{
  int i=0;
  while(i<10)
  {
    cout<<i<<endl;
    ++i;
  }
}
double i=3;//всё хорошо
mporro
256 / 102 / 14
Регистрация: 04.07.2014
Сообщений: 571
13.07.2015, 09:35     Циклы while и for: в чем суть отличия? #13
rep plz, я бы сказал, что цикл for специальная компактная запись цикла c "явными итерациями", когда вариант цикла легко локализовать в одном простом выражении. Хорошо очень видно на приведённых примерах перевода for в while.
Отдельно нужно выписать инициализацию и приходится разрывать пару проверка условия -- изменение варианта (проверка вначале цикла, а где-то уже после основного тела выражение итерации). Для for всё записано компактно, рядом, нет необходимости "бегать" по коду и искать нужные выражения.


P.S. Лично у меня сложились исторически такие ассоциации: for -- цикл в пространстве, я его использую (если не использую for_each -- функцию), когда для действий порядок выполнения не имеет значения, while -- цикл во времени, когда алгоритм предполагает некоторые действия, выполняемые строго в определённом порядке. Но это никак не правило для циклов, а удобное мнемоническое разделение разных типов итераций.
rep plz
Заблокирован
20.07.2015, 10:24  [ТС]     Циклы while и for: в чем суть отличия? #14
Evg, учились по Дейтелу?
SmittWesson
 Аватар для SmittWesson
120 / 169 / 17
Регистрация: 04.06.2014
Сообщений: 1,273
20.07.2015, 10:33     Циклы while и for: в чем суть отличия? #15
Цитата Сообщение от rep plz Посмотреть сообщение
Пытаюсь понять в чем суть отличия между этими циклами. Пишутся по разному, а по сути тоже самое. Можно ли написать цикл while таким образом, чтобы нельзя было сделать аналогичный цикл с for? или наоборот
Отличие в том, что цикл for предопределён, априори. Окончание цикла while, зарание не известно. Оно может быть вычислено в ходе процесса, напримр, при заданной точности вычислений.
В принципе, циклом while, можно заменить for. Если наоборот, столкнётесь с трудностями определения диапазона.
Кликните здесь для просмотра всего текста
В качестве шутки.
Код
bool i;
while(i == true)
{
  i = false;
}
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
20.07.2015, 11:27     Циклы while и for: в чем суть отличия? #16
Цитата Сообщение от rep plz Посмотреть сообщение
Evg, учились по Дейтелу?
Нет
ture
 Аватар для ture
407 / 300 / 120
Регистрация: 27.11.2014
Сообщений: 1,004
20.07.2015, 11:33     Циклы while и for: в чем суть отличия? #17
rep plz, отличие проявляется в других языках. Преподы требуют руководствоваться правилом:
1) whlile - если хрен его знает сколько раз и чтоб без прерываний
2) for - если заранее известно сколько раз и чтоб без прерываний

с/с++/# весьма гибко стирают различия между ними и остается только одно требование - простота восприятия читаемого кода, которое основано на правилах выше.
rep plz
Заблокирован
21.07.2015, 18:48  [ТС]     Циклы while и for: в чем суть отличия? #18
ture, такой вывод напрашивается сам собой, из учебников. видимо я просто еще не дошел до тех масштабов, когда выгода одного из циклов очевидна

Добавлено через 3 минуты
Цитата Сообщение от Evg Посмотреть сообщение
{
* int i=0;
* while(i<10)
* {
* * cout<<i<<endl;
* * ++i;
* }
}
double i=3;//всё хорошо
не понял я что-то смысла в дополнительных фигурных скобок. что они меняют?
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
21.07.2015, 19:23     Циклы while и for: в чем суть отличия? #19
rep plz, цикл while подразумевает только предусловие завершения. Цикл for более гибок, он подразумевает инициализацию, предусловие завершения и действия в конце итерации, каждое из действий в котором разделяется символом ';'.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2015, 19:52     Циклы while и for: в чем суть отличия?
Еще ссылки по теме:

C++ В чем отличия cin.getline от gets?
Алгоритмы поиска. Подскажите, в чем суть алгоритма? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
21.07.2015, 19:52     Циклы while и for: в чем суть отличия? #20
Это был ответ на

Цитата Сообщение от Renji Посмотреть сообщение
Вот так нельзя
На самом деле можно, но надо делать правильно. В конце-концов убери скобки да и посмотри, что получится, это ведь вопрос одной минуты
Yandex
Объявления
21.07.2015, 19:52     Циклы while и for: в чем суть отличия?
Ответ Создать тему
Опции темы

Текущее время: 06:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru