invertir un vector en C

Iniciado por windic, 23 Noviembre 2013, 19:34 PM

0 Miembros y 1 Visitante están viendo este tema.

windic

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

#include <stdio.h>
#include <stdlib.h>
main()
{
//Declaracion de variables
int i,c[]={1,2,3,4,5,6};
int j;
//Bucle de inversion
for (i=0;i<=5;i++)
c[i]=c[5-i];
//Impresion del invertido del vector
for (j=0;j<=5;j++)
printf("el vector invertido es %i",c[j]);
system("Pause > nul");
system("Exit");
}



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.

mad_soft

#1
Igual me equivoco pero porque no haces un recorrido inverso y ya está

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

    temp=c[i];
    c[i]=c[5-i];
    c[5-i]=temp;

SuSE 13.2 + Kernel 3.16

windic

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.

mad_soft

has visto que la segunda parte de la respuesta te digo como hacerlo sobreescribiendo el vector

SuSE 13.2 + Kernel 3.16

windic

si cierto xD. Muchas gracias por la solucion

Elias Flores

#5
Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <string>
#include <ctime>
using namespace std;
void cargar (int arreglo[],int num2,int n);
void mostrar (int arreglo[],int num2,int n);
void invertir (int arreglo[],int a,int b);
void mostrarinversa (int arreglo[],int num2,int n);
int main (){
int n;
  cout<<"ingrese la longitud del vector: ";cin>>n;
  int arreglo[n];
  cargar (arreglo,0,n);
  cout<<endl<<endl;
  mostrar (arreglo,0,n);
  cout<<endl<<endl;
  invertir (arreglo,0,n);
  cout<<endl<<endl;
  mostrarinversa (arreglo,n-n+1,n);
  getch();
  return 0;
}
void invertir(int arreglo[],int a ,int b){
  int n=b-a+1;
  int aux;
  if (n>1){
     invertir(arreglo,a+1,b-1);
     aux=arreglo[a];
     arreglo[a]=arreglo;
     arreglo=aux;}
}
void mostrarinversa (int arreglo[],int num2,int n){
  if (n>0){
     mostrarinversa(arreglo,num2+1,n-1);
     cout<<arreglo[num2]<<" ";}
}
void cargar (int arreglo[],int num2,int n){//en el siguiente metodo le pasado el vector y el indice que comienza en cero = num2
if (n>0){                           //num2 debe ir aumentando de 1 en 1
  srand(time(0));                     //el srand sirve para sincronizar el rand con el reloj del pc
  cargar(arreglo,num2+1,n-1);            //llamamos a la misma funcion cargar pero menos el ultimo dato n-1
  arreglo[num2]=1+rand()% 10;}
}
void mostrar (int arreglo[],int num2,int n){
  if (n>0){
     mostrar(arreglo,num2+1,n-1);
     cout<<arreglo[num2]<<" ";}
}




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

Beginner Web

#6
Hola para invertir un vector puedes usar la recursividad
Código (cpp) [Seleccionar]
void invertir(arreglo a, int n)
{
if(n>=0)
cout << a[n] << " ";
invertir(a,n-1);
}


O de la forma iterativa

void invertir(arreglo a)
{
for(int i=MAX-1;i>=0;i--)
cout << a[i] << " ";
cout << endl;
}
7w7

Beginner Web

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  ;-)
7w7