quiero que el ciclo “for” vaya de derecha a izquierda
Mala suerte, for
no entiende eso de derecha e izquierda. El sentido es algo que le proporcionas tu al usuario, ya que el for
únicamente es capaz de repetir un código un número determinado de veces.
Así que, siendo correctos, digamos que lo que pretendes es recorrer el array a la inversa. Bien, en C++ los índices empiezan en 0, luego si un array tiene, por ejemplo, 3 elementos, el último índice válido será 2 y no 3, luego tu for
ya empieza teniendo cosas raras:
for(i=3; i<3; i--)
// ^ Debería ser 2
Por otro lado, si recorres el array a la inversa, la condición del bucle debería ser que el valor de i
sea mayor o igual a 0, ya que la secuencia que pretendes reproducir es 2, 1, 0
... el condicional del bucle también está mal
for(i=2; i<3; i--)
// ^^^ Debería ser i>=0
Y con eso el bucle ya estaría arreglado... o no... vamos a echar un vistazo a las instrucciones que se ejecutan en el bucle:
var_aux = arreglo[i];
arreglo[i] = arreglo[i-1];
arreglo[i-1] = var_aux;
Con las condiciones que hemos puesto, i
se moverá en el rango de valores 2..0
, lo cual es correcto... pero i-1
se moverá en el rango 1..-1
y eso no pinta tan bien. No debemos dejar que ningún índice acceda a elementos que no pertenecen al array, así que podemos optar por reducir el rango de iteración:
for(i=2; i>0; i--)
Ahora, i
se moverá en 2..1
, mientras que i-1
lo hará en 1..0
. Ya no hay accesos fuera del array.