PDA

Ver la versión completa : Ayuda con BUCLE FOR en visual.net :S



TRaFuGa
08/11/2007, 12:56
Pues nada, estoy haciendo un trabajo de clase que consiste en un robot (todo en consola), el robot anda y consume bateria (hace otras cosas, pero esto es lo que me esta comiendo la cabeza xD).
El robot anda a 0.1 m por paso, vamos que tengo un bucle for desde o hasta los metros que le diga con un step de 0.1, para que cada metro de 10 pasos.
Cada paso que da consume 2% de bateria, osea, que 10 pasos=1metro=20% de bateria gastada.
Hasta aqui bien, el problema viene cuando voy a probar el dichoso programa, le doy a andar 1 metro y me hace 11 pasos, por lo que es mas de un metro, si empiezo desde 0.1 no hay problema.
La cuestion es que empezando desde 0.1, si le pongo que ande 2 metros me hace solamente 19 pasos!!!! xDD
Os pongo el codigo del bucle que tengo para cuando ande.


Case Coordenadas.Norte 'si es NORTE a la Y le sumamos los metros
Me.sMirandoA = Coordenadas.Norte
For pasos = 0.1 To metros Step 0.1
'sumando pasos
Me.oPosicion.Y += 0.1
If Me.oPosicion.Y >= 5 Then
Me.oPosicion.Y = 5
RaiseEvent Chocar(Me.oPosicion)
Exit For
Else
Console.Write(".") 'dibujando los pasos
End If
'restando bateria a razon de 2% por cada paso
'10 pasos hacen 1m y un 20% de desgaste, 5 metros son 50 pasos y un 100% de desgaste de bateria
If Me.dbNivelBateria <= 10 Then
'lanzamos el evento de bateria baja
RaiseEvent BateriaBaja(Me.dbNivelBateria)
Exit For
Else
Me.dbNivelBateria -= 2
End If
Next

Pues eso, la unica duda que me corroe es, porque con 1 metro, empezando desde 0.1 me da 10 pasos y con 2 metros empezando desde 0.1 me da 19 pasos???
o lo que es lo mismo, 1 metro, empezando desde 0 son 11 pasos y 2 metros 20 pasos.

Vicman
08/11/2007, 13:26
No se... Lo que no me queda claro es porqu&#233; das por hecho que te de 11 pasos empezando de 0 metros...

Por decirte algo, en esta l&#237;nea:
---->For pasos = 0.1 To metros Step 0.1
Supongo que la variable pasos y metros estar&#225;n definidas igual... No habr&#225;s definido pasos con decimales y metros como entero... Que estas cosas parecen tonter&#237;as pero a veces dan por ah&#237;...

TRaFuGa
08/11/2007, 13:34
son los dos como double, y doy por sentado que da 11 pasos, porque pinta un puntito en cada iteracion del bucle jejeje.
El caso es que es muy raro, con un metro da 10 pasos, con 2 metros, deberia de dar 20 pero da 19... xDD

neostalker
08/11/2007, 14:51
Yo lo que no entiendo es por qué empiezas el for en 0.1 en vez de en 0.

TRaFuGa
08/11/2007, 15:11
Si empiezo en 0, cuando pongo que ande un metro, recorre 1.1 metro, si pongo que recorra 2 metros recorre los 2 metros.
Si empiezo en 0.1 cuando pongo que ande un metro, recorre 1 metro, si pongo que recorra 2 metros, recorre 1.9 metros.
Eso es lo que me pasa xD

Vicman
08/11/2007, 15:42
Si empiezo en 0, cuando pongo que ande un metro, recorre 1.1 metro, si pongo que recorra 2 metros recorre los 2 metros.
Si empiezo en 0.1 cuando pongo que ande un metro, recorre 1 metro, si pongo que recorra 2 metros, recorre 1.9 metros.
Eso es lo que me pasa xD

Perdona en que insista, pero mi no comprender... Si está en 0.1 metros y le dices que ande 1 metro más, deberá acabar en 1.1 metros...

Malenko
08/11/2007, 15:52
Yo haría esto, aunque sea solo para dejarlo más claro mentalmente:



For pasos = 1 To (10*metros) Step 1
'sumando pasos
Me.oPosicion.Y += 0.1


Y si quieres encontrar el fallo, yo pondría un punto de interrupción y lo ejecutaría con 1 metro y con 2. Te será más fácil ver el fallo.

swapd0
08/11/2007, 23:16
No estoy seguro pero, ¿no sera por esto?

for i=0 to 10 // el codigo se ejecuta hasta que i=10 -> 11 veces
Creo que se puede poner los bucles como en C/C++ y yo lo veo mas claro asi:

for ( i=0; i<10; ++i) // desde i=0 y mientras i<10 -> 10 veces

Malenko
09/11/2007, 10:14
Eso ya lo hace bien, por eso hace el bucle de 1 a 10. Es decir, tiene tu primer bucle pero con el valor inicial de 0.

De todas formas estoy contigo. Yo prefiero programar en C# cuando uso .NET por este tipo de cosillas.