• Miércoles 20 de Noviembre de 2024, 18:43

Autor Tema:  Regresar una matriz en una funcion  (Leído 13016 veces)

manguztap

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Regresar una matriz en una funcion
« en: Lunes 28 de Julio de 2008, 00:33 »
0
Hola Comunidad

Miren estoy haciendo un programa en donde inicialmente regresaba un vector (return vector), pues despues de tanto batallar pude regresarlo, solo declarando la funcion como puntero, pero me he dado cuenta que ocupo otro valor y he decidido implementar una matriz, pero no se como regresar una matriz (return matrix), en pocas palabras, me gustaria saber como se regresa un arreglo de la siguiente manera:

int LoQueSea( int numero_cualquiera)
{
int i;
int matrix[][1]={{0}};       // declaracion de variable
for(i=0; i<numero_cualquiera;i++){
        matrix[0]=i;
        matrix[1]=i;
}
return matrix
}



No le pongan atencion al programita, lo que quiero dar a entender es como regresaria la matriz una vez que se le han asignado valores, me ayudan?

De ante mano gracias

Elforious

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: Regresar una matriz en una funcion
« Respuesta #1 en: Lunes 28 de Julio de 2008, 01:20 »
0
Tienes 2 opciones, una declarando la función como un puntero a un puntero (int **LoaQueSea()), la otra sería mandando la matriz por referencia a tu función.

Espero haber ayudado.

manguztap

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: Regresar una matriz en una funcion
« Respuesta #2 en: Lunes 28 de Julio de 2008, 02:42 »
0
Gracias por contestar Elforious, pero no pude jajaja, seguramente hice algo mal, te dejo el mensaje de error que me salio, hice lo que me comentaste:

int **LoQueSea()

y nada, me sale el siguiente error:

error: cannot convert 'float (*)[1]' to 'float**' in return

me podrias asesorar mas, por fa?

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Regresar una matriz en una funcion
« Respuesta #3 en: Lunes 28 de Julio de 2008, 14:18 »
0
Deberías de pasar la matriz por referencia a la función para así poder actuar sobre ella y devolvertela. Tal y como lo has hecho

Cita de: "manguztap"
int LoQueSea( int numero_cualquiera)
{
int i;
int matrix[][1]={{0}}; // declaracion de variable
for(i=0; i<numero_cualquiera;i++){
matrix[0]=i;
matrix[1]=i;
}
return matrix
}

no te sirve porque matrix es local a la función y se libera su memoria en cuanto acaba la función. Deberías hacerlo así:

Código: Text
  1.  
  2. int LoQueSea(int numero_cualquiera, int matrix[][])
  3.  
  4.  

y ya llamas a la función tal que LoQueSea(numero,matriz). Ten en cuenta que en C los vectores (o arrays para los english-fashion) son simples punteros a bloques de memoria reservados.

Saludos.

manguztap

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: Regresar una matriz en una funcion
« Respuesta #4 en: Martes 29 de Julio de 2008, 05:24 »
0
Gracias m0skit0 por tu sugerencia, pero desgraciadamente ahi no radica mi problema, solo quiero regresar la matriz que se genera dentro de la funcion, no ocupo otro parametro de entrada.

lostshell

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Regresar una matriz en una funcion
« Respuesta #5 en: Martes 29 de Julio de 2008, 18:29 »
0
Cita de: "manguztap"
Gracias por contestar Elforious, pero no pude jajaja, seguramente hice algo mal, te dejo el mensaje de error que me salio, hice lo que me comentaste:

int **LoQueSea()

y nada, me sale el siguiente error:

error: cannot convert 'float (*)[1]' to 'float**' in return

me podrias asesorar mas, por fa?
Si vas a usar doble puntero, tienes que reservar la memoria dentro de la funcion, usando malloc (en c) o new (en c++), si lo declaras:
Código: Text
  1.  
  2. int matrix[][1]
  3.  
  4.  
la memoria sera liberada al finalizar la funcion, por lo cual tendras problemas utilizandola fuera de ella.

aqui un peque~o ejemplo (en c):
Código: Text
  1.  
  2. // crea una matrix de numerox2, seria el equivalente a int matrix[numero][2], pero de forma dinamica claro
  3. int **crearMatriz( int numero )
  4. {
  5.         int  i = 0;
  6.         int **matrix = (int**)malloc( numero*sizeof(int) );
  7.         for(i=0;i<numero;i++)
  8.                 matrix[i] = (int*)malloc( 2*sizeof(int) );
  9.         return matrix;
  10. }
  11.  
  12.  
  13.  

y despues de que termines de usar la variable, tienes que liberar la memoria con free (en c) o con delete (en c++)

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Regresar una matriz en una funcion
« Respuesta #6 en: Miércoles 30 de Julio de 2008, 09:27 »
0
Efectivamente lostshell.

Es posible que funcione si declara la matriz dentro de la función, pero no se garantiza que los datos se mantengan tal cual puesto que el SO considera dicha zona de memoria libre y puede machacar los datos sin previo aviso.

manguztap

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: Regresar una matriz en una funcion
« Respuesta #7 en: Jueves 31 de Julio de 2008, 07:02 »
0
Pues si muchachos he hecho todo lo que me han dicho y no he podido, ya me desespere, el problema que tengo ahora es que ciertas localidades de memoria de la matriz estan siendo ocupadas por otra variable o funcion de mi programa, cual, no se, aun no lo he logrado encontrar, tan pronto como lo haga les pondre la solucion.

Gracias!!!

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Regresar una matriz en una funcion
« Respuesta #8 en: Jueves 31 de Julio de 2008, 08:45 »
0
Cita de: "manguztap"
el problema que tengo ahora es que ciertas localidades de memoria de la matriz estan siendo ocupadas por otra variable o funcion de mi programa

Mira que eres cabezota. No te hemos dicho veces que tienes que pasar la matriz por parámetro a la función. Si sólo la declaras en la función, es local y se considerará su memoria libre en cuanto salgas de la función a menos que reserves su memoria con malloc() por ejemplo.

Es increíble que no quiera hacer caso  :bad:

Iganguli

  • Miembro activo
  • **
  • Mensajes: 51
  • Nacionalidad: mx
    • Ver Perfil
Re: Regresar una matriz en una funcion
« Respuesta #9 en: Jueves 31 de Julio de 2008, 17:44 »
0
si lo que quieres es declararla local ponle static asi al salir de la funcion te asegurara que siga ese espacio de memoria reservado

CrasH!!!

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Regresar una matriz en una funcion
« Respuesta #10 en: Domingo 24 de Agosto de 2008, 01:07 »
0
no se si hallas resuelto tu proble como to2 = algun dia tuvimos la misma duda
la solucion es simple
Código: Text
  1.  
  2. void func(int matrix[][10]){       //func tipo void no regresa nada ok,
  3. for(int i = 0; i..... etc){    //solo nos interesa cuantas columnas son
  4.              for(int j = 0;..............etc){
  5.                   printf("localidad%2i%2j = ",i,j);
  6.                   scanf("%d",&matriz[i][j]);       //no es necesario regresar nada puesto
  7.         }}}                                      //q pasast la matriz como parametro esta se guarda normal    
  8.                                              //y por otro choro q me da flojera.......
  9. void printMat(int matriz[][10]){
  10. ..................//inventate un metod para imprimir
  11. }
  12.  
  13. int main(){
  14. int matrix[10][10];
  15.  
  16. func(matrix);
  17. printMat(matrix);                 //se imprime la matriz con los datos q ingresast
  18.  
  19. return 0;
  20. }
  21.  
  22.  
  23.  

espero no sea muy tarde o a alguien mas le sirva

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Regresar una matriz en una funcion
« Respuesta #11 en: Domingo 24 de Agosto de 2008, 02:51 »
0
¡Qué hacéis respondiendo a posts de hace mil años!  :ph34r:  :ph34r:  :ph34r:  :ph34r: