Can any WHILE Loop be replaced with a FOR loop?

41 visualizzazioni (ultimi 30 giorni)
Dylan
Dylan il 1 Nov 2011
I had a test in my computer science course in which I was asked if any while loop can be replaced with a for loop. I put true. I guess the answer was false. My professor said that if you had a while loop in which you asked the user to input a certain value that had to be within a certain range and kept on iterating over the loop until the user inputted a value within the range that you wouldn't be able to do this with a for loop.
I however thought that any for loop can be written with a while loop and any while loop can be rewritten with a for loop. I think I may have even read something about this in my textbook but am unable to come up away with doing what my professor said with a for loop but believe that it's possible. Can anyone please come up with a way to do such a thing with a for loop?
for example a while loop
A=0;
while A<1
x=input('Enter a value');
if x>4 && x<10
A=1
else
end
this would force the user to enter a number between 4 and 10, not including 4 and 10, and would just keep on iterating over the loop until the user does.
  1 Commento
Dylan
Dylan il 1 Nov 2011
I even found this in my book and believe this is why I thought it was possible
"Any problem that can be solved using a while loop could also be solved using a for loop"

Accedi per commentare.

Risposte (3)

Walter Roberson
Walter Roberson il 1 Nov 2011
There are definitely while loops that cannot be done in any "for" loop with a fixed finite number of iterations. See for example http://en.wikipedia.org/wiki/Collatz_conjecture where the termination condition (N becoming 1) has not been proven to always occur.
If every loop could be executed within a fixed maximum number of steps, then the theoretically very important http://en.wikipedia.org/wiki/Halting_problem would have a positive solution, but it has been proven by way of contradiction that that cannot exist.

Fangjun Jiang
Fangjun Jiang il 1 Nov 2011
In a twisted way:
for k=1:inf
x=input('Enter a value');
if x>4 && x<10
break;
end
end

Alex
Alex il 1 Nov 2011
Another option, so your computer does eventually crash (as k gets to large).
for k = 1:2
if(stuff)
break;
else
k = k - 1;
end
end
Keep in mind, it is not good programming to modify the loop variable within the loop, but it does work
  1 Commento
Walter Roberson
Walter Roberson il 1 Nov 2011
In MATLAB, modifying the loop variable within a loop only affects the loop variable until the next iteration; upon starting the next iteration, the loop variable will be assigned whatever value it would normally have been as if you had not had any modification statements.

Accedi per commentare.

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by