@YourNameHere

Не могу найти ошибку в коде. Что не так?

Есть часть кода:
#ifndef LABA2_H_INCLUDED
#define LABA2_H_INCLUDED

#include <iostream>
#include <iomanip>
#include <cmath>
#include <fstream>
using namespace std;

void laba2()
{
    ofstream F2;
    F2.open("F2.txt");
    int Kn = 0, r = 0, v = 0;
    double Xh = -2.5, Xk = 7.6, H = 0.7, U1 = 9.15, W1 = 46, C, x, F, m[r];
    long double S = 0, S1 = 0, Pn = 1;

    C = 0.53 * pow(10, 2.1);
    x = Xh;

    while (x <= Xk) {
        F = C * sin(x) - x * sin(pow(C,2));
        S += F; // S
        if (F < U1) {
            S1 += F;
        }
        if (F > U1) {
            Pn *= F;
            Kn += 1;
        }
        if (F > W1) { ////////////////
            m[r] = F;/////////////////
            r += 1;//////////////////
        }///////////////////////////
        x += H;
    }
    F2<<"R = [ ";
    for (int i = 0; i < r; i++)
    {
        F2<<m[i]<<" ";
    }
    F2<<"]"<<endl;
    F2<<"S = "<<S<<endl;
    F2<<"S1 = "<<S1<<endl;
    F2<<"P3 = "<<Pn<<endl;
    F2<<"K3 = "<<Kn<<endl;
    F2<<"\n\nTable\n";
    x = Xh;
    while (x <= Xk) {
        F = C * sin(x) - x * sin(pow(C,2));
        F2<<"x = "<<x;
        F2<<"     F = "<<F<<endl;
        x += H;
    }
    F2.close();
}

#endif // LABA2_H_INCLUDED


Здесь представлена именно проблемная часть. Помимо нее есть еще 2 файла с кодом, но с ними проблемы нет: запускаются и выполняются так, как нужно.
Суть проблемы в чем: в main.cpp я вызываю данную функцию и программа тут же завершается.
По идее она должна работать следующим образом: при вызове выполняются соответствующие операции, результат записывается в файл и выходит строка, которая сообщает о том, что запрос выполнен. Далее в консоле с помощью вызова другой функции я открываю файл с результатами этой программы.
На практике всего этого не происходит. Создается файл, но в него ничего не записывается.
Загвоздка все в одном фрагменте (он выделен слэшами). Когда я его помещаю в комментарий, все работает, но стоит мне вернуть все на свои места, происходит то, что я описала выше.
Вопрос к знающим: как исправить эту ошибку?
Заранее благодарю за отклик
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
Ocelot
@Ocelot
Вы объявляете m[r] размерности 0, а когда пытаетесь туда писать, естественно, всё падает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Mind-4U
Chat gpt, говорит следующее)

#ifndef LABA2_H_INCLUDED
#define LABA2_H_INCLUDED

#include
#include
#include
#include
using namespace std;

void laba2()
{
ofstream F2;
F2.open("F2.txt");
int Kn = 0, r = 0, v = 0;
double Xh = -2.5, Xk = 7.6, H = 0.7, U1 = 9.15, W1 = 46, C, x, F, m[r];
long double S = 0, S1 = 0, Pn = 1;

C = 0.53 * pow(10, 2.1);
x = Xh;

while (x <= Xk) {
F = C * sin(x) - x * sin(pow(C,2));
S += F; // S
if (F < U1) {
S1 += F;
}
if (F > U1) {
Pn *= F;
Kn += 1;
}
if (F > W1) { ////////////////
m[r] = F;/////////////////
r += 1;//////////////////
}///////////////////////////
x += H;
}
F2<<"R = [ ";
for (int i = 0; i < r; i++)
{
F2< }
F2<<"]"< F2<<"S = "< F2<<"S1 = "< F2<<"P3 = "< F2<<"K3 = "< F2<<"\n\nTable\n";
x = Xh;
while (x <= Xk) {
F = C * sin(x) - x * sin(pow(C,2));
F2<<"x = "< F2<<" F = "< x += H;
}
F2.close();
}

В этом коде может быть несколько потенциальных ошибок, но без контекста задачи и требований к функции laba2() необходимо угадывать. Ниже представлены некоторые из них:

Все переменные m, r и v инициализируются со значением 0, их значения изменяются только внутри цикла while. Поэтому при первом же запуске цикла while, условие if (F > W1) не выполнится, и m останется пустым. При попытке записи m[r] = F возможна ошибка выхода за границы массива.

Переменная m объявлена как массив размером r, который на момент объявления имеет значение 0. Таким образом, массив m будет иметь размер 0, и любые попытки записи в m будут выходить за границы массива.

Если во входных данных не было указано, что все переменные, используемые в функции laba2(), должны быть глобальными, то использование глобальных переменных может рассматриваться как нежелательное программирование.

Если файл "F2.txt" уже существует, то операция F2.open("F2.txt") перезапишет его. Если это не то, что предполагалось, то требуется предварительно удалить файл или использовать другое имя файла.

Нет проверки на успешное открытие файла F2. Если открытие файла не выполнится успешно, дальнейший код может не работать корректно. Необходимо добавить проверку на успешное открытие файла перед использованием его в коде.

Не учитывается случай, когда H может быть меньше или равен нулю. В этом случае цикл while будет выполняться бесконечное количество раз, что может привести к ошибке.

Нет проверки на деление на ноль при вычислении Pn. Если значение F равно нулю, программа завершится с ошибкой.

Все эти потенциальные ошибки могут быть исправлены, если предоставить больше информации о том, что должна делать функция laba2().
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы