2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 С++
Сообщение21.02.2009, 19:02 


29/11/08
55
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 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Компилятор сообщает о том, что в строчке
Код:
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 


23/12/08
245
Украина
хм

 Профиль  
                  
 
 
Сообщение21.02.2009, 19:19 


29/11/08
55
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 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Код:
cout << F(H, x);


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

 Профиль  
                  
 
 
Сообщение21.02.2009, 19:32 


23/12/08
245
Украина
зачем обявлять вызов одной функции в обялении другой функции?
Помойму вам подойдет и такой вариант.
Код:
#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 


29/11/08
55
премного благодарен!

 Профиль  
                  
 
 
Сообщение21.02.2009, 19:33 


23/12/08
245
Украина
не понимаю зачем вам было выделять память,

 Профиль  
                  
 
 
Сообщение21.02.2009, 19:55 
Заслуженный участник


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

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

 Профиль  
                  
 
 
Сообщение21.02.2009, 19:57 


23/12/08
245
Украина
Но ведь делается это более крисаиво.

 Профиль  
                  
 
 
Сообщение21.02.2009, 20:04 


29/11/08
55
функции-параметры для модулей минимизации и прочих численных методов.

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

 Профиль  
                  
 
 
Сообщение21.02.2009, 20:13 
Заслуженный участник


15/05/05
3445
USA
ildmth писал(а):
вот для этого и надо было. мне кажется такая реализация удобней
Да, это стандартный прием.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Missir


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group