Título: [urgente por favor] problema compilación ejercicio funciones con matrices
Publicado por: carlasv12 en 29 Mayo 2017, 01:28 am
Hola a todos, les cuento que tengo un problema al momento de llamar mi función dentro del main, no me compila, al parecer hay un error con el puntero y la matriz o algo así. Si pudieran ayudarme rápido estaría muy agradecida, es urgente. :-( AQUÍ VA MI CÓDIGO: #include <stdio.h> #include <limits.h> int determinante(int** m1, int n){ int det1, det2, det3; if(n==2){ det1=(m1[0][0]*m1[1][1])-(m1[0][1]*m1[1][0]); return(det1); } if(n==3){ det2=((m1[0][0]*m1[1][1]*m1[2][2])+(m1[0][1]*m1[1][2]*m1[2][0])+(m1[0][2]*m1[1][0]*m1[2][1]))-((m1[0][2]*m1[1][1]*m1[2][0])+(m1[0][0]*m1[1][2]*m1[2][1])+(m1[0][1]*m1[1][0]*m1[2][2])); return(det2); } if(n==4){ int detA, detB, detC, detD; detA=m1[0][0]*(m1[1][1]*m1[2][2]*m1[3][3]+m1[1][2]*m1[2][3]*m1[3][1]+m1[2][1]*m1[3][2]*m1[1][3]-m1[1][3]*m1[2][2]*m1[3][1]-m1[1][1]*m1[2][3]*m1[3][2]-m1[1][2]*m1[2][1]*m1[3][3]); detB=m1[0][1]*(m1[1][0]*m1[2][2]*m1[3][3]+m1[2][0]*m1[3][2]*m1[1][3]+m1[1][2]*m1[2][3]*m1[3][0]-m1[3][0]*m1[2][2]*m1[1][3]-m1[2][0]*m1[1][2]*m1[3][3]-m1[2][3]*m1[1][0]*m1[3][2]); detC=m1[0][2]*(m1[1][0]*m1[2][1]*m1[3][3]+m1[1][1]*m1[2][3]*m1[3][0]+m1[2][0]*m1[3][1]*m1[1][3]-m1[1][3]*m1[2][1]*m1[3][0]-m1[3][1]*m1[2][3]*m1[1][0]-m1[2][0]*m1[1][1]*m1[3][3]); detD=m1[0][3]*(m1[1][0]*m1[2][1]*m1[3][2]+m1[1][1]*m1[2][2]*m1[3][0]+m1[2][0]*m1[3][1]*m1[1][2]-m1[1][2]*m1[2][1]*m1[3][0]-m1[2][0]*m1[1][1]*m1[3][2]-m1[1][0]*m1[3][1]*m1[2][2]); det3=detA-detB+detC-detD; return(det3); } if(n!=2 && n!=3 && n!=4){ return(INT_MIN); } } int main(){ int n; int m1[n][n]; for(int i=0; i<n; i++){ for(int j=0; j<n; j++){ } } determinante(m1, n); return 0; }
Y AQUÍ EL PROBLEMA QUE ME DA AL COMPILAR: 4.c: In function ‘main’: 4.c:43:15: warning: passing argument 1 of ‘determinante’ from incompatible pointer type [-Wincompatible-pointer-types] determinante(m1, n); ^ 4.c:4:5: note: expected ‘int **’ but argument is of type ‘int (*)[(sizetype)(n)]’ int determinante(int** m1, int n){ ^
· Los códigos deben ir en etiquetas GeSHi · Evita escribir en mayúsculas >aquí las reglas del foro (http://foro.elhacker.net/reglas.htm) -Engel Lex
Título: Re: [URGENTE POR FAVOR] Problema compilación ejercicio funciones con matrices
Publicado por: MAFUS en 29 Mayo 2017, 02:10 am
Hay bastantes cosas mal en tu código. Un array del tipo local, eso es array[dimension], no puede crearse a partir de una variable; es decir, dimensión debe ser una contante. Puede que te funcione pero eso es dependiente el compilador, en otro puede que no funcione. Hazlo así: int **m1 = malloc(sizeof(int*) * n); for(int i=0; i<n; i++){ m1[i] = malloc(sizeof(int) * n); for(int j=0; j<n; j++){ printf("[ %i , %i ] <- ", i, j); scanf("%d", &m1[i][j]); } } Cuando una función recibe un array multidimensional deben especificarse todas las dimensiones menos una, la que marca cuántos elementos de ese array van a existir. Esto es así porqué C necesita saber los límites de las dimensiones del dato. Por ejemplo, sea una función que reciba una tabla 5x5 de enteros su prototipo sería así: void funcion(int tabla[][5], int n_elementos); Se pasa el número de elementos, n_elementos, porque este puede cambiar llamada a llamada pero las dimensiones del array no. En este caso la función no devuelve nada.
|