Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: windic en 23 Noviembre 2013, 19:34 pm



Título: invertir un vector en C
Publicado por: windic en 23 Noviembre 2013, 19:34 pm
Hola buenas a todos. Estaba haciendo un programa en el que ya viene dado un vector y tienes que imprimir el inverso sin utilizar un vector auxiliar. La forma que se me ocurrio fue esta

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. main()
  4. {
  5. //Declaracion de variables
  6. int i,c[]={1,2,3,4,5,6};
  7. int j;
  8. //Bucle de inversion
  9. for (i=0;i<=5;i++)
  10. c[i]=c[5-i];
  11. //Impresion del invertido del vector
  12. for (j=0;j<=5;j++)
  13. printf("el vector invertido es %i",c[j]);
  14. system("Pause > nul");
  15. system("Exit");
  16. }


El problema es que para los valores c[3]hasta c[5] ya se han invertido por lo que vuelve a invertir los mismos tres valores. Si alguien encuentra una solucion se agradeceria mucho.


Título: Re: invertir un vector en C
Publicado por: mad_soft en 23 Noviembre 2013, 20:05 pm
Igual me equivoco pero porque no haces un recorrido inverso y ya está
Código:
for (j=5;j>=0;j--)
{
   printf("el vector invertido es %i",c[j]);
}
Si de lo que se trata es de que c se quede invertido, entonces como lo haces, pero para en la mitad del vector
Eso si que acabo de fijarme, cuando intercambias en el bucle de inversión, guarda la posición de 0 en 5 que solo haces la de 5 a 0
Código:
    temp=c[i];
    c[i]=c[5-i];
    c[5-i]=temp;


Título: Re: invertir un vector en C
Publicado por: windic en 23 Noviembre 2013, 20:44 pm
mad_soft es cierto que el recorrido inverso seria la solucion a imprimir por pantalla el vector inverso, pero lo que necesito no es imprimir el inverso en pantalla sino sobrescribir encima del vector c su inverso sin utilizar otro vector para hacerlo, aunque gracias por la idea.


Título: Re: invertir un vector en C
Publicado por: mad_soft en 24 Noviembre 2013, 00:22 am
has visto que la segunda parte de la respuesta te digo como hacerlo sobreescribiendo el vector


Título: Re: invertir un vector en C
Publicado por: windic en 24 Noviembre 2013, 12:47 pm
si cierto xD. Muchas gracias por la solucion


Título: Re: invertir un vector en C
Publicado por: Elias Flores en 12 Septiembre 2018, 23:33 pm
Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <conio.h>
  4. #include <string>
  5. #include <ctime>
  6. using namespace std;
  7. void cargar (int arreglo[],int num2,int n);
  8. void mostrar (int arreglo[],int num2,int n);
  9. void invertir (int arreglo[],int a,int b);
  10. void mostrarinversa (int arreglo[],int num2,int n);
  11. int main (){
  12. int n;
  13.   cout<<"ingrese la longitud del vector: ";cin>>n;
  14.   int arreglo[n];
  15.   cargar (arreglo,0,n);
  16.   cout<<endl<<endl;
  17.   mostrar (arreglo,0,n);
  18.   cout<<endl<<endl;
  19.   invertir (arreglo,0,n);
  20.   cout<<endl<<endl;
  21.   mostrarinversa (arreglo,n-n+1,n);
  22.   getch();
  23.   return 0;
  24. }
  25. void invertir(int arreglo[],int a ,int b){
  26.   int n=b-a+1;
  27.   int aux;
  28.   if (n>1){
  29.      invertir(arreglo,a+1,b-1);
  30.      aux=arreglo[a];
  31.      arreglo[a]=arreglo;
  32.      arreglo=aux;}
  33. }
  34. void mostrarinversa (int arreglo[],int num2,int n){
  35.   if (n>0){
  36.      mostrarinversa(arreglo,num2+1,n-1);
  37.      cout<<arreglo[num2]<<" ";}
  38. }
  39. void cargar (int arreglo[],int num2,int n){//en el siguiente metodo le pasado el vector y el indice que comienza en cero = num2
  40. if (n>0){                           //num2 debe ir aumentando de 1 en 1
  41.   srand(time(0));                     //el srand sirve para sincronizar el rand con el reloj del pc
  42.   cargar(arreglo,num2+1,n-1);            //llamamos a la misma funcion cargar pero menos el ultimo dato n-1
  43.   arreglo[num2]=1+rand()% 10;}
  44. }
  45. void mostrar (int arreglo[],int num2,int n){
  46.   if (n>0){
  47.      mostrar(arreglo,num2+1,n-1);
  48.      cout<<arreglo[num2]<<" ";}
  49. }


Mod: Obligatorio el uso de etiquetas GeSHi para códigos.


Título: Re: invertir un vector en C
Publicado por: Beginner Web en 15 Septiembre 2018, 00:40 am
Hola para invertir un vector puedes usar la recursividad
Código
  1. void invertir(arreglo a, int n)
  2. {
  3. if(n>=0)
  4. cout << a[n] << " ";
  5. invertir(a,n-1);
  6. }

O de la forma iterativa

Código
  1. void invertir(arreglo a)
  2. {
  3. for(int i=MAX-1;i>=0;i--)
  4. cout << a[i] << " ";
  5. cout << endl;
  6. }


Título: Re: invertir un vector en C
Publicado por: Beginner Web en 16 Septiembre 2018, 04:46 am
Ahora que me doy cuenta la mejor forma de invertir un vector sin usar otro auxiliar es hacer un bubblesort que traiga el ultimo elemento a la primera posicion del arreglo y ya  ;-)