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

Применение переменных одной функции в другой функции - C++

Восстановить пароль Регистрация
 
VВладимир
1 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 50
08.12.2013, 20:43     Применение переменных одной функции в другой функции #1
Здравствуйте. Помогите, пожалуйста, решить такую проблему. Мне необходимо, чтобы 4 переменных, которые рассчитываются в одной функции, были бы видны в другой функции. Из экспериментов я понял, что вторая функция может корректно "видеть" только те переменные, которые были возвращены с помощью оператора return в первой функции. Но в функции может быть возвращена только одна переменная, а мне надо 4 - чтобы другая функция их "видела". Можно, конечно, разбить одну функцию на 4 и в каждой вернуть по переменной, а потом использовать их в другой функции. Но, как я понял, есть другие способы. Это применение меток, указателей, объединение переменных в массив - но для меня это пока непонятно. Подскажите, пожалуйста, как можно несколько переменных из одной функции использовать в другой функции. Заранее благодарен.
Выкладываю код, в котором я пытался объединить переменные в массив и затем вернуть его. Но, к сожаление, происходит корректно возврат только первого элемента массива.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
float functionWeight( float x111, float x112,
{//Начало 1 функции
//Формулы и вычисления
//Вычисление параметров, передаваемых в другую функцию
S31=x311*w311+x321*w321+x331*w331+x341*w341;
S32=x312*w312+x322*w322+x332*w332+x342*w342;
S33=x313*w313+x323*w323+x333*w333+x343*w343;
S34=x314*w314+x324*w324+x334*w334+x344*w344;
 
float mas1 [4];//Объединение переменных в массив
 {mas1 [0]=S31;
 mas1 [1]=S32;
 mas1 [2]=S33;
 mas1 [3]=S34;
}
 
return (mas1 [0],  mas1 [1], mas1 [2], mas1 [3]);//Попытка возврата массива
}//Конец 1 функции
 
 
float functionPrognoz(float y31, float y32,.....)
 
{//Начало 2 функции
S31 = mas1 [0];
 S32 = mas1 [1];
 S33 = mas1 [2];
 S34 = mas1 [3];
 
y31=6388*(-0.5+1 / (1 + exp(-1 *alpha *S31)));    
y32=300*(-0.5+1 / (1 + exp(-1 *alpha *S32)));    
y33=1387*(-0.5+1 / (1 + exp(-1 *alpha *S33)));    
y34=800*(-0.5+1 / (1 + exp(-1 *alpha *S34))); 
 
 
Y2 = y31+ y32+ y33 + y34; 
 
return Y2;
}//Конец 2 функции
 
 
int main()
{float Y2;
float mas1;
 
float valueY2 = functionPrognoz(y31, y32, y33, y34, alpha, Y2);//Вызов функции в теле главной функции
 
cout <<valueY2<< endl;
 
 system("pause");  
 return 0;
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2013, 20:43     Применение переменных одной функции в другой функции
Посмотрите здесь:

Применение const в функции C++
C++ можно ли в с++ вызвать переменную из одной функции в другую т.е. мы переменну задали в одной функции а использовали в другой... и как это реализовать?
Как сделать так чтобы переменная в описании одной функции была доступна в описании другой? C++
использование массива из функции в другой функции C++
C++ Получить указатель из функции и использовать его в другой функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
08.12.2013, 20:46     Применение переменных одной функции в другой функции #2
подойдут глобальные переменные.Можно передавать переменные эти из одной функции в другую в качестве параметров(по значению или ссылочно).Можно и в массив загнать, а потом массив передать
Alex5
881 / 616 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
08.12.2013, 21:27     Применение переменных одной функции в другой функции #3
Цитата Сообщение от VВладимир Посмотреть сообщение
float functionWeight( float x111, float x112,
Можно использовать массив в качестве параметра функции.
C++
1
2
3
4
5
6
7
8
9
10
11
const int MAX = 100;
void functionWeight( float mas[MAX], int& n, float x111, float x112 )
{
    // ...
    n = 4;
    mas[0]=31;
    mas[1]=32;
    mas[2]=33;
    mas[3]=34;
    return;
}
Вызов функции:
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
    float a[MAX] = {};
    int k=0;
    functionWeight( a, k, 123, 456 );
    for( int i=0; i<k; ++i )
        cout << "  " << a[i] << endl;
 
    return 0;
}
VВладимир
1 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 50
08.12.2013, 21:47  [ТС]     Применение переменных одной функции в другой функции #4
К сожалению, с массивом ничего не получилось - приводил его в первом примере.
Для передачи требуемых параметров в качестве параметров функции ввел новую функцию
C++
1
2
3
float functionTransmisson1(float S31, float S32, float S33, float S34, float alpha)
{S31;S32;S33;S34;alpha;
}
Затем вызвал ее в теле функции functionPrognoz

Получилось в теле функции functionPrognoz
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
float functionPrognoz(float y31, float y32, float y33, float y34, float alpha, float Y2)
{ 
 alpha = 0.5;
S31, S32, S33, S34, alpha = functionTransmisson1(S31, S32, S33, S34, alpha);
 
y31=6388*(-0.5+1 / (1 + exp(-1 *alpha *S31)));    
y32=300*(-0.5+1 / (1 + exp(-1 *alpha *S32)));    
y33=1387*(-0.5+1 / (1 + exp(-1 *alpha *S33)));    
y34=800*(-0.5+1 / (1 + exp(-1 *alpha *S34))); 
 
 
Y2 = y31 + y32+ y33 + y34; 
 
 
return Y2;
}
Но результат получился нереальный какой-то.

При передаче значений функции поссылочно получилось выражение при описании функции functionPrognoz
C++
1
float functionPrognoz(float &S31, float &S32, float &S33, float &S34, float y31, float y32, float y33, float y34, float alpha, float Y2)
Однако результат получился вообще нулевой. Что-то я неправильно делаю, чего-то еще недопонимаю

Добавлено через 20 минут
Спасибо, Alex 5 - похоже, то, что Вы предложили, работает.
Yandex
Объявления
08.12.2013, 21:47     Применение переменных одной функции в другой функции
Ответ Создать тему
Опции темы

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