No puedes llamar algoritmo a todo lo que té la gana. 'For' es un bloque estructural de programación, sólo podrás llamarlo algoritmo a la implementación del mismo (por ejemplo cuando estés creando un lenguaje) pero nunca al hecho de usarlo desde el lenguaje. todavía al final te pondré códigos que al menos si pueden llamarse algoritmo, por implmentar el bucle for.
Tu has hecho una cosa rara, el código es de visual basic, pero al momento me pareció que querías hacer un bucle de 'C' y al final ni una cosa ni la otra.
la estructura del bucle for tiene este patrón:
For W= X to Y step Z
' código
next
donde x,y,z son variables, valores, ó expresiones (incluído el resultado de una llamada a una función) y W es el nombre de una variable a la que si es necesario puede insitu indicarse el tipo de variable que es, por ejemplo:
x= 110
for W as byte = x to -102 step -(x/10)
' código
next
En este pedazo de código W inicialmente valdrá 110, los incrementos será de -11 y al final el código del bucle se ejecuta por última vez cuando W llegará a alcanzar el valor -99 (-102 nunca se llega a alcanzar).
W automáticamente adquiere el valor de X cuando se inicia el bucle, por tanto es x quien previamente puedes ponerle el valor deseado, nunca a w...
Si lo entiendes mejor de esta manera, en pseudocódigo, ahí queda:
Desde x ' w=x
Repetir hasta Y ' w <= y
' codigo
en pasos de z ' w= w + z
fin repetir
Aquí recreamos un bucle (esto si es un algoritmo) sin usar la estructura for, fíjate que es una implementación del pseudocódigo anterior
w=x
Repetir:
if w <= y then
' codigo
w=w + z
goto Repetir ' salto incondicional a la etiqueta Repetir
end if
Para reproducir fielmente los mismos valores que devuelve VB al final de un bucle, sea cual sea el caso, debería modificarse el código así:
w=x
if w <= y then
Repetir:
' codigo
w=w + z
if w <= y then goto Repetir ' vb siempre realiza una suma posterior a la última válida, siempre que al menos se ejecutara una vez el código.
end if
Para terminar, indicarte que el mejor sitio para tu pregunta-duda no es este subforo si no el de 'vb .net', pero bueno, para hacerlo válido aquí es que al final te he puesto estos 2 algoritmos y el pseudocódigo, con la excusa del bucle for...
Fíjate que usar un bucle for resulta más claro y limpio que el código del algoritmo (de cara al programador), y también correrá más rápido porque está diseñado a bajo nivel aunque estructuralmente haga exactamente lo mismo. No obstante el algoritmo tesirve cuando debas alterar ligeramente el comportamiento del bucle, por ejemplo la 1ª implementación nunca devolverá un valor de w mayor que y, VB siempre al final del bucle si se entró en él w valdrá el siguiente valor que habría de tomar el bucle.
También te aclaro que las implementaciones están 'resumidas', la idea era que lo comprendas y para eso lo mejor es que quede sencillo, en realidad las implmentaciones sólo funcionarán si 'X' es menor que 'Y'... el código para todos los casos sería...
' if z= 0 then bucleInfinito... salvo que se use exit for (exit sub, etc..) dentro del código, el programador es responsable de que en alguna ocasión se ejecute dicha salida...
w = x
If x < y Then ' controla si inicio es mayor que final
If (w + z) => x Then ' controla el paso
If w <= y Then ' controla si puede ejecutarse el bucle
RepetirA:
' codigo
w = w + z
If (w <= y) Then GoTo RepetirA ' controla si puede seguirse repitiendo el bucle
End If
End If
Else
If (w + z) <= x Then ' controla el paso
If w >= y Then
RepetirB:
' codigo
w = w + z
If (w >= y) Then GoTo RepetirB
End If
End If
End If
Aunque el código ahora queda mayor, en realidad VB cuando compila pone sólo el caso que se aplica (el condicional) e ignora el resto, por tanto la aparente repetición de código nunca se produce. Esto es pone uno de los códigos que indico a continuación:
' al compilar se pone este código o el siguiente
w = x
If x < y Then
If (w + z) > x Then
If w <= y Then
Repetir:
' codigo
w = w + z
If w <= y Then GoTo Repetir
end if
End If
End if
' al compilar se pone este código o el anterior
w = x
If x > y Then
If (w + z) < x Then
If w >= y Then
Repetir:
' codigo
w = w + z
If w >= y Then GoTo Repetir
End If
End If
End If
Ojo la implementación de Vb no controla si el paso es 0 que puede producir un bucle infinito, porque se supone que el programador con ello quiere crear un bucle incondicional y dentro del mismo usará cuando proceda un exit for (exit sub, etc..) dentro del código, el programador es responsable de que en alguna ocasión se ejecute dicha salida...
Un ejemplo de bucle incondicional con salida programada
For w = 1 To 2 Step 0
y = y + 1
If y > 2000000 Then w = 120 ' cuando se cumpla esta condición se sale, el bucle en ningún momento a ejecutado sólo 2 ciclos.... sino 20 millones
Next
Pese a la fama que se da a do..loop en detrimento del bucle for...next, estas particularidades hacen que un bucle for se comporte exactamente igual que un bucle do....loop, por lo que al menos a mi respecta un bucle for es el rey de los bucles, otra cosa son las limitaciones de los programadores que no exploran las capacidades del lenguaje.