Perdido en la traducción

Microsoft dijo que dejará de desarrollar el lenguaje Visual Basic . Entonces, es hora de reescribir el código en Citylink .



Independientemente de esta decisión histórica, yo mismo necesitaba traducir un proyecto favorito de VBA a C #. Por lo general, hago un prototipo de todo en MS Access, y luego el código se mueve a una base de datos más seria (lea: SQL Server) y a otro lenguaje de programación.



Y aquí están los ciclos.

En Basic y Pascal hay un procedimiento de bucle

 

para i = paso inferior a superior Paso               ... siguiente Es universal en el sentido de que puede ir tanto de abajo hacia arriba como de arriba hacia abajo. Se puede utilizar tanto si Paso> 0 como si Paso <0. ¿Cómo se escribe lo mismo en notación C / C ++ / C # / JavaScript? Resulta que su bucle for no es en absoluto equivalente al básico: for (i = Lower; i <Upper + 1; i + = Step) {…} Cómo modificar esto para que funcione para el caso cuando Step <0 ? Me viene a la mente la siguiente solución, no la más elegante: para















 







(i = Inferior; Signo (Paso) * i <= Signo (Paso) * Superior; i + = Paso) {…}



Como el original para… siguiente, se repetirá en el Paso = 0.



Los colegas sugirieron otra opción:



for (i = Lower; Step> 0? I <= Upper: i> = Upper; i + = Step) {...}



De hecho, dado que necesitamos que el último valor de la variable de ciclo sea Superior, y también participó en el cuerpo del bucle, se puede programar como un bucle con una condición posterior:



i = Inferior - Paso;

do

i + = Paso;

...

mientras (i! = Upper)



pero este código no funcionará si Step no divide completamente el rango Inferior… Superior



Resulta que el ciclo que usa rango en Python tampoco permite pasar de un valor más grande a un valor más pequeño, rango (b, a) con b> a simplemente establece un rango vacío.



¿Qué solución sugerirías?



All Articles