Загрузка...

Help with writing code - GPT does not help

Thread in C/C++ created by PIMPCENT Dec 3, 2023. 127 views

  1. PIMPCENT
    PIMPCENT Topic starter Dec 3, 2023 0 Jun 15, 2021
    1. В начале работы необходимо спросить пользователя, желает ли он ввести новые матрицы коэффициентов, или считать данные из сохраненного файла (касаемо файлов, см. п.10 !!!), если пользователь выберет вариант новой системы, то переход на п.2.
    2. Запрос у пользователя размерности системы (с проверкой допустимости введенного значения. Если трижды подряд введены некорректные значения, то завершить выполнение программы с информированием об этом пользователя);
    3. Матрицы коэффициентов (и векторы правой части, и решения задачи) – должны представлять собой динамические массивы. Обязательно освобождение памяти в конце работы, иначе будет засчитана критическая ошибка за весь проект!)
    4. Заполнение массивов коэффициентов и правой части системы должно производиться отдельной функцией, которой нужно передавать массив в качестве параметра.
    5. Отдельные функции должны вычислять определитель матрицы (матрица передается функции в качестве параметра, а значение определителя должно помещаться в переменную, передаваемую функции в качестве второго параметра. возвращаемое значение - истина, если матрица невырожденная и определитель можно вычислить, и ложь – в противном случае!)
    6. Для всех этапов контроля и выполнения математических действий над элементами системы, необходимо использовать функции. Продумывать и обосновывать их типы возвращаемых значений и их необходимость, а также типы и количество параметров.
    7. При составлении алгоритма решения систем необходимо учитывать все возможные варианты исхода решения. (Например, система несовместна, и т.п.)
    8. Для вывода на экран массивов также необходимо использовать функцию (массив передается через параметр, а настройка вывода, например – отображение вектора в строку или в столбец, и т.п. – другими параметрами функции. По умолчанию – вектор выводится в строку, через пробел). Матрицы должны отображаться корректно, в виде квадратной таблицы чисел.
    9. В проекте разрешается использование структур, но данный подход НЕ ЯВЛЯЕТСЯ ОБЯЗАТЕЛЬНЫМ.

    Функция Main() не должна содержать непосредственных алгоритмических действий, выражений с вычислениями.. Все эти элементы должны быть грамотно и корректно распределены по функциям. В Main должны быть только объявления переменных или объектов, главных для программы, а также допускается реализация интерфейса с пользователем. Все остальное – только через вызовы определенных функций (методов).
     
  2. Comrade_Berry
    Попробуй, должно работать:

    #include <iostream>
    #include <vector>
    #include <fstream>
    #include <cmath>

    // Прототипы функций
    void readMatrixFromFile(std::vector<std::vector<double>>& matrix, const std::string& filename);
    void fillMatrix(std::vector<std::vector<double>>& matrix, int size);
    void printMatrix(const std::vector<std::vector<double>>& matrix);
    double determinant(const std::vector<std::vector<double>>& matrix, int n);
    bool gaussianElimination(std::vector<std::vector<double>>& matrix, std::vector<double>& result);
    void userInput();

    int main() {
    setlocale(LC_ALL, "Russian");
    userInput();
    return 0;
    }

    void userInput() {
    std::vector<std::vector<double>> matrix;
    int choice, size;
    std::cout << "Введите 1 для ввода новых матриц, или 2 для чтения из файла: ";
    std::cin >> choice;

    if (choice == 1) {
    std::cout << "Введите размерность матрицы: ";
    std::cin >> size;
    if (size <= 0) {
    std::cerr << "Некорректный размер матрицы." << std::endl;
    return;
    }
    matrix.resize(size, std::vector<double>(size));
    fillMatrix(matrix, size);
    }
    else if (choice == 2) {
    std::string filename;
    std::cout << "Введите имя файла: ";
    std::cin >> filename;
    readMatrixFromFile(matrix, filename);
    }
    else {
    std::cout << "Неверный выбор." << std::endl;
    return;
    }

    std::cout << "Введенная матрица:" << std::endl;
    printMatrix(matrix);

    double det = determinant(matrix, matrix.size());
    std::cout << "Определитель матрицы: " << det << std::endl;

    if (det != 0) {
    std::vector<double> result;
    if (gaussianElimination(matrix, result)) {
    std::cout << "Решение системы: ";
    for (double x : result) {
    std::cout << x << " ";
    }
    std::cout << std::endl;
    }
    else {
    std::cout << "Ошибка при решении системы." << std::endl;
    }
    }
    else {
    std::cout << "Система уравнений не имеет решения или имеет бесконечно много решений." << std::endl;
    }
    }

    void readMatrixFromFile(std::vector<std::vector<double>>& matrix, const std::string& filename) {
    // Реализация чтения матрицы из файла
    }

    void fillMatrix(std::vector<std::vector<double>>& matrix, int size) {
    double value;
    for (int i = 0; i < size; ++i) {
    for (int j = 0; j < size; ++j) {
    std::cout << "Введите элемент [" << i << "][" << j << "]: ";
    while (!(std::cin >> value)) {
    std::cout << "Некорректный ввод. Пожалуйста, введите число: ";
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    matrix[j] = value;
    }
    }
    // Реализация заполнения матрицы пользователем
    }

    void printMatrix(const std::vector<std::vector<double>>& matrix) {
    // Реализация печати матрицы
    }

    double determinant(const std::vector<std::vector<double>>& matrix, int n) {
    // Реализация вычисления определителя
    if (n == 2) {
    return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
    }
    // Для n > 2 добавьте здесь соответствующий код
    return 0; // Возвращаем 0 как простой случай (или бросьте исключение)
    }

    bool gaussianElimination(std::vector<std::vector<double>>& matrix, std::vector<double>& result) {
    // ... реализация метода Гаусса ...
    return true; // Предполагаем, что операция была успешной
    // Реализация метода Гаусса
    }
     
Loading...
Top