Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: bryanrz96 en 2 Diciembre 2015, 21:10 PM

Título: Invertir un vector
Publicado por: bryanrz96 en 2 Diciembre 2015, 21:10 PM
Hola, quisiera si mi programa cumple con lo que me pide el prof.

Crear un programa que pide en input al cliente la dimension del vector de enteros, crea el vector y lo llena con numeros del 1 hasta la dimension ingresada. Una vez que tengo el vector este debe ser pasado a una funcion que invierte el orden.
y aqui mi codigo, no se si cumple con lo que dice y como estructura esta bien???
Gracias
Código (cpp) [Seleccionar]
int main()
{
  int dim;

  cout << "Inserisci la dimensione del vettore:" << endl;
  cin >> dim; // Supongamos que ingrese 10
  int vettore[dim]; // mi vector es de tamagno 10
  cout<<"Vettore Iniziale:"<<endl;

  for(int i=1; i<=dim; i++){
    vettore[i] = i * 1;

    cout << vettore[i] << endl;

  }
    cout<<"Vettore Invertito:"<<endl;
    for(int i=dim; i>0; i--){
    cout<<vettore[i]<<" ";
    cout<<endl;
        }
  }


Título: Re: Invertir un vector
Publicado por: Zodiak98 en 3 Diciembre 2015, 04:56 AM
Una cosa, cuando estás dándole los valores al arreglo, te estás comiendo la posición 0, y además que estás pasándote de su tamaño con el "<=", y multiplicar por 1 no tiene ningún sentido. Lo corregí por ti, sería de esta forma:
Código (cpp) [Seleccionar]

for(int i = 0; i < dim; i++){
       vettore[i] = i + 1;
}


Y para invertirlo, una manera fácil que puedes usar es a través de un arreglo auxiliar, recorrerás del vector original la última posición y se la asignarás a la primera posición de ese arreglo auxiliar, y así sucesivamente hasta llegar a la posición 0 del arreglo original, y la última del arreglo auxiliar. Y luego lo que haces es igualar el vector original a cada uno de los valores del vector auxiliar para que el original sea modificado.
Lo harías así:
Código (cpp) [Seleccionar]

void invertir(int vettore[], int tam) {
   int vAux[tam]; //Arreglo auxiliar.
   int aux = 0; //Contador auxiliar para desplazarnos por vAux.

   //Llenando el arreglo auxiliar con los valores invertidos.
   for(int i = tam - 1; i >= 0; --i, ++aux) {
       vAux[aux] = vettore[i];
   }

   //Asignándole al arreglo original los valores del arreglo invertido.
   for(int i = 0; i < tam; ++i) {
       vettore[i] = vAux[i];
   }
}


Y ya sólo muestras el arreglo invertido.