Advertisement
force1987

gauss

Jun 13th, 2022
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.06 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <locale.h>
  5. #include <windows.h>
  6. #define N 5
  7.  
  8. //----------------------------------------------
  9. //Описание функции
  10. //----------------------------------------------
  11. void find_max(int k, double mas[][N + 1], int otv[])
  12. {
  13. int i, j, i_max = k, j_max = k;
  14. double temp;
  15. //Ищем максимальный по модулю элемент
  16. for (i = k; i < N; i++)
  17. for (j = k; j < N; j++)
  18. if (fabs(mas[i_max][j_max]) < fabs(mas[i][j]))
  19. {
  20. i_max = i;
  21. j_max = j;
  22. }
  23. //Переставляем строки
  24. for (j = k; j < N + 1; j++)
  25. {
  26. temp = mas[k][j];
  27. mas[k][j] = mas[i_max][j];
  28. mas[i_max][j] = temp;
  29. }
  30. //Переставляем столбцы
  31. for (i = 0; i < N; i++)
  32. {
  33. temp = mas[i][k];
  34. mas[i][k] = mas[i][j_max];
  35. mas[i][j_max] = temp;
  36. }
  37. //Учитываем изменение порядка корней
  38. i = otv[k];
  39. otv[k] = otv[j_max];
  40. otv[j_max] = i;
  41. }
  42.  
  43. void printsys(double mas[][N+1])
  44. {
  45. puts("Система:");
  46. for (int i = 0; i < N; i++)
  47. {
  48. for (int j = 0; j < N + 1; j++)
  49. printf ("%7.2lf ",mas[i][j]);
  50. puts("");
  51. }
  52. }
  53.  
  54. int main(void)
  55. {
  56. setlocale(LC_ALL, "RUS");
  57. double mas[N][N + 1]{ {1,0,0,2,6,41}, {-2,3,4,3,3,32}, {2,2,-1,1,3,29}, {3,4,6,3,2,48}, {2,1,5,-1,4,42} };
  58. double x[N]; //Корни системы
  59. int otv[N]; //Отвечает за порядок корней
  60. int i, j, k;
  61. //Ввод данных
  62. system("cls");
  63. //Вывод cистемы
  64. printsys(mas);
  65. //Сначала все корни по порядку
  66. for (i = 0; i < N; i++)
  67. otv[i] = i;
  68. //Прямой ход метода Гаусса
  69. for (k = 0; k < N; k++)
  70. { //На какой позиции должен стоять главный элемент
  71. find_max(k, mas, otv); //Установка главного элемента
  72. if (fabs(mas[k][k]) < 0.0001)
  73. {
  74. printf("Система не имеет единственного решения");
  75. return (0);
  76. }
  77. for (j = N; j >= k; j--)
  78. {
  79. mas[k][j] /= mas[k][k];
  80. }
  81. for (i = k + 1; i < N; i++)
  82. for (j = N; j >= k; j--)
  83. {
  84. mas[i][j] -= mas[k][j] * mas[i][k];
  85. }
  86. }
  87. //Обратный ход
  88. for (i = 0; i < N; i++)
  89. x[i] = mas[i][N];
  90. for (i = N - 2; i >= 0; i--)
  91. for (j = i + 1; j < N; j++)
  92. x[i] -= x[j] * mas[i][j];
  93. //Вывод результата
  94. printf("Ответ:\n");
  95. for (i = 0; i < N; i++)
  96. for (j = 0; j < N; j++)
  97. if (i == otv[j])
  98. { //Расставляем корни по порядку
  99. printf("%f\n", x[j]);
  100. break;
  101. }
  102. return (0);
  103. }
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement