Indépendamment de cette décision historique, j'avais moi-même besoin de traduire un projet familier de VBA vers C #. J'ai l'habitude de tout prototyper dans MS Access, puis le code passe à une base de données plus sérieuse (lire: SQL Server) et à un autre langage de programmation.
Et voici les cycles.
Là - dedans de base et Pascal est une procédure en boucle
pour i = inférieur à la Haute étape étape
...
suivante
Il est universel dans le sens où il peut aller à la fois de bas en haut et de haut en bas. Il peut être utilisé à la fois si Step> 0 et si Step <0.
Comment écrivez-vous la même chose en notation C / C ++ / C # / JavaScript? Il s'avère que leur boucle for n'est pas du tout équivalente à celle de base:
for (i = Lower; i <Upper + 1; i + = Step) {…}
Comment modifier cela pour fonctionner dans le cas où Step <0 ? La solution suivante, qui n'est pas la plus élégante, me vient à l'esprit:
pour(i = Lower; Sign (Step) * i <= Sign (Step) * Upper; i + = Step) {…}
Cela, comme l'original pour… next, fera une boucle à Step = 0.
Des collègues ont suggéré une autre option:
for (i = Lower; Step> 0? I <= Upper: i> = Upper; i + = Step) {...}
En fait, puisque nous avons besoin que la dernière valeur de la variable de boucle soit Upper, et il a également participé au corps de la boucle, il peut être programmé comme une boucle avec une post-condition:
i = Lower - Step;
do
i + = Step;
...
tandis que (i! = Supérieur)
mais ce code ne fonctionnera pas si Step ne divise pas complètement la plage Lower ... Upper
Il s'avère que la boucle utilisant range en Python ne permet pas non plus de passer d'une valeur plus grande à une valeur plus petite, range (b, a) avec b> a définit simplement une plage vide.
Quelle solution proposeriez-vous?