2009-10-03 2 views
6

Я знаю, что цикл while может делать все, что может для цикла, но может ли цикл for делать что-нибудь в цикле while?Пример цикла while, который не может быть для цикла

Просьба привести пример.

+2

Полностью зависит от языка программирования. Реальная петля не может. – jpfollenius

+1

Предполагая, что язык с неограниченными целыми числами и «реальный for-loop», как говорит Смашер, и поскольку все, кто цитировал C, неправильно понимали - хуже, я думаю, что они серьезны - рассмотрим вычисление первого простого числа, большего, чем заданное целое число n , Я знаю, как это сделать с помощью while-loops. Можете ли вы сделать это только для петель? –

+0

С помощью фразы «real for loop» вы строите тавтологию. «Реальный цикл» - это хронический цикл while и, следовательно, менее способен, но вы ничего не узнали из упражнения. – dmckee

ответ

16

Да, легко.

while (cond) S; 

for(;cond;) S; 
+2

Я также могу добавить, что это относится к C, C++, Java, C# и, вероятно, к множеству других языков, которые в значительной степени заимствуют C, но не применяются, например. Паскаль. – Steve314

+1

Что мне нравится в этом ответе, так это то, что он одновременно демонстрирует, что это можно сделать, и почему это бессмысленно. –

0

В C-подобных языках, вы можете объявить для петель, таких, как это:

for(; true;) 
{ 
    if(someCondition) 
     break; 
} 

В языках, где for более строгие, бесконечные циклы бы случай, требующий while петлю.

3

Петля while и классическая for петля взаимозаменяемы:

for (initializer; loop-test; counting-expression) { 
    … 
} 

initializer 
while (loop-test) { 
    … 
    counting-expression 
} 
1

Если фиксированному связан и шаг и не допускают изменения переменной цикла в теле передачи контура, а затем для петли соответствуют примитивным рекурсивных функций.

С теоретической точки зрения они слабее, чем общие, а петли, например, вы не можете вычислять функцию Аккермана только с такими циклами.

Если вы можете установить верхнюю границу условия в цикле while, чтобы стать истинным, вы можете преобразовать его в цикл for. Это показывает, что в практическом смысле нет никакой разницы, поскольку вы можете легко обеспечить астрономически высокую границу, например, дольше, чем жизнь Вселенной.

0

While loop не имеет такой гибкости, как for loop имеет и для циклов более читабельны, чем в цикле. Я бы продемонстрировал свою точку зрения примером. Для цикла может иметь форму как:

for(int i = 0, j = 0; i <= 10; i++, j++){ 
// Perform your operations here. 
} 

Некоторое время цикла не может быть использован как выше цикл, и сегодня большинство современных языков позволяют for each loop, а также.

На мой взгляд, я мог быть предвзятым, пожалуйста, простите за это, нельзя использовать while loop, если можно написать тот же код с for loop.