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

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

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

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

22.11.2012, 12:33. Просмотров 315. Ответов 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++
У меня есть некая функция, которая принимает как аргумент другую функцию typedef void(*func_type)(); start(func_type...

Можно ли передать указатель на функцию как параметр другой функции? - C++
В общем, вопрос. Можно ли, допустим ... int fun1(int x) { ... ... ... return x*1000; }

Не обязательно разыменовывать указатель на функцию при вызове? - C++
Здравствуйте. Вот такой вопрос. void estimate(int lines, double (*pf) (int)); //прототип // ... void estimate(int lines, double...

Получить указатель из функции и использовать его в другой функции - C++
Подскажите пожалуйста как из функции использовать в функции main указатель? пример void foo1() {u=sizeof(str1); int *l=&amp;u; } ...

Работа с файлом (передать указатель на файл в функцию, вернуть указатель на файл из функции) - C++
Подскажите как передать указатель на файл в функцию, как вернуть указатель на файл из функции. void Open() // из этой функции вернуть...

Шаблоны функции и указатель на функцию передаваемый в функцию - C++
Привет! Вопрос такой: Если я пишу сортировку, например, bubbleSort и хочу помимо массива и его размера передать ещё и указатель на функцию,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.11.2012, 13:04 #2
Опиши тип указателя на функцию, а в заголовке второй функции декларируй параметр этого типа.
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
~ Эврика! ~
1243 / 992 / 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2012, 18:22
Привет! Вот еще темы с ответами:

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив) - C++
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая как параметр получает указатель на...

Передача массива другой функции через указатель - C++
Сейчас я изучаю функции и выполняю упражнение по работе с массивом. Задача такая: занести числа в массив, сделать обратный порядок...

Указатель на функцию в качестве параметра функции - C++
ln(1-x)+sinx необходимо создать программу демонстрирующую возможность использования указателя на некоторую функцию в качестве параметра...

Как передать функции указатель на функцию в качестве аргумента? - C++
как передать функции указатель на функцию в качестве аргумента?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.11.2012, 18:22
Ответ Создать тему
Опции темы

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