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, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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