Advertisement
Guest User

Untitled

a guest
Dec 10th, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.38 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. #include<conio.h>
  4. #include <locale.h>
  5. #include<math.h>
  6. #include<cmath>
  7.  
  8. int main()
  9. {
  10. setlocale(LC_ALL, "Rus");
  11. printf("Лабораторная работа № 2.\n");
  12. printf("Вариант № 27.\n");
  13. printf("Решение системы линейных алгебраических уравнений методом релаксации.\n");
  14. printf("Выполнил: студент гр.ИВТАПбд-21 Юкин Б.С.\n");
  15. printf("Проверил: доцент кафедры ПМИ Кувайскова Ю.Е.\n");
  16. printf("Введите количество уравнений и количество неизвестных переменных через пробел:\n\n");
  17. int n;
  18. int m;
  19. scanf("%d %d", &n, &m);
  20. printf("\n");
  21. printf("Введите все коэффициенты перед х1, х2, х3, х4, разделяя пробелами:\n\n");
  22. double a[100][100];
  23. double f[100];
  24. double b[100];
  25. int i;
  26. int j;
  27. int c = 0;
  28. int p = 0;
  29. int t = 0;
  30. int s = 0;
  31. int z = 0;
  32. int y = 0;
  33.  
  34. for (i = 0; i < n; i++)
  35. {
  36. f[i] = 0;
  37. }
  38.  
  39. for (i = 0; i < n; i++)
  40. {
  41. for (j = 0; j < m; j++)
  42. {
  43. scanf("%lf", &a[i][j]);
  44. }
  45. }
  46.  
  47. printf("\n");
  48. printf("Введите все свободные члены, разделяя пробелами:\n\n");
  49.  
  50. for (i = 0; i < n; i++)
  51. {
  52. scanf("%lf", &b[i]);
  53. }
  54. printf("\n");
  55.  
  56. for (i = 0; i < n; i++)
  57. {
  58. b[i] = b[i] / a[i][i];
  59. for (j = 0; j < m; j++)
  60. {
  61. if (i != j)
  62. {
  63. a[i][j] = a[i][j] / (-a[i][i]);
  64. }
  65. }
  66. }
  67.  
  68. for (i = 0; i < n; i++)
  69. {
  70. for (j = 0; j < m; j++)
  71. {
  72. if (i == j)
  73. {
  74. a[i][j] = -1;
  75. }
  76. }
  77. }
  78.  
  79. printf("Система, подготовленная к реклаксации:\n\n");
  80.  
  81. for (i = 0; i < n; i++)
  82. {
  83. for (j = 0; j < m; j++)
  84. {
  85. printf("%.4lf ", a[i][j]);
  86. }
  87. printf("%.4lf ", b[i]);
  88. printf("\n");
  89. }
  90. printf("\n\n");
  91.  
  92. printf("Первоначальные невязки:\n\n");
  93. for (i = 0; i < n; i++)
  94. {
  95. printf("R%d= %.4lf\n", i+1, b[i]);
  96. }
  97. printf("\n");
  98.  
  99. for (int k = 0; k<n; k++)
  100. {
  101. s++;
  102. double max = b[0];
  103. for (i = 0; i < n; i++)
  104. {
  105. if (abs(b[i]) > 0.001)
  106. {
  107. if (p == 0)
  108. {
  109. for (j = 0; j < n; j++)
  110. {
  111. if (abs(b[j]) > abs(max))
  112. {
  113. max = b[j];
  114. c = j;
  115. }
  116. }
  117. p = 1;
  118. }
  119. for (int q = 0; q < n; q++)
  120. {
  121. if ((b[q] == max)&&(z==0))
  122. {
  123. f[q] = f[q] + b[q];
  124. z = 1;
  125. }
  126. }
  127. y = 1;
  128. }
  129. if ((b[0] == max)&&(i!=0))
  130. {
  131. t = 1;
  132. if (i > 0)
  133. {
  134. b[i] = b[i] + a[i][0] * max;
  135. }
  136. if (i == n-1)
  137. {
  138. b[0] = 0;
  139. }
  140. }
  141. if ((b[0] != max)&&(t==0))
  142. {
  143. if (b[0] == 0)
  144. {
  145. i = 0;
  146. }
  147. b[c] = 0;
  148. if (i != c)
  149. {
  150. b[i] = b[i] + a[i][c] * max;
  151. }
  152. }
  153. }
  154. p = 0;
  155. t = 0;
  156. if (abs(b[k]) > 0.001)
  157. {
  158. k = 0;
  159. }
  160. z = 0;
  161. if (y == 1)
  162. {
  163. printf("Результат %d-й итерации:\n\n", s);
  164. for (i = 0; i < n; i++)
  165. {
  166. printf("R%d= %.4lf\n", i+1, b[i]);
  167. }
  168. printf("\n");
  169. }
  170. y = 0;
  171. }
  172.  
  173. double max = b[0];
  174. for (i = 0; i < n; i++)
  175. {
  176. if (abs(b[i])>abs(max))
  177. {
  178. max = b[i];
  179. c = i;
  180. }
  181. }
  182.  
  183. f[c] = f[c] + max;
  184.  
  185. printf("Значения корней:\n\n");
  186. for (i = 0; i < n; i++)
  187. {
  188. printf("x%d= %.4lf\n", i+1, f[i]);
  189. }
  190.  
  191. _getch();
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement