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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] [Source] Determinante Matriz orden "N"
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] [Source] Determinante Matriz orden "N"  (Leído 3,184 veces)
juancaa

Desconectado Desconectado

Mensajes: 140


[ Img^(Img) = Real ]


Ver Perfil
[C] [Source] Determinante Matriz orden "N"
« en: 13 Junio 2012, 02:26 am »

He aqui mi nueva version remasterizada del codigo para el calculo del determinante de una matriz cuadrada de orden N.
Este codigo es lo mas simple posible para realizar el calculo del determinante de una matriz que se me ha ocurrido (62 lineas), evidentemente se puede optimizar para reducir la complejidad del algoritmo pero eso va a gusto de cada uno, yo solo comparto el codigo para aquellos que les interese.

Nota: El algoritmo calcula el determinante de una matriz de orden "N" mediante adjuntos, empieza desde la primera columna y va reduciendo hasta llegar a la ultima mediante recursividad, tan simple como eso.


Código
  1. #include <stdio.h>
  2. #define N 100
  3.  
  4. int sgn (int x) {
  5. if (x%2==0) return(1);
  6. return(-1);
  7. }
  8. int read_dim (int *dim) {
  9. int nl;
  10. char aux;
  11. printf("\nIntroduzca dimension matriz cuadrada (<100): ");
  12. nl=scanf("%d", &(*dim));
  13. if (nl!=1) {
  14. scanf("%c", &aux);
  15. while (aux!='\n')
  16. scanf("%c", &aux);
  17. }
  18. if ( (*dim>=100) || (*dim<=0) )
  19. return(0);
  20. return(1);
  21. }
  22. void read_matrix (int matrix[N][N], int dim) {
  23. int i, j;
  24. printf("\nIntroduzca elementos matriz...\n");
  25. for (i=1; i<=dim; i++) {
  26. printf("Elementos fila %d: ", i);
  27. for (j=0; j<dim; j++)
  28. scanf("%d", &matrix[i-1][j]);
  29. }
  30. }
  31. void matrix_adj (int matrix[N][N], int matrix_aux[N][N], int dim, int m, int n) {
  32. int i, j, p, q;
  33. for (j=0, q=0; j<dim; j++)
  34. if (j!=n) {
  35. for (i=0, p=0; i<dim; i++)
  36. if (i!=m) {
  37. matrix_aux[p][q]=matrix[i][j];
  38. p++;
  39. }
  40. q++;
  41. }
  42. }
  43. int det_matrix_N (int matrix[N][N], int dim) {
  44. int i, j, dim_aux, det;
  45. for (i=0, j=0, det=0, dim_aux=dim; i<dim; i++)
  46. det+=sgn(i+j)*matrix[i][j]*det_matrix_adj(matrix,dim_aux,i,j);
  47. return(det);
  48. }
  49. int det_matrix_adj (int matrix[N][N], int dim, int m, int n) {
  50. int matrix_aux[N][N];
  51. if (dim==1) return(1);
  52. matrix_adj(matrix,matrix_aux,dim,m,n);
  53. return det_matrix_N(matrix_aux,dim-1);
  54. }
  55.  
  56. main() {
  57. int dim, matrix[N][N];
  58. while (!read_dim(&dim))
  59. printf("Dimension no valida (<100).");
  60. read_matrix(matrix,dim);
  61. printf("\nDeterminante = %d.\n\n", det_matrix_N(matrix,dim));
  62. }


« Última modificación: 18 Julio 2012, 17:15 pm por fMtQr » En línea

Que tengas un buen dia!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines