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.
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;
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.
has visto que la segunda parte de la respuesta te digo como hacerlo sobreescribiendo el vector
si cierto xD. Muchas gracias por la solucion
#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.
Hola para invertir un vector puedes usar la recursividad
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;
}
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 ;-)