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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
maSt
 Аватар для maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
#1

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

22.11.2012, 12:33. Просмотров 299. Ответов 3
Метки нет (Все метки)

Всем доброе утро.
У меня есть вот такая функция.
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++ Можно ли утверждать, что в C++ имя функции - константный указатель на функцию ?
Можно ли передать указатель на функцию как параметр другой функции? C++
Быстрее ли вывов функции, переданной через параметр шаблона, чем через простой указатель на функцию? C++
Указатель на функцию с аргументами, как аргумент другой функции 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
1242 / 991 / 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     Указатель на функцию в вызове другой функции
Ответ Создать тему
Опции темы

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