Test Foro de elhacker.net SMF 2.1

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().

#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:
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á):

#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 (cpp) [Seleccionar]
#include<iostream>
void cambiar(int V[], int e){
int i;
for (i=0;i<e;i++)
V[i]*=7;
}


int main(){
 int V[10];
 int i;
 for (i=0;i<10;i++)
  V[i]=i;

 for (i=0;i<10;i++)
  std::cout << V[i] << std::endl;

 cambiar(V,10);  
 for (i=0;i<10;i++)
  std::cout << V[i] << std::endl;


}





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