Код решения СЛУ. Решение СЛУ методом Гаусса, при вызове 1 пользователь должен самостоятельно ввести данные матрицы (порядок, коэффицентыб вектор b). При вызове 2 идёт считывание данных из файла.
Из файла сначала считывается порядок матрицы, а затем коэффиценты и свободные члены b. Но при работе с файлом вызывается исключение, хотя я в функции read_file прописал чтение переменной size (порядок матрицы) и в main выделил место для size (см после условия q == 2)
Подскажите, пожалуйста, в чём может быть ошибка
#
include <iostream>
#include <fstream>
#include <iomanip>
#include <time.h>
#include <windows.h>
using namespace std;
void swap(double* a, double* b) {
double c = *a;
*a = *b;
*b = c;
}
void solve(double** A, double* b, int size, double* X) {
for (int j = 0; j < size; j++) {
for (int i = j + 1; i < size; i++) {
double tmp = A[i][j] / A[j][j];
for (int k = j; k < size; k++) {
A[i][k] = A[i][k] - tmp * A[j][k];
}
b[i] = b[i] - tmp * b[j];
}
}
for (int i = size - 1; i >= 0; i--) {
double s = 0;
for (int j = i + 1; j < size; j++) {
s += A[i][j] * X[j];
}
X[i] = (b[i] - s) / A[i][i];
}
}
void print_solution(double** A, double* b, int size, double* X) {
for (int i = 0; i < size; i++) {
cout << X[i] << endl;
}
}
double check(double** A, double* x, double* b, int size) {
double si = 0;
double max = 0;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; i++) {
si += A[i][j] * x[j];
}
if (max < abs(si - b[i])) {
}
return max;
}
}
void file_read(double** A, string no_way, int size, double* X, double* b) {
ifstream ifs;
ifs.open("File.txt");
ifs >> size;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
ifs >> A[i][j];
}
}
for (int i = 0; i < size; i++) {
ifs >> b[i];
}
ifs.close();
}
int main() {
int size;
srand(time(nullptr));
double** A;
A = new double* [size];
double* B;
B = new double[size];
double* X;
X = new double[size];
int q;
cout << "Enter the number 1, if u wanna enter the dates, else enter 2 for reading ur file" << endl;
cin >> q;
if (q == 1) {
cout << "Enter the length and height of your matrix" << endl;
cin >> size;
for (int i = 0; i < size; i++) {
A[i] = new double[size];
}
if (size < 5) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
cin >> A[i][j];
}
}
for (int i = 0; i < size; i++) {
cout << "|";
for (int j = 0; j < size; j++) {
printf("%11f", A[i][j]);
cout << setw(7) << left;
}
cout << " |" << endl;
}
}
else {
double** arr;
arr = new double* [size];
for (int i = 0; i < size; i++) {
arr[i] = new double[size];
for (int j = 0; j < size; j++) {
arr[i][j] = (double)rand() / 2;
}
}
for (int i = 0; i < size; i++) {
cout << "|";
for (int j = 0; j < size; j++) {
printf("%17f", arr[i][j]);
cout << setw(7) << left;
}
cout << "|" << endl;
}
}
printf("\n");
cout << "Now, enter the results (b)" << endl;
for (int i = 0; i < size; i++) {
cin >> B[i];
}
solve(A, B, size, X);
print_solution(A, B, size, X);
}
if (q == 2){
for (int i = 0; i < size; i++) {
A[i] = new double[size];
}
file_read(A, "File.txt", size, X, B);
solve(A, B, size, X);
print_solution(A, B, size, X);
}
}