Equivalence boucles For et While

Equivalence boucles For et While - Algo - Programmation

Marsh Posté le 27-08-2010 à 10:36:09    

Bonjour,
 
On me dit souvent que les boucles for et while sont équivalentes. Je vois comment simuler simplement une boucle for avec uniquement 1 while et sans instruction du type break...
... Mais comment simuler simplement une boucle while avec uniquement 1 for et sans instruction break?
J'ai beau chercher partout sur internet, on n'explique que la version simple du for simulé avec 1 while... mais jamais le contraire!
Merci beaucoup


---------------
Toute l'actualité joyeuse du Web sur http://joyeux-web.blogspot.com
Reply

Marsh Posté le 27-08-2010 à 10:36:09   

Reply

Marsh Posté le 27-08-2010 à 11:07:02    

ca va dépendre du langage, ce genre de choses.
En C, rien ne t'empêche de faire :
 

Code :
  1. int i = 1;
  2. for( ; i != 0 ; )
  3. {
  4.   // traitement qui va potentiellement mettre i à 0
  5. }


---------------
last.fm
Reply

Marsh Posté le 27-08-2010 à 11:53:05    

for (initialisation; condition; itération) {...}  <=> initialisation; while (condition) {...; itération}
Dans le cas d'un while (condition) {...} on a donc initialisation et itération vides. Si on reporte dans le for, ça donne:
for ( ; condition; ) {...}
 
Le cas limite ou l'équivalence de la première ligne n'est pas respecté, c'est l'écriture de la boucle infinie avec un for:
On peut faire for(;;) {...} mais un while doit avoir quelque chose a évaluer comme condition.
 
A+,

Message cité 1 fois
Message édité par gilou le 27-08-2010 à 11:59:48

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 27-08-2010 à 13:23:29    

gilou a écrit :

for (initialisation; condition; itération) {...}  <=> initialisation; while (condition) {...; itération}
Dans le cas d'un while (condition) {...} on a donc initialisation et itération vides. Si on reporte dans le for, ça donne:
for ( ; condition; ) {...}
 
Le cas limite ou l'équivalence de la première ligne n'est pas respecté, c'est l'écriture de la boucle infinie avec un for:
On peut faire for(;;) {...} mais un while doit avoir quelque chose a évaluer comme condition.
 
A+,


 
cependant, ton exemple s'appuie sur le C. Si tu prends la syntaxe du pascal, par exemple, je crois que tu vas te trouver face à un mur pour exprimer un while à partir d'un for. de manière purement algorithmique, les deux ne sont pas si éloignés, mais leur substituabilité (ca se dit, ca ?  :sweat: ) va dépendre purement du langage utilisé.


---------------
last.fm
Reply

Marsh Posté le 27-08-2010 à 14:41:26    

theshockwave a écrit :

cependant, ton exemple s'appuie sur le C.

Bien sur, puisque dans son post initial il a parlé de break, qui n'existe dans aucun dialecte du Pascal, il était clair que ses boucles for et while étaient celles avec une syntaxe de type C.
 
 
 

theshockwave a écrit :

Si tu prends la syntaxe du pascal, par exemple, je crois que tu vas te trouver face à un mur pour exprimer un while à partir d'un for. de manière purement algorithmique, les deux ne sont pas si éloignés, mais leur substituabilité (ca se dit, ca ?  :sweat: ) va dépendre purement du langage utilisé.

Certes, mais le for pascal est un truc foutrement primitif.
La boucle algorithmique, c'est loop {...} boucle infinie, plus une instruction spécifique fin-boucle utilisable dans le corps de la boucle. Et le for pascal n'est pas équivalent à cela.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed