Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
32 / 25 / 12
Регистрация: 24.01.2011
Сообщений: 521
1

можно ли вернуть функцию?

02.03.2014, 00:25. Показов 818. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
можно ли как вернуть функцию? напистаь что-то типа этого, но чтобы работало?
#include <iostream>
using namespace std;

C++
1
2
3
4
5
6
7
8
9
10
11
12
int main (void)
{
        char c='y';
        while(c=='y'||c=='Y')
        {
            cout<<"Continue?(Y/N)"<<endl;
            cin>>c;
        }
 
 
  return float depo_1 (float a);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2014, 00:25
Ответы с готовыми решениями:

Вернуть указатель на функцию класса
Добрый день!! У меня есть класс, в котором есть указатель на функцию: class foo_1{ public: ...

Передать массив в функцию и вернуть из функции
Доброго времени суток. Пытаюсь считать из файлов числа и попарно их перемножить. Проблема в...

Вернуть значение из функции summa в функцию main
//Я только начал учить функции, и столкнулся с такой проблемой - //пример из учебника не...

Можно из функции вернуть статический массив?
Есть функция float calculation_Psi( float Psi_old, float Omega ){ Psi_old=0.221; return...

17
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
02.03.2014, 00:27 2
В данном случае лучше скажите чего Вы хотите добиться и зачем такое вообще нужно.
0
32 / 25 / 12
Регистрация: 24.01.2011
Сообщений: 521
02.03.2014, 00:32  [ТС] 3
нужно сделать чтобы при Y начинала работать функция, а при другом каком-нибудь выборе, просто выход из программы
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
02.03.2014, 00:42 4
C++
1
2
3
if ( *проверяем Y или нет* ) {
  *вызываем функцию*
}
1
32 / 25 / 12
Регистрация: 24.01.2011
Сообщений: 521
02.03.2014, 00:48  [ТС] 5
все просто))
0
1 / 1 / 2
Регистрация: 25.02.2014
Сообщений: 18
02.03.2014, 01:57 6
Может если очень надо передавать функцию, то просто вернуть указатель на нее?
0
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
02.03.2014, 04:03 7
Цитата Сообщение от HAIRY Посмотреть сообщение
можно ли вернуть функцию?
Нет.
C++
1
2
3
// typedef представляет собой тип функции
typedef int func( int*,int );
func ff( int ); // ошибка: тип возврата ff() - функция
0
32 / 25 / 12
Регистрация: 24.01.2011
Сообщений: 521
02.03.2014, 11:53  [ТС] 8
ну в общем написал я вот такое
C++
1
2
3
4
5
6
7
8
int quest(void)
{
        char c='y';
            if (c=='y'||c=='Y'){
            int main();
            }
  return 0;
}
и вот вызов
C++
1
2
3
4
else  
cout << "Continue?(Y/N)" << endl;
cin >> c;
int quest(c);
что бы я не нажимал программа закрывается, что не так?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.03.2014, 14:25 9
Цитата Сообщение от HAIRY Посмотреть сообщение
ну в общем написал я вот такое
Вы совершенно не понимаете то, что пишите. Путаете объявление функции и ее вызов.
C++
1
2
void f(int); // объявление функции, принимающей int и ничего не возвращающей
f(42); // вызов функции с параметром 42
Помимо этого функция должна быть где-то определена, т.е. иметь тело. Например:
C++
1
2
3
4
void f(int i) 
{
   std::cout << i << std::endl; // вывод числа на консоль
}
0
32 / 25 / 12
Регистрация: 24.01.2011
Сообщений: 521
02.03.2014, 14:35  [ТС] 10
вот сама функция, она обращается к другой, все нормально работает
C++
1
2
3
4
5
6
int main()
{
    float a;
    cin >> a;
    depo_1(a);
}
вот код в конце функции depo_1;
C++
1
2
3
4
5
6
7
8
9
10
else { 
        char c='y';
        cout<<"Continue?(Y/N)"<<endl;
        cin>>c;
        if(c=='y'||c=='Y')
        {
                           cout<<"XXX"<<endl;
            int main();
        }
}
при нажатии Y текст выводится, но функция не срабатывает мне в int main() не надо ничего передавать, мне надо просто, чтобы она опять сработала
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
02.03.2014, 14:42 11
Цитата Сообщение от HAIRY Посмотреть сообщение
нужно сделать чтобы при Y начинала работать функция, а при другом каком-нибудь выборе, просто выход из программы
А зачем спрашиваешь про возврат функции? Предположим, так можно. Но если ты так и сделаешь, то функция не будет вызвана в любом случае, для её выполнения надо её вызвать в той программе/подпрограмме, куда ты возвращаешь. Вернул значение-функцию, в другом месте получил и полученное значение вызвал. Но даже это не решит проблему, так так если реализовать такой вариант, то возвращаемая функция будет вызываться всегда. Сначала надо понять смысл собственных действий, а потом спрашивать, как их осуществить.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.03.2014, 14:44 12
Цитата Сообщение от HAIRY Посмотреть сообщение
чтобы она опять сработала
Вызывать main() вручную запрещено стандартом.
Если нужно повторить какие-то действия, используйте цикл. Например:
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
#include <iostream>
using namespace std;
     
void depo_1(float a)
{
    cout << a*2 << endl;    
}
     
int main() {
     
    bool repeat = true;
     
    while( repeat )
    {
        float a;
        cin >> a;
        depo_1(a);
        char c='y';
        cout<<"Continue?(Y/N)"<<endl;
        cin>>c;
        repeat = c=='y'||c=='Y';
    }
     
    return 0;
}
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
02.03.2014, 14:51 13
Цитата Сообщение от HAIRY Посмотреть сообщение
при нажатии Y текст выводится, но функция не срабатывает мне в int main() не надо ничего передавать, мне надо просто, чтобы она опять сработала
Даже если предположить, что main можно вызывать самому, рекурсия, в том числе, косвенная рекурсия бесконечна, если нет условия, при выполнении которого функция отработает не рекурсивно, а оно неизбежно учитывает параметр функции. Пусть ты запихал условие в depo_1, но но из функции main сама depo_1 вызовется с теми же значениями всех параметров, так как функция main не может получить ни какой информации о необходимости их изменения. Поэтому при косвенной рекурсии параметры должны иметь все косвенно-рекурсивные функции.
0
32 / 25 / 12
Регистрация: 24.01.2011
Сообщений: 521
02.03.2014, 14:52  [ТС] 14
в общем, что нужно сделать в функции depo_1(), есть if-else, при if все работает нормально, а при else должно вывести сообщение, задать вопрос и если ответ положительный опять должна начать работать функция depo_1(), но в else ее нельзя вызвать, так как аргумент она получает в int main().
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
02.03.2014, 14:54 15
Цитата Сообщение от HAIRY Посмотреть сообщение
положительный опять должна начать работать функция depo_1(), но в else ее нельзя вызвать, так как аргумент она получает в int main().
Во-первых не путай функциональную парадигму с процедурной. А во-вторых вызовы друг на друга не влияют.
0
32 / 25 / 12
Регистрация: 24.01.2011
Сообщений: 521
02.03.2014, 15:09  [ТС] 16
если честно я вас не пойму((
в общем попробую объяснить так
вот 1 функция
int main()
C++
1
2
3
4
5
{
    float a;
    cin >> a;
    depo_1(a);
}
передает a в depo_1().
вот функция depo_1() образно
float depo_1(float a)
C++
1
2
3
4
5
6
7
8
9
{
    if (если число подходит) { 
        выполняется
    } else {если нет, выводится причина, и задается вопрос, типа "Вести подходящее число"
       а для этого надо вернуться в int main(). Можно сделать цикл в int main, но у меня будет 4 функции.
с похожими условиями и надо будет в случае не правильного ввода, спрашивать в каждой функции.
    }
    return 0;
}
ну в общем вот так(ну понятно дело, что я ток начал пытаться программировать и если пишу что-то непонятное или не логичное,не надо меня пинать)
а и еще, 4 функции сразу не будут работать, пользователя нужно будет выбрать только одну.
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
02.03.2014, 15:14 17
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void depo_1(float);
int main()
{
     char c;
     cin>>c;
    while(c!='y' && c!='Y')
    {
            float a=0.5;
            depo_1(a);
            cout<<"Continue?(Y/N)"<<endl;
            cin>>c;
    }    
}
void depo_1(float y)
{
    cout<<"a="<<a<<endl;
}
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
02.03.2014, 15:24 18
Цитата Сообщение от HAIRY Посмотреть сообщение
если честно я вас не пойму((
в общем попробую объяснить так
Кого ты понять не можешь, так это ты сам.
0
02.03.2014, 15:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2014, 15:24
Помогаю со студенческими работами здесь

Как передать двойной указатель в функцию и вернуть его
Как передать двойной указатель в функция и вернуть его? В данном случае выдает ошибку :error...

Вернуть значения локальных переменных подпрограммы в вызывающую функцию
Как перенести значения ma,mb,mc в функцию main? #include &quot;pch.h&quot; #include &lt;iostream&gt; #include...

Как вернуть экземпляр класса через шаблонную функцию
Вот программа, два класса и функция main #pragma once class BaseClass { public:...

Вернуть из функции значение; при этом прервать саму функцию
Всех приветствую! Прощу прощения за глупый вопрос, но не знаю на него ответа. Требуется вернуть из...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru