Advertisement
Guest User

Untitled

a guest
Sep 24th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.86 KB | None | 0 0
  1. #include <stdio.h> // printf/scanf
  2. #include <stdlib.h> // malloc
  3.  
  4.  
  5. /*! \brief Получение матрицы
  6. *
  7. * \details Получение от пользователя матрицы размерности length
  8. *
  9. * \param [out] matrix Указатель для передачи матрицы
  10. * \param length Ожидаемая размерность матрицы
  11. */
  12. void getMatrix(float** matrix, int length);
  13.  
  14.  
  15. /*! \brief Получить алгебраическое дополнение
  16. *
  17. * \details Возвращает алгебраическое дополнение элемента matrix[x][y]
  18. *
  19. * \param matrix Матрица
  20. * \param length Размерность матрицы
  21. */
  22. float ** getAlgemAddition(float** matrix, int length, int x, int y);
  23.  
  24.  
  25. void printMatrix(float** matrix, int length){
  26. int i = 0;
  27. int j = 0;
  28. for(i = 0; i < length; i++){
  29. for(j = 0; j < length; j ++){
  30. printf("%f ", matrix[i][j]);
  31. }
  32. printf("\n");
  33. }
  34. }
  35.  
  36.  
  37. /*! \brief Функция Main
  38. * \return Код завершения программы (0-OK)
  39. */
  40. int main(){
  41. int length = 0;
  42.  
  43. while(1){
  44. printf("\nВведите размерность матрицы: ");
  45.  
  46. if(scanf("%d",&length) != 1){
  47. printf("\nНекорректный ввод\n");
  48.  
  49. scanf("%*[^\n]"); // clearing STD from invalid input
  50. length = 0; // just to be sure
  51. }
  52. else if(length > 0){
  53. break;
  54. }
  55. else{
  56. printf("\nНеверная размерность\n");
  57. }
  58. }
  59.  
  60. printf("\n%d\n", length );
  61.  
  62. float** matrix;
  63.  
  64. getMatrix(matrix, length);
  65.  
  66. printMatrix(matrix, length);
  67.  
  68. return 0;
  69. }
  70.  
  71.  
  72. void getMatrix(float** p_matrix, int length){
  73. int i = 0;
  74. int j = 0;
  75.  
  76. p_matrix = malloc( sizeof(float*) * length );
  77.  
  78. for(i = 0; i < length; i++){
  79. p_matrix[i] = malloc( sizeof(float) * length );
  80. for(j = 0; j < length; j++){
  81.  
  82. float elem;
  83.  
  84. while(1){
  85. printf("\nMatrix[%d][%d]: ",i ,j);
  86.  
  87. if(scanf("%f",&elem) != 1){
  88. printf("\nНекорректный ввод\n");
  89. scanf("%*[^\n]"); // clearing STD from invalid input
  90. }
  91. else{
  92. break;
  93. }
  94. }
  95.  
  96. p_matrix[i][j] = elem;
  97.  
  98. }
  99. }
  100. }
  101.  
  102. float** getAlgemAddition(float** p_matrix, int length, int x, int y){
  103. // invalid arguments
  104. if(x >= length || x < 0 || y >= length || y < 0){
  105. return 0;
  106. }
  107.  
  108.  
  109. int i, j, ci, cj, di, dj;
  110. // 'c' stands for 'copy' (index of copy)
  111. // 'd' stands for 'delta'
  112. // (delta between copy index and original index)
  113.  
  114. float** p_matrix_copy;
  115. p_matrix_copy = malloc( sizeof(float*) * length-1 ); // length-1
  116. // (w/o one line and row)
  117. di = 0;
  118. for(i = 0; i < length-1; i++){
  119. if(ci == i) di = 1; // offset (skiping this line)
  120.  
  121. p_matrix[i] = malloc( sizeof(float) * length-1 );
  122. dj = 0;
  123. for(j = 0; j < length-1; j++){
  124. if(cj == j) dj = 1; // offset (skiping this row)
  125. p_matrix_copy[i][j] = p_matrix[ci + di][cj + dj];
  126. }
  127. }
  128. return p_matrix_copy;
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement