Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Recibir matriz desconocida en una funcion

Estas en el tema de Recibir matriz desconocida en una funcion en el foro de C/C++ en Foros del Web. Buenas a todos. Mi problema es el siguiente: tengo un programa que recibe un int n y crea una matriz de ciertas características, de tamaño ...
  #1 (permalink)  
Antiguo 14/05/2013, 14:24
 
Fecha de Ingreso: noviembre-2008
Mensajes: 12
Antigüedad: 15 años, 5 meses
Puntos: 0
Pregunta Recibir matriz desconocida en una funcion

Buenas a todos.

Mi problema es el siguiente: tengo un programa que recibe un int n y crea una matriz de ciertas características, de tamaño nxn. Y quiero que mi funcion tenga la siguiente aridad:
Código C++:
Ver original
  1. void mSombrero (double *res[][], int *g[], double *s[], int n);

donde mSombrero modifica la matriz res utilizando g y s.
Ahora bien, como ya dije n es un parámetro, y C++ me obliga a darle una constante al tamaño de la segunda dimension. Como salteo este problema?

Otra cosa. Si bien se que podria recibir directamente *res, yo busco utilizarlo como un puntero a matiz, esto significa que quiero poder hacer
Código C++:
Ver original
  1. *res[i][j] = s[i] + g[j]
y CREO que si recibo un puntero (ej: void mSombrero(double *res, int*g, double*s)) no puedo hacerlo tan prolijo.

Última cosa: tambien quisiera sabe si es mas facil hacer que la función CREE la matrz y DEVUELVA un puntero a la matriz.



Desde ya, muchas gracias :)
  #2 (permalink)  
Antiguo 14/05/2013, 14:42
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Recibir matriz desconocida en una funcion

No puedes hacer pasarle el puntero así nada mas. Por que después el compilador no va a saber cuanto tiene que incrementar el valor del puntero para pasar a la siguiente fila.

Aqui hay una larga discusión al respecto http://stackoverflow.com/questions/1...nt-to-function

Pero hay varias formas de hacerlo lo mas correcto posible.

Ya sea usando clases, structs o alocando memoria de manera dinámica.
  #3 (permalink)  
Antiguo 14/05/2013, 15:14
 
Fecha de Ingreso: noviembre-2008
Mensajes: 12
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Recibir matriz desconocida en una funcion

La matriz esta alocada de forma dinamica, porque como ya dije me pasan el tamaño y recien ahí la creo. Asi q malloc sabe cual es su tamaño.
Igual, sigo necesitando esa forma de hacerlo correctamente :D
  #4 (permalink)  
Antiguo 14/05/2013, 15:51
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Recibir matriz desconocida en una funcion

Leiste el link que te pase?

Hay viene un ejemplo de como hacerlo. Por ejemplo si lo que haces es mas o menos esto para alocar tu matriz:

Código C++:
Ver original
  1. const int row = 5;
  2. const int col = 10;
  3. int **bar = (int**)malloc(row * sizeof(int*));
  4. for (size_t i = 0; i < row; ++i)
  5. {
  6.     bar[i] = (int*)malloc(col * sizeof(int));
  7. }

Puedes pasarlo tranquilamente como un puntero a puntero.
Código C++:
Ver original
  1. void foo(int **baz)

Te dejo un ejemplo:
Código C++:
Ver original
  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. int **create_matrix(int rows, int cols);
  5. void destroy_matrix(int **matrix, int rows);
  6. void fill_matrix(int **matrix, int rows, int cols);
  7. void print_matrix(int **matrix, int rows, int cols);
  8.  
  9.  
  10. int main () {
  11.     int **m = create_matrix(3, 3);
  12.     fill_matrix(m, 3, 3);
  13.     print_matrix(m, 3, 3);
  14.     destroy_matrix(m, 3);
  15.  
  16.   return 0;
  17. }
  18.  
  19. int **create_matrix(int rows, int cols) {
  20.     int **bar = (int**)malloc(rows * sizeof(int*));
  21.     for (size_t i = 0; i < rows; ++i)
  22.     {
  23.         bar[i] = (int*)malloc(cols * sizeof(int));
  24.     }
  25.     return bar;
  26. }
  27.  
  28. void destroy_matrix(int **matrix, int rows) {
  29.     for (size_t i = 0; i < rows; i++) {
  30.         free(matrix[i]);
  31.     }
  32.     free(matrix);
  33. }
  34.  
  35. void fill_matrix(int **matrix, int rows, int cols) {
  36.     for(int i = 0; i < rows; i++) {
  37.         for(int j = 0; j < cols; j++) {
  38.             matrix[i][j] = (i * rows) + j;
  39.         }
  40.     }
  41. }
  42.  
  43. void print_matrix(int **matrix, int rows, int cols) {
  44.     for(int i = 0; i < rows; i++) {
  45.         for(int j = 0; j < cols; j++) {
  46.             std::cout << matrix[i][j] << " ";
  47.         }
  48.         std::cout << std::endl;
  49.     }
  50. }
  #5 (permalink)  
Antiguo 14/05/2013, 18:18
 
Fecha de Ingreso: noviembre-2008
Mensajes: 12
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Recibir matriz desconocida en una funcion

Gracias!

Cita:
Código C++:
Ver original
  1. void fill_matrix(int **matrix, int rows, int cols) {
  2.     for(int i = 0; i < rows; i++) {
  3.         for(int j = 0; j < cols; j++) {
  4.             matrix[i][j] = (i * rows) + j;
  5.         }
  6.     }
  7. }
Esto es lo que no sabia que se podia hacer :D

Etiquetas: funcion, int, matriz, programa, recibir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:04.