Advertisement
Zennoma

practice

May 21st, 2020
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.00 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <string.h>
  5. using namespace std;
  6. float** matrix = new float* [4];
  7. float* answers = new float[3];
  8. void printmatrix(float** matrix)
  9. {
  10. cout.setf(ios::fixed, ios::floatfield);
  11. cout.setf(ios::showpoint);
  12.  
  13. for (int i = 0; i < 4; i++)
  14. {
  15. for (int j = 0; j < 5; j++)
  16. {
  17.  
  18. cout.width(10);
  19. cout.precision(5);
  20. if (j != 4)
  21. cout << matrix[i][j] << setprecision(5) << "*x" << j + 1 << " + ";
  22. else
  23. {
  24. cout.width(2);
  25. cout.precision(5);
  26. cout << "=" << matrix[i][j];
  27. }
  28. }
  29. cout << endl;
  30. }
  31. }//печать матрицы
  32. FILE* fromfile(FILE* file, float** matrix)
  33. {
  34. int countrow = 0;
  35. int countcoll = 0;
  36. char* string = new char[30];
  37. while (fgets(string, 128, file) > 0)
  38. {
  39. if (strlen(string) < 12)
  40. continue;
  41. char* pch = strtok(string, " \n");
  42. while (pch != NULL) // пока есть лексемы
  43. {
  44. matrix[countrow][countcoll] = atof(pch);
  45. pch = strtok(NULL, " \n");
  46. countcoll++;
  47. }
  48. countrow++;
  49. countcoll = 0;
  50. }
  51. fclose(file);
  52. return(file);
  53. }//запись из файла в матрицу
  54. void matrixgen(float** matrix)// создание матрицы
  55. {
  56. for (int i = 0; i < 4; i++)
  57. {
  58. matrix[i] = new float[5]; // Создаем элементы
  59. }
  60. }
  61. float swap(float** matrix, int n, int k)//n меняем с k
  62. {
  63. float buffer;
  64. for (int j = 0; j < 5; j++)
  65. {
  66. buffer = matrix[n][j];
  67. matrix[n][j] = matrix[k][j];
  68. matrix[k][j] = buffer;
  69. }
  70. return(**matrix);
  71. }
  72. void solution(float** matirx, float* answers)
  73. {
  74. answers[3] = matrix[3][4] / matrix[3][3];
  75. answers[2] = (matrix[2][4] - answers[3] * matrix[2][3]) / matrix[2][2];
  76. answers[1] = (matrix[1][4] - answers[2] * matrix[1][2] - answers[3] * matrix[1][3]) / matrix[1][1];
  77. answers[0] = (matrix[0][4] - answers[1] * matrix[0][1] - answers[2] * matrix[0][2] - answers[3] * matrix[0][3]) / matrix[0][0];
  78. for (int i = 1; i < 5; i++)
  79. cout << "x" << i << "=" << answers[i - 1] << endl;
  80. }
  81. void gauss_straight(float** matrix)
  82. {
  83. int zerorow = -1;
  84. float buff;
  85. for (int row = 0; row < 4; row++)
  86. {
  87. if (matrix[row][row] == 0)//если главный элемент равен 0, то нужно найти другую строку и поменять их местами
  88. {
  89. for (int i = row; i < 4; i++)
  90. if (matrix[i][row] != 0)
  91. zerorow = i;
  92. if (zerorow == -1) { cout << "SLAU doesn't have solutions/infinite solutions"; return; }
  93. swap(matrix, row, zerorow);
  94. zerorow = -1;
  95. }
  96. for (int extrarow = row + 1; extrarow < 4; extrarow++)
  97. {
  98. buff = -matrix[extrarow][row];
  99. for (int col = 0; col < 6; col++)
  100. {
  101.  
  102. matrix[extrarow][col] += matrix[row][col] * buff / matrix[row][row];
  103. }
  104. }
  105. }
  106. puts("Row echelon form");
  107. printmatrix(matrix);
  108. solution(matrix, answers);
  109. }
  110.  
  111. void gauss_partly(float** matrix)
  112. {
  113. float max = 0;
  114. int zerorow = -1;
  115. float buff;
  116. for (int row = 0; row < 4; row++)
  117. {
  118. for (int i = row; i < 4; i++)
  119. if (fabs(matrix[i][row]) > max)
  120. {
  121. zerorow = i;
  122. max = fabs(matrix[i][row]);
  123. }
  124. if (max == 0) { cout << "SLAU doesn't have solutions/infinite solutions"; return; }
  125. swap(matrix, row, zerorow);
  126. max = 0;
  127. zerorow = -1;
  128. for (int extrarow = row + 1; extrarow < 4; extrarow++)
  129. {
  130. buff = -matrix[extrarow][row];
  131. for (int col = 0; col < 6; col++)
  132. {
  133.  
  134. matrix[extrarow][col] += matrix[row][col] * buff / matrix[row][row];
  135. }
  136. }
  137. }
  138. puts("Row echelon form");
  139. printmatrix(matrix);
  140. solution(matrix, answers);
  141. }
  142. int main()
  143. {
  144. matrixgen(matrix);
  145. double precisematrix[4][5];
  146. FILE* file;
  147. char* name;
  148. name = new char[15];
  149. puts("input file name");
  150. cin >> name;
  151. fopen_s(&file, name, "r");
  152. if (file == NULL)
  153. {
  154. puts("file not found");
  155. return(0);
  156. }
  157. fromfile(file, matrix);
  158. cout << "file read successfully" << endl;
  159. printmatrix(matrix);
  160. cout << "gauss straight" << endl;
  161. //gauss_straight(matrix);
  162. gauss_partly(matrix);
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement