Проблема с несовместимостью типов, с статическим и динамическим массивами

172
09 ноября 2021, 12:20

Сразу к сути: выполнял задание с университета Мой код:

#include <iostream>
#include <cmath>
using namespace std;
double b = -2;
double a = 1;
const int N = 11;
double y;
void Matrix_Writter(double* arr, int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            arr[i, j] = 1 + rand() % 5;
        }
        arr += cols;
        printf("\n");
    }
    printf("\n");
}
void Tabulation_1(double** arr, double a, double b) {
    double step = (b - a) / (N - 1), count = a;
    double step = (b - a) / (N - 1), count = a;
    for (int i = 0; i < N; i++) {
        arr[i][0] = count;
        arr[i][1] = 1 / sqrt(5 - pow(count, 3));
        count += step;
    }
}
double Integral(double** arr, double a, double b) {
    double** arr = new double* [N];
    for (int i = 0; i < N; i++)
    {
        arr[i] = new double[2];
    }
    for (int i = 0; i < N; i++)
    {
        delete[] arr[i];
    }
    delete[]arr;
    double coef = ((b - a)) / (3 * (N - 1)), sum = 0;
    sum = arr[0][1] + 4 * arr[1][1] + 2 * arr[2][1] + 4 * arr[3][1] +
        2 * arr[4][1] + 4 * arr[5][1] + 2 * arr[6][1] +
        4 * arr[7][1] + 2 * arr[8][1] + 4 * arr[9][1] +
        arr[10][1];
    return coef * sum;
}
void result()
{
    double func_1[N][2], a_1 = -2, b_1 = 1;
    Tabulation_1(func_1, a_1, b_1);
    Matrix_Writter(func_1, N, 2);
    cout << Integral(func_1, a_1, b_1);
}
int main()
{
    result();
    cout << endl;
    system("pause");
}

Проблема заключается в функции result, при создании статического массива func_1 и подставления его в дальнейшем как значения, выводится ошибка: Причем если я изменю тип переменной N с int на double, выведится другая ошибка: Мне говорили, что проблема заключается именно в том, что я ввожу статический массив, когда должно происходить динамическое выделение памяти. Я прописывал этот массив динамически, и не только этот, в этом случае не было каких-либо ошибок, программа просто не запускалась (ошибка была при самом запуске "Не удалось открыть файл").

Участок кода, в котором ошибка:

void result()
{
    double func_1[N][2], a_1 = -2, b_1 = 1;
    Tabulation_1(func_1, a_1, b_1);
    Matrix_Writter(func_1, N, 2);
    cout << Integral(func_1, a_1, b_1);
}

Помогите разобраться с этим недоразумением. P.S.: Да, в задании написано вычислить интегралы для 2 выражений, но я пока и под одно не оптимизировал, так что второе пока не вычислял, да и в принципе там происходит все аналогичным образом.

Answer 1

Вам совершенно не нужны никакие массивы. Вот примерное решение (можно кое-что даже улучшить, но я уже не стал это делать):

double Parabola(double a, double b, unsigned int N, double (*f)(double))
{
    double h = (b-a)/N;
    double s = -(f(a)+f(b));
    for(unsigned int i = 0, coeff = 4; i <= N; ++i)
    {
        s += (coeff = 6-coeff)*f(a+i*h);
    }
    return s*h/3;
}
double first(double x)
{
    return 1/sqrt(5-x*x*x);
}
double second(double x)
{
    return 1/((3*x-2)*x+4);
}
int main(int argc, const char * argv[])
{
    cout << Parabola(-2,1,10,first) << endl;
    cout << Parabola(-1,3,10,second) << endl;
}
READ ALSO
Переименовать вершины графа BOOST

Переименовать вершины графа BOOST

Как задавать имена вершинам в моем коде?

244
О наследовании в С++

О наследовании в С++

Задание от преподавателя ООП в вузеВычислить сумму чисел наследуемых классов используя методы доступа

86
Перенаправление вывода консоли в файл

Перенаправление вывода консоли в файл

Как перенаправить вывод cmd в файл

339
Почему не корректно срабатывает ZBuffer

Почему не корректно срабатывает ZBuffer

Помогите, уже второй день не могу понять, почему у меня не корректно отображается 3d сцена, плоскости не перекрываются, почему, не понятно

156