Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите разобраться С++. Как вывести функцию у которой в аргументе присутствует другая. Не понимаю синтаксис

Миша Медведев Профи (718), открыт 1 неделю назад
#include <iostream>
#include <cmath>
#include <vector>
#include <string>
#define m 200
#define g 981
#define r 1.75
#define h 150
#define deltar 0.005
#define deltam 0.5

long double def(double t_1[4], double t_2[4], double h_2[4], int i, int k) {
double matrix_of_delta[5][5] = {
{1e-10, 0, 0, 0, 0},
{0, 1e-10, 0, 0, 0},
{0, 0,1e-10, 0, 0},
{0, 0, 0, 1e-10, 0},
{0, 0, 0, 0, 1e-10},
};
long double a = (m + matrix_of_delta[i][0]) * g * (r + matrix_of_delta[i][1]) * pow((t_2[k] + matrix_of_delta[i][2]) - (t_1[k] + matrix_of_delta[i][3]), 2);//
long double b = (h + h_2[k] + matrix_of_delta[i][4]) / (r + matrix_of_delta[i][1]) - (h / (r + matrix_of_delta[i][1])) * (1 - pow(((t_2[k] + matrix_of_delta[0][2]) / (t_1[k] + matrix_of_delta[i][3]) - 1), 2));
long double c = m * g * r * pow(t_2 - t_1, 2);
long double f = (h + h_2[k]) / r - (h / r) * (1 - pow((t_2[k] / t_1[k] - 1), 2));
return (a / b - c / f) / (matrix_of_delta[i][0] + matrix_of_delta[i][1] + matrix_of_delta[i][1] + matrix_of_delta[i][1] + matrix_of_delta[i][1]);
}

long double** massive_defs(long double (*f)(double, double, double, int, int), double t_1[4], double t_2[4], double h_2[4], int n) {
long double** defs = new long double* [n]; // New massive defs
for (int i = 0; n > i; ++i) {
defs[i] = new long double[n];
}

for (int i = 0; n > i; ++i) {
for (int j = 0; n > j; ++j){
if (j == 1) {
defs[i][j] = (*f)(t_1[i], t_2[i], h_2[i], i, j);
}
}
}

for (int i = 0; n > i; ++i) {
for (int j = 0; n > j; ++j) {
std::cout << defs[i][j] << " ";
}
std::cout << std::endl;
}
return 0;
}


int main() {
int n;
std::cin >> n;
double deltat[4] = { 0.298257346, 0.210509699, 0.220984414, 0.225129099 };//Среднее квадртоичное отклонение t_1
double deltat_2[4] = { 0.405078319, 0.249786798, 0.411868237, 0.584986135 };//Среднее квадртоичное отклонение t_2
double delta_h[4] = { 1.436817471, 1.898756903, 1.898756903, 3.99148399 };//Среднее квадртоичное отклонение h
double t1[4] = { 4.95666667, 5.276666667, 7.64333333 , 12.48333333 };// средние значения t1
double t2[4] = { 9.0733333, 9.606667, 13.33667, 21.433333 };//средние значения t2
double h2[4] = { 104.16666, 105.333333, 113, 115.2333 };//средние значения h
massive_defs(*def(t1, t2, h2,i ,j), t1, t2, h2, n);
return 0;
}
1 ответ
Def Просветленный (38827) 1 неделю назад
Сам вызов осуществляется так - просто имя функции. Имя сишной функции является указателем на ее исполняемый код, к слову. Функция должна соответствовать прототипу, чего сейчас не наблюдается:
 massive_defs(def, t1, t2, h2, n); 
в текущей ситуации в описании функций нужно для начала понять, что double t_2[4] - это не double, это double* либо double[4].

long double** massive_defs(... // Вот так вот (пытаться вернуть сишный массив через возвращаемое значение) делать крайне не советую вообще никогда, но к вопросу это не относится. Плюсовый массив возвращать можно.
Похожие вопросы