2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 С++
Сообщение21.02.2009, 19:02 
double *H(double *x){
double *h;
h=new double[2];
h[0]=1+x[0]+x[1];
h[1]=1+x[0]+x[1];
return h;
}
double F(double *(*H)(double *x)){
return log(H(x)[0])+log(H(x)[0]);
}

Помогите, хочу функцию H, передавать функции F.
ошибка:`x' undeclared (first use this function)
как сделать правильно?

 
 
 
 
Сообщение21.02.2009, 19:09 
Аватара пользователя
Компилятор сообщает о том, что в строчке
Код:
return log(H(x)[0])+log(H(x)[0]);
x - неопределенная переменная.

Если x - параметр функции F, то надо так:
Код:
double F(double* (*H)(double *), double *x)
{
    return log(H(x)[0])+log(H(x)[1]);
}

Если нет, его надо как-то по другому получить внутри функции F

 
 
 
 
Сообщение21.02.2009, 19:16 
хм

 
 
 
 
Сообщение21.02.2009, 19:19 
x параметр функции H.
хорошо тогда теперь так:
double *H(double *x){
double *h;
h=new double[2];
h[0]=1+x[0]+x[1];
h[1]=1+x[0]+x[1];
return h;
}
double F(double *(*H)(double *),double *x){
return log(H(x)[0])+log(H(x)[0]);
}

cout<<F(H(x),x);

cannot convert `double*' to `double*(*)(double*)' for argument `1' to `double F(double*(*)(double*), double*)'

что теперь писать в скобках у H, когда вызывается F?

 
 
 
 
Сообщение21.02.2009, 19:30 
Аватара пользователя
Код:
cout << F(H, x);


Почитали бы соответствующую главу Кернигана-Ритчи.

 
 
 
 
Сообщение21.02.2009, 19:32 
зачем обявлять вызов одной функции в обялении другой функции?
Помойму вам подойдет и такой вариант.
Код:
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;



double* H(double *x){
double h[2];
//h=new double[2];
h[0]=1+x[0]+x[1];
h[1]=h[0];
return h;
}
double F(double *x)
{
double* temp = H(x);
return log(temp[0])+log(temp[0]);
}

int main(int argc, char *argv[])
{
    double x[2];
    x[0] = 10;
    x[1] = 2;
    cout<<F(x);
    system("PAUSE");
    return EXIT_SUCCESS;
}

 
 
 
 
Сообщение21.02.2009, 19:32 
премного благодарен!

 
 
 
 
Сообщение21.02.2009, 19:33 
не понимаю зачем вам было выделять память,

 
 
 
 
Сообщение21.02.2009, 19:55 
Nerazumovskiy писал(а):
зачем обявлять вызов одной функции в обялении другой функции?
В объявлении функции F объявляется тип требуемой функции. Объявление F может быть и таким:
Код:
double F(double *(*G)(double *p), double *x)

Передача функции как параметра используется довольно часто. Например, callback-функции, оконные процедуры, функции-параметры для модулей минимизации и прочих численных методов.

 
 
 
 
Сообщение21.02.2009, 19:57 
Но ведь делается это более крисаиво.

 
 
 
 
Сообщение21.02.2009, 20:04 
функции-параметры для модулей минимизации и прочих численных методов.

вот для этого и надо было. мне кажется такая реализация удобней

 
 
 
 
Сообщение21.02.2009, 20:13 
ildmth писал(а):
вот для этого и надо было. мне кажется такая реализация удобней
Да, это стандартный прием.

 
 
 [ Сообщений: 12 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group