Задать вопрос
guitarist2404
@guitarist2404

Почему вызывается исключение при считывании информации из файла?

Код решения СЛУ. Решение СЛУ методом Гаусса, при вызове 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);
    }
 
}
  • Вопрос задан
  • 103 просмотра
Подписаться 1 Средний 3 комментария
Пригласить эксперта
Ответы на вопрос 1
У вас переменная size в main не инициализирована. В ней находится мусор. А вы создаете массивы размера size.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы