Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <iomanip>
- #include <string.h>
- using namespace std;
- float** matrix = new float* [4];
- float* answers = new float[3];
- void printmatrix(float** matrix)
- {
- cout.setf(ios::fixed, ios::floatfield);
- cout.setf(ios::showpoint);
- for (int i = 0; i < 4; i++)
- {
- for (int j = 0; j < 5; j++)
- {
- cout.width(10);
- cout.precision(5);
- if (j != 4)
- cout << matrix[i][j] << setprecision(5) << "*x" << j + 1 << " + ";
- else
- {
- cout.width(2);
- cout.precision(5);
- cout << "=" << matrix[i][j];
- }
- }
- cout << endl;
- }
- }//печать матрицы
- FILE* fromfile(FILE* file, float** matrix)
- {
- int countrow = 0;
- int countcoll = 0;
- char* string = new char[30];
- while (fgets(string, 128, file) > 0)
- {
- if (strlen(string) < 12)
- continue;
- char* pch = strtok(string, " \n");
- while (pch != NULL) // пока есть лексемы
- {
- matrix[countrow][countcoll] = atof(pch);
- pch = strtok(NULL, " \n");
- countcoll++;
- }
- countrow++;
- countcoll = 0;
- }
- fclose(file);
- return(file);
- }//запись из файла в матрицу
- void matrixgen(float** matrix)// создание матрицы
- {
- for (int i = 0; i < 4; i++)
- {
- matrix[i] = new float[5]; // Создаем элементы
- }
- }
- float swap(float** matrix, int n, int k)//n меняем с k
- {
- float buffer;
- for (int j = 0; j < 5; j++)
- {
- buffer = matrix[n][j];
- matrix[n][j] = matrix[k][j];
- matrix[k][j] = buffer;
- }
- return(**matrix);
- }
- void solution(float** matirx, float* answers)
- {
- answers[3] = matrix[3][4] / matrix[3][3];
- answers[2] = (matrix[2][4] - answers[3] * matrix[2][3]) / matrix[2][2];
- answers[1] = (matrix[1][4] - answers[2] * matrix[1][2] - answers[3] * matrix[1][3]) / matrix[1][1];
- answers[0] = (matrix[0][4] - answers[1] * matrix[0][1] - answers[2] * matrix[0][2] - answers[3] * matrix[0][3]) / matrix[0][0];
- for (int i = 1; i < 5; i++)
- cout << "x" << i << "=" << answers[i - 1] << endl;
- }
- void gauss_straight(float** matrix)
- {
- int zerorow = -1;
- float buff;
- for (int row = 0; row < 4; row++)
- {
- if (matrix[row][row] == 0)//если главный элемент равен 0, то нужно найти другую строку и поменять их местами
- {
- for (int i = row; i < 4; i++)
- if (matrix[i][row] != 0)
- zerorow = i;
- if (zerorow == -1) { cout << "SLAU doesn't have solutions/infinite solutions"; return; }
- swap(matrix, row, zerorow);
- zerorow = -1;
- }
- for (int extrarow = row + 1; extrarow < 4; extrarow++)
- {
- buff = -matrix[extrarow][row];
- for (int col = 0; col < 6; col++)
- {
- matrix[extrarow][col] += matrix[row][col] * buff / matrix[row][row];
- }
- }
- }
- puts("Row echelon form");
- printmatrix(matrix);
- solution(matrix, answers);
- }
- void gauss_partly(float** matrix)
- {
- float max = 0;
- int zerorow = -1;
- float buff;
- for (int row = 0; row < 4; row++)
- {
- for (int i = row; i < 4; i++)
- if (fabs(matrix[i][row]) > max)
- {
- zerorow = i;
- max = fabs(matrix[i][row]);
- }
- if (max == 0) { cout << "SLAU doesn't have solutions/infinite solutions"; return; }
- swap(matrix, row, zerorow);
- max = 0;
- zerorow = -1;
- for (int extrarow = row + 1; extrarow < 4; extrarow++)
- {
- buff = -matrix[extrarow][row];
- for (int col = 0; col < 6; col++)
- {
- matrix[extrarow][col] += matrix[row][col] * buff / matrix[row][row];
- }
- }
- }
- puts("Row echelon form");
- printmatrix(matrix);
- solution(matrix, answers);
- }
- int main()
- {
- matrixgen(matrix);
- double precisematrix[4][5];
- FILE* file;
- char* name;
- name = new char[15];
- puts("input file name");
- cin >> name;
- fopen_s(&file, name, "r");
- if (file == NULL)
- {
- puts("file not found");
- return(0);
- }
- fromfile(file, matrix);
- cout << "file read successfully" << endl;
- printmatrix(matrix);
- cout << "gauss straight" << endl;
- //gauss_straight(matrix);
- gauss_partly(matrix);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement