Yo soy más de Java/Kotlin y C/C++
En otros lenguajes me pierdo un poco, pero veo un par de cosas a mencionar:
MiArray(10) = MiArray(i)
Eso te dará error por que no hay ningún elemento con posicion 10.
Si el array tiene 10 elementos, estarán numerados del 0 al 9. Si intentas apuntar a la posición 10, será cuando te da error avisando de que te has salido "fuera".
Por otro lado, mueves los elementos sin guardar previamente el último valor (el de la posición 9). Este valor hay que guardarlo en otra variable, entonces mueves los elementos y terminado el proceso, el valor guardado se adjudica a la posición 0.
EL array es mejor recorrerlo a la inversa. Si empiezas desde el principio, seguramente solo conseguirás repetir el mismo número en todo el array.
Supón este array:
[10,20,30,40]
Eso son 4 elementos, numerados del 0 al 3.
El valor de la posición 0, hay que pasarlo a posición 1.
El valor de la posición 1, hay que pasarlo al posición 2.
-etc...
¿Qué pasa si empezamos desde el principio?
La i del bucle vale 0.
Así que cogemos el valor de la posición i (0) y lo pasamos a posición i+1 (1).
El array queda así:
[10,10,30,40]
Ya podemos darnos cuenta de que hemos perdido el valor 20
Pero sigamos, el bucle comienza el siguiente paso y ahora i vale 1
Así que cogemos el valor de la posición i (1) y lo pasamos a posición i+1 (2).
El array queda así:
[10,10,10,40]
No hace falta seguir, ahora hemos perdido el 30 y es evidente que también perderemos el 40.
Hay que recorrer al revés.
Bueno, lo primero como dije antes, es guardar el ultimo valor antes de que el bucle mueva nada.
Si volvemos al array de ejemplo:
[10,20,30,40]
Pues primero guardamos el 40, que está en posición 3.
variableAux = miArray(3)
OK, guardado. Ahora comienzca el bucle, pero ha de ir hacia atrás y comenzará en la posicion penúltima.
Al comenzar la i ha de tener la posicion valor 2.
Así que cogemos el valor de la posición i (2) y lo pasamos a posición i+1 (3).
El array queda así:
[10,20,30,30]
Hemos machacado el 40, pero no importa, ya que lo hemos guardado en una variable.
Sigamos el bucle va hacia atrás y la i vale 1.
Así que cogemos el valor de la posición i (1) y lo pasamos a posición i+1 (2).
El array queda así:
[10,20,20,30]
El bucle llega al último paso, la i vale 0.
Así que cogemos el valor de la posición i (0) y lo pasamos a posición i+1 (1).
El array queda así:
[10,10,20,30]
Vale, el bucle ha terminado. Ya solo queda coger el valor que habiamos guardado, el 409 y colocarlo al principio, en la posición 0.
El array queda así:
[40,10,20,30]
LISTO. Se han movido los valores como se pide, no se ha perdido ningún dato, el bucle for no va a intentar acceder a posiciones del array que no existen...
No necesitas ningún IF dentro del bucle.
Tan solo tienes que:
- Guardar último valor en otra variable.
- Hacer que la variable i del FOR vaya desde el penúltimo (no el último) hasta posición 0.
- En cada iteración del bucle, mover lo que está en posición i a la posición i+1
- Terminado el bucle, el valor que habíamos guardado lo colocamos en posicion 0.
Y ya está. La clave es saber establecer la condición ideal del bucle FOR