Форум программистов, компьютерный форум CyberForum.ru

Указатель на функцию в вызове другой функции - C++

Восстановить пароль Регистрация
 
maSt
 Аватар для maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
22.11.2012, 12:33     Указатель на функцию в вызове другой функции #1
Всем доброе утро.
У меня есть вот такая функция.
C++
1
double f(double x) { return x*x; }
И мне нужно найти медиану в квадрате. Что я делаю вот так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int mediana(unsigned int n,double *t,double f(double x))
{
    if (n == 0)
    {
        return 0;
    }
    int tmp;
    for (int i = 1, j; i < n; ++i) 
    {
        tmp = t[i]; 
        for (j = i - 1; j >= 0 && t[j] > tmp; --j) 
            t[j + 1] = t[j];   
        t[j + 1] = tmp;    
    }
    if (n%2==0)
    {
        return (f(t[n/2-1])+ f(t[n/2]))/2;
    }
    if (n%2!=0)
    {
        return f(t[n/2]);
    }
}
Но по заданию, вместо double f(double x) в вызове функции должен быть указатель на функцию типа double и значения типа double.
Но как я не пытаюсь вставить туда указатель, постоянно выдает ошибку объявления. Как это можно изменить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2012, 12:33     Указатель на функцию в вызове другой функции
Посмотрите здесь:

C++ В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель
C++ Получить указатель из функции и использовать его в другой функции
Работа с файлом (передать указатель на файл в функцию, вернуть указатель на файл из функции) C++
Как передать функции указатель на функцию в качестве аргумента? C++
C++ Не обязательно разыменовывать указатель на функцию при вызове?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.11.2012, 13:04     Указатель на функцию в вызове другой функции #2
Опиши тип указателя на функцию, а в заголовке второй функции декларируй параметр этого типа.
maSt
 Аватар для maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
22.11.2012, 18:02  [ТС]     Указатель на функцию в вызове другой функции #3
Спасибо , уже работает.
Но появился другой вопрос.
Есть функция с изменяемым количеством параметров.
Но данные подаются в таком виде cout << zona(2,4.,.5,2.,.25,1.) << endl;
То есть 4.0 , 0,5 ,2.0 ,0.25
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int zona(unsigned int n,...)
{
    unsigned int *p= &n;
    double l=0.0,m=1.0;
    for (int i = 0; i!=n;i++)
    {
    //  cout << "m= " << m << endl;
        m  =m - *(p+i+1);
        if (((*p+i+1)<1) &((*p+i+1)>=0) &(m>0))
        {
            l += *(p+i)**(p+i+1);
            cout << "l= " << l << endl;
        }
        else
        {
            cout << "Ошибочные данные\n";
            return 0;
        }
    }
 
    return (l-*(p+1+n+1)*m);
 
 
}
такое решение всегда выводит "Ошибочные данные", как считать эту строку чтобы программа нормально работала?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
22.11.2012, 18:22     Указатель на функцию в вызове другой функции #4
Обращаться к таким аргументам правильно, с помощью va_list. Компилятор волен их размещать в любом порядке. Вдруг он их в другом порядке разместит, а не от младших адресов к старшим.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <cstdarg>
 
int zona(unsigned int n, ...)
{
    // инициализировать
    va_list args;
    va_start(args, n);
 
    double l = 0.0, m = 1.0;
    double prev, next;
    next = n;
    for (int i = 0; i != n; i++)
    {
        prev = next;
        next = va_arg(args, double); // вытянуть следующий аргумент как значение типа double
        m = m - next;
        if ((next < 1) && (next >= 0) && (m > 0))
        {
            l += prev * next;
            cout << "l= " << l << endl;
        }
        else
        {
            cout << "Ошибочные данные\n";
            return 0;
        }
    }
    double result = (l - va_arg(args, double) * m);
    va_end(args);
    return result;
}
Yandex
Объявления
22.11.2012, 18:22     Указатель на функцию в вызове другой функции
Ответ Создать тему
Опции темы

Текущее время: 04:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru