elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [urgente por favor] problema compilación ejercicio funciones con matrices
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [urgente por favor] problema compilación ejercicio funciones con matrices  (Leído 1,680 veces)
carlasv12

Desconectado Desconectado

Mensajes: 2


Ver Perfil
[urgente por favor] problema compilación ejercicio funciones con matrices
« 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:
Código
  1. #include <stdio.h>
  2. #include <limits.h>
  3.  
  4. int determinante(int** m1, int n){
  5. int det1, det2, det3;
  6.  
  7. if(n==2){
  8. det1=(m1[0][0]*m1[1][1])-(m1[0][1]*m1[1][0]);
  9. return(det1);
  10. }
  11.  
  12. if(n==3){
  13. 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]));
  14. return(det2);
  15. }
  16.  
  17. if(n==4){
  18. int detA, detB, detC, detD;
  19.  
  20. 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]);
  21. 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]);
  22. 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]);
  23. 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]);
  24. det3=detA-detB+detC-detD;
  25. return(det3);
  26. }
  27. if(n!=2 && n!=3 && n!=4){
  28. return(INT_MIN);
  29. }
  30. }
  31.  
  32. int main(){
  33. int n;
  34. scanf("%d", &n);
  35.  
  36. int m1[n][n];
  37. for(int i=0; i<n; i++){
  38. for(int j=0; j<n; j++){
  39. scanf("%d", &m1[i][j]);
  40. }
  41. }
  42.  
  43. determinante(m1, n);
  44.  
  45. return 0;
  46. }
  47.  
Y AQUÍ EL PROBLEMA QUE ME DA AL COMPILAR:
Código:
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


« Última modificación: 29 Mayo 2017, 02:19 am por engel lex » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: [URGENTE POR FAVOR] Problema compilación ejercicio funciones con matrices
« Respuesta #1 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í:
Código:
	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í:

Código:
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.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Funciones con matrices
Java
juancaa 2 2,356 Último mensaje 3 Marzo 2012, 14:30 pm
por juancaa
ejercicio con matrices o funciones en visual c++
Programación C/C++
ZUVAI 1 2,274 Último mensaje 7 Septiembre 2013, 08:54 am
por Eternal Idol
Problema en ejercicio con funciones
Programación C/C++
darkeado 4 2,139 Último mensaje 9 Agosto 2015, 23:02 pm
por darkeado
Necesito AYUDA con un EJERCICIO de MATRICES en JAVA POR FAVOR
Java
Benito123 1 2,894 Último mensaje 7 Abril 2022, 16:22 pm
por Danielㅤ
Necesito AYUDA con un EJERCICIO de MATRICES en JAVA POR FAVOR
Java
Benito123 4 3,012 Último mensaje 10 Mayo 2022, 15:07 pm
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines