Сразу к сути: выполнял задание с университета Мой код:
#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 выражений, но я пока и под одно не оптимизировал, так что второе пока не вычислял, да и в принципе там происходит все аналогичным образом.
Вам совершенно не нужны никакие массивы. Вот примерное решение (можно кое-что даже улучшить, но я уже не стал это делать):
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;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Задание от преподавателя ООП в вузеВычислить сумму чисел наследуемых классов используя методы доступа
Помогите, уже второй день не могу понять, почему у меня не корректно отображается 3d сцена, плоскости не перекрываются, почему, не понятно