fork download
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4.  
  5. float subMatrix(float *mat, int nSize);
  6. void copySubMatrix(float *oMat, float *iMat, int nSize, int posM, int posN);
  7. float result[16];
  8.  
  9. #define N_SIZE 4
  10.  
  11. int main(void)
  12. {
  13. float mat[N_SIZE][N_SIZE]={
  14. 1,2,3,4,
  15. 3,6,7,8,
  16. 1,3,3,5,
  17. 5,6,9,8
  18. };
  19.  
  20. float *MatIn = &mat[0][0];
  21. float result[N_SIZE][N_SIZE];
  22.  
  23. float det = 0;
  24.  
  25. int i, j, nSize = N_SIZE;
  26.  
  27. for(i=0; i<nSize; ++i)
  28. {
  29. for(j=0; j<nSize; ++j)
  30. {
  31. float *p_Copy = new float[(nSize-1)*(nSize-1)];
  32. copySubMatrix(p_Copy, MatIn, nSize, i, j);
  33. if((i+j)%2) result[i][j] = 0 - subMatrix(p_Copy, nSize-1);
  34. else result[i][j] = subMatrix(p_Copy, nSize-1);
  35. delete [] p_Copy;
  36. }
  37. }
  38.  
  39. for(i=0; i<nSize; ++i)
  40. {
  41. det +=result[0][i] * mat[0][i];
  42. printf("det = %f\n", det);
  43. }
  44. if(det)
  45. {
  46. for(i=0; i<nSize; ++i)
  47. {
  48. for(j=0; j<nSize; ++j)
  49. {
  50. printf("%.2f\t", result[j][i]/det);
  51. }
  52. printf("\n");
  53. }
  54. }
  55.  
  56.  
  57.  
  58.  
  59.  
  60. getch();
  61. return 0;
  62. }
  63.  
  64. //get det(mat)
  65. float subMatrix(float *mat, int nSize)
  66. {
  67. int i,j;
  68. float det = 0;
  69. if(nSize==2)
  70. {
  71. printf("%.1f * %.1f - %.1f * %.1f =%.1f \n",mat[0] , mat[3], mat[1], mat[2] ,mat[0] * mat[3] - mat[1] * mat[2]);
  72. return mat[0] * mat[3] - mat[1] * mat[2];
  73. }
  74.  
  75. //else case
  76. for(i=0; i<nSize; ++i)
  77. {
  78. for(j=0; j<nSize; ++j)
  79. {
  80. float *p_Copy = new float[(nSize-1)*(nSize-1)];
  81. copySubMatrix(p_Copy, mat, nSize, i, j);
  82. if((i+j)%2) det -= mat[(i*nSize+j)]* subMatrix(p_Copy, nSize-1);
  83. else det += mat[(i*nSize+j)]* subMatrix(p_Copy, nSize-1);
  84. delete [] p_Copy;
  85.  
  86. }
  87. }
  88. return det;
  89.  
  90. }
  91.  
  92. void copySubMatrix(float *oMat, float *iMat, int nSize, int posM, int posN)
  93. {
  94. int i,j,oIndex = 0, iIndex;
  95.  
  96. for(i=0; i<nSize-1; ++i)
  97. {
  98. for(j=0; j<nSize-1; ++j)
  99. {
  100. iIndex = (i<posM)? i*nSize : (i+1)*nSize;
  101. iIndex += (j<posN)? j: (j+1);
  102. oMat[oIndex] = iMat[iIndex];
  103.  
  104. printf("%.1f\t", oMat[oIndex]);
  105. oIndex++;
  106. }
  107. printf("\n");
  108. }
  109. printf("\n");
  110. // getch();
  111. }
  112.  
  113.  
  114.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:2:19: fatal error: conio.h: No such file or directory
 #include <conio.h>
                   ^
compilation terminated.
stdout
Standard output is empty