Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: lachusta en 15 Septiembre 2011, 01:42 am



Título: Ayuda con tablas bidimensionales!
Publicado por: lachusta en 15 Septiembre 2011, 01:42 am
Hola, mi duda surge mientras hacia un examen de programación. El caso es que el ejercicio pedía calcular el determinante de una matriz cuadrada de orden DIM (tabla bidimensional declarada como: int matriz [DIM][DIM] ). DIM es una constante simbólica.
La matriz se pasaba a una función determinante ejemplo : printf("Determinante de matriz: %d\n", determinante(matriz))

En la declaración de la funcion determinante que sería lo correcto;
¿int determinante (int matriz[ ][DIM] ); o
int determinante (int * matriz); sabiendo que una tabla bidimensional se almacena en memoria por filas y usando notación de punteros con 2 indices? ¿Por qué?

Graciass! espero respuesta  :)


Título: Re: Ayuda con tablas bidimensionales!
Publicado por: LearningSpanishProgrammer en 15 Septiembre 2011, 02:14 am
Se quieres usar una matriz en el 'stack' y usar el metodo para diferentes tamaños, entonces tiene que hacer asi:

Código:
void function(int * m, int lineas, size_t columnas)
{
  int i = 0;
  int j = 1;
  m[i*columnas + j] = 5;
}

int main()
{
  int a1[10][20];
  int a2[40][30];

  function(&a1[0][0], 10, 20);
  function(&a2[0][0], 40, 30);
}

en el caso de que se puede usar la asignación dinámica, enton puede leer esto: http://foro.elhacker.net/programacion_cc/duda_con_arreglo_bidimensional_dinamico_en_ide_devc-t337905.0.html;msg1658904#msg1658904

Finalmente, se el tamaño de el matriz es constante em tiempo de compilación, entonces se puede:

Código:
void function(int m[][DIM])
o
Código:
void function(int m[DIM][DIM])


Título: Re: Ayuda con tablas bidimensionales!
Publicado por: rir3760 en 15 Septiembre 2011, 14:52 pm
Cuando se declara una funcion en la forma:
Código
  1. int fn(char a[]) ...
  2.  
  3. /* O tambien */
  4. int fn(char a[N]) ...

En realidad se procesa como:
Código
  1. int fn(char *a) ...

Es por ello que indicar el numero de elementos en el array (el parametro "a") no es necesario.

Un saludo