Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: MartNahuel95 en 10 Junio 2016, 03:54 am



Título: Devolver un arreglo o vector desde una funcion.
Publicado por: MartNahuel95 en 10 Junio 2016, 03:54 am
Tengo creada una función que ordena un arreglo de forma ascendente.
Ahora necesito que esa función me regrese el arreglo ordenado para seguir usándolo en el main().

Código:
#include<stdio.h>

  int ordenar_vector(int V[],int a){
    int aux=0,i,j;
  for(i=0; i<a; i++){
for(j=0; j<a-1; j++){
if(V[j]>V[j+1]){
        aux=V[j];
V[j]=V[j+1];
V[j+1]=aux;
}
}
  }

  }


int main(){
int L=0;
printf("\nCuantos elementos desea que tengo el vector:");
scanf("%d",&L);
int V[L];
printf("\n\nIngrese los elementos del vector:\n");
for(int i=0;i<L;i++){
scanf("%d",&V[i]);
}


}

Esto no funciona simplemente poniéndole un return V al final de la función y guardar en el main() asi:
Código:
int vector_ordenado[L];
vector_ordenado=ordenar_vector(V[],L);


Título: Re: Devolver un arreglo o vector desde una funcion.
Publicado por: MartNahuel95 en 10 Junio 2016, 04:04 am
ouch, lo siento mucho, ya pude solucionarlo. No sé si algún moderador puede eliminar el tema o?.

En todo caso, dejo el código solucionado (a alguien le servirá):

Código:
#include<stdio.h>

int* ordenar_vector(int V[],int a){
  int aux=0,i,j;
  for(i=0; i<a; i++){
for(j=0; j<a-1; j++){
if(V[j]>V[j+1]){
       aux=V[j];
V[j]=V[j+1];
V[j+1]=aux;
}
}
}
return V;
  }


int main(){
int L=0;
printf("\nCuantos elementos desea que tengo el vector:");
scanf("%d",&L);
int V[L];
printf("\n\nIngrese los elementos del vector:\n");
for(int i=0;i<L;i++){
scanf("%d",&V[i]);
}

int *Z=ordenar_vector(V,L);
for(int i=0;i<L;i++){
printf("%d",Z[i]);
}

}

De igual manera, me gustaría entender ¿por qué tuve que poner el asterisco de puntero luego del int en mi función y declarar mi variable Z como puntero?


Título: Re: Devolver un arreglo o vector desde una funcion.
Publicado por: engel lex en 10 Junio 2016, 04:09 am
no es renecesario el return, recomiendo leer un poco mas sobre c... cuando pasas array a una funcion pasas la dirección de momeria (se pasa por referencia) así que lo que haga la funcion afecta al array pasado

ej en c++
Código
  1. #include<iostream>
  2. void cambiar(int V[], int e){
  3. int i;
  4. for (i=0;i<e;i++)
  5. V[i]*=7;
  6. }
  7.  
  8.  
  9. int main(){
  10.  int V[10];
  11.  int i;
  12.  for (i=0;i<10;i++)
  13.   V[i]=i;
  14.  
  15.  for (i=0;i<10;i++)
  16.   std::cout << V[i] << std::endl;
  17.  
  18.  cambiar(V,10);  
  19.  for (i=0;i<10;i++)
  20.   std::cout << V[i] << std::endl;
  21.  
  22.  
  23. }



y no, no se tiene que eliminar el tema... el foro no es un sistema de atención al cliente... es un registro de conocimientos para que cualquiera con dudas similares consiga en internet y pueda ver información al respecto