[urgente por favor] problema compilación ejercicio funciones con matrices

Iniciado por carlasv12, 29 Mayo 2017, 01:28 AM

0 Miembros y 1 Visitante están viendo este tema.

carlasv12

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;
scanf("%d", &n);

int m1[n][n];
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
scanf("%d", &m1[i][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
-Engel Lex

MAFUS

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.