Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.87/55: Рейтинг темы: голосов - 55, средняя оценка - 4.87
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583

Как данные одной функции использовать в другой?

08.02.2019, 00:02. Показов 11995. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как сделать так, что бы мои значения, которые посчитаны с помощью одной функции, вызвать в другой ?
у меня посчитаны у0,у1,у2,у3. как все эти значения вызвать в функции для нахождения другой переменной ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2019, 00:02
Ответы с готовыми решениями:

можно ли в с++ вызвать переменную из одной функции в другую т.е. мы переменну задали в одной функции а использовали в другой... и как это реализовать?
можно ли в с++ вызвать переменную из одной функции в другую т.е. мы переменну задали в одной функции а использовали в другой... и как это...

Как передавать данные от одной программы к другой?
Искал темы похожие, не нашел, простите если не туда. Такая задача: написать 2 программы. Первая спрашивает пользователя название файла...

Как создать вызов одной функции из другой?
Задание. Создать произвольный класс, объявить несколько функций с применением оператора разрешения области видимости "::"....

32
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
08.02.2019, 01:30
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ElKros Посмотреть сообщение
это при запуске программы. с определенного момента у меня сумма больше не меняется, а решения y0,...,y3 продолжает считать
наверно входящие данные становятся малы и сумма незначительно меняется, точно сказать не могу, у тебя код слишком большой, и ночь на дворе
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
08.02.2019, 01:33  [ТС]
Yetty, да, мне нужен квадрат разности.
знак суммы в условии ? сумма по k от 0 до n и под знаком суммы квадрат разности. как я поняла, то на каждом шаге я считаю квадрат разницы и затем суммирую с предыдущим значением. это я и пыталась сделать в функции для нахождения суммы. или я не совсем правильно поняла ваш вопрос ?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.02.2019, 02:00
ElKros, я не вникал в Ваш код. просто обратите внимание, что в примере (j1-j2)2 - величина постоянная.
вот вызов первой функции во второй функции:
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
#include <iostream>
using namespace std;
 
double J1 (double* y, const int n)
{   
    double j1;
    j1=10*y[0]+11*y[2]*8*y[1];
    return j1;
}
 
double J2 (double* y, const int n)
{
    double j2;
    j2=0.1*J1(y,n);
    return j2;
}
 
int main()
{
    const int n=3;
    double y[n] = {1.0,2.0,3.0};    
    
    cout << J2(y,n) << "\n";
    
system("pause");
return 0;
}
если такой вариант не устроит, можно функцию передать параметром
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
08.02.2019, 02:08  [ТС]
Yetty, у меня функция, которая считает решение системы и из нее мне нужно вытянуть решения y-ков. которые пересчитываются на каждой итерации, в функции j1, j2 для нахождения функции f

Добавлено через 2 минуты
Yetty, j1(t), j2(t)
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.02.2019, 02:35
ElKros,
Цитата Сообщение от ElKros Посмотреть сообщение
у меня функция, которая считает решение системы и из нее мне нужно вытянуть решения y-ков. которые пересчитываются на каждой итерации, в функции j1, j2 для нахождения функции f
с такими формулировками непонятно что Вам нужно. можете написать систему из 2 уравнений и сообщить что с ней делать ?
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
08.02.2019, 02:42  [ТС]
Yetty,
Система dy/dt:
y0-10y1
y1×y0
Я нашла ее решение у0 и у1 на интервале от 0 до 2 с шагом 0.2
Теперь эти значения мне нужно использовать в функции для нахождения j1=7у1+2у0/у1, ,j2=(7у1+2у0/у1)*0.1
После чего с помощью значений j1,j2 найти сумму квадрата разности
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.02.2019, 02:56
ElKros, так выше как раз такой код. только вывода квадрата разницы нет - добавьте 24 строкой
C++
1
cout << (J1(y,n)-J2(y,n))*(J1(y,n)-J2(y,n)) << "\n";
что в этом коде не подходит ? и какую сумму нужно найти ?
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
08.02.2019, 02:59  [ТС]
Yetty, у меня итераций не n. Это придется писать как (end-start)/step
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.02.2019, 03:07
ElKros, где Вы заметили итерации ? n - это количество значений. в коде 3 значения y[0], y[1], y[2]
допишите Вашу задачу:
j1 = 10y[0]+11y[2]*8y[1]
j2 = (10y[0]+11y[2]*8y[1])*0.1

ещё раз: чем не устраивает код ? что нужно сделать ?
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
08.02.2019, 13:39  [ТС]
Yetty, так разве просчитается вся сумма ?

Добавлено через 4 часа 31 минуту
Yetty, и на каждой итерации у меня новые значения у-ков
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
12.02.2019, 00:51  [ТС]
_stanislav, подскажите, пожалуйста, я написала метод
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
double function_optimiz(double alpha) {
    double y[N];
    y[0] = 10e-10, y[1] = 0.0, y[2] = 0.0, y[3] = 0.0;
    double t0 = 0.0, max_t = 5.73e-08, h = 1e-10;
    double t = t0;
    double sum = 0;
 
    for(t = t0; t <= max_t; t += h) {
 
        rosenbrock(y, t0, max_t, h, alpha);
        std::cout << t << "\t" << std::setprecision(5) << y[0] << "\t" << y[1] << "\t" << y[2] << "\t" << y[3] << std::endl;
 
        sum += (j_0(y) - j_1(y))*(j_0(y) - j_1(y));
        cout << "sum: " << sum << "\n";
 
    }
    return sum;
}
void Gold(double a, double b, double e, double alpha) {
    long nIter = 1;
 
    double t = (std::sqrt(5) - 1)*0.5;
    double x1 = b - t * (b - a);
    double x2 = a + t * (b - a);
 
    double h1, h2;
 
    while (e <= fabs(b - a)) {
        std::cout << "\t**\t Iteration: " << (nIter++) << " \t **" << std::endl;
        std::cout << std::setprecision(4) << "[ a ; b ]: [ " << a << " ; " << b << " ]\t" << " ALPHA_1: " << x1 << "\tALPHA_2: " << x2 << std::endl;
        h2 = function_optimiz(x2);
        h1 = function_optimiz(x1);
        if (h2 < h1) a = x1;
        else b = x2;
 
        x1 = b - t * (b - a);
        x2 = a + t * (b - a);
 
    }
 
    std::cout << "\t**\t Iteration: " << (nIter++) << " \t **" << std::endl;
    std::cout << std::setprecision(4) << "[ a ; b ]: [ " << a << " ; " << b << " ]\t" << " ALPHA_1: " << x1 << "\tALPHA_2: " << x2 << std::endl;
 
    std::cout << "\n\t**\t Result \t **";
    std::cout << "\nALPHA_min =  " << (alpha = (a + b) / 2);
 
}
как можно переписать для моей задачи вот этот метод ?
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
void descent_method(func_ptr f, double* vars, double eps, int max_steps_count)
{
double B = f(vars), A = 0; // значение целевой функции на текущей и пердидущей итерациях
bool was_counted = false; // был ли определен минимум за максимально допустимое количество итераций
int stpes_ellapsed = 0; // количество итераций, затраченных на поиск минимума (статистическая информация)
double delta = 0.0; // полученная погрешность (статистическая информация)
for(int i = 0; i < max_steps_count; i++){
A = B; // предыдущее значение целевой функции
 
for(int var_index = 0; var_index < var_count; var_index++) // проходим по каждому аргументу целевой функции
vars[var_index] = Gold(f, vars, var_index, eps, -5000, 5000, max_steps_count); // и находим минимум одномерной функции по этой пе
 
B = f(vars); // текущее значение целевой функции
 
delta = fabs(A - B);
 
if(delta <= eps)
{
stpes_ellapsed = i + 1;
was_counted = true;
break;
}
}
 
std::cout << "Результат поиска минимума функции " << "<тут пишем функцию>" << std::endl;
 
if(!was_counted)
std::cout << "За максимально указанное количество шагов ( " << max_steps_count << " ) минимум не был посчитан." << std::endl;
else {
std::cout << "Количество итераций: " << stpes_ellapsed << std::endl;
std::cout << "Погрешность: " << delta << std::endl;
}
 
std::cout << "Точка: X(";
for(int i = 0; i < var_count; i++){
std::cout << vars[i] << ", ";
 
}
 
std::cout << "\b\b" << ")" << std::endl;
std::cout << "Значение функции f(X): " << std::setprecision(10) << f(vars) << std::endl;
}
или их нельзя связать ?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
12.02.2019, 07:12
ElKros, я не знаю, у тебя тут чистая математика, за 5 минут не въехать. попробуй напиши, что должна делать каждая функция, подержим тему наверху, может кто и поможет.
0
5 / 4 / 1
Регистрация: 14.02.2018
Сообщений: 583
12.02.2019, 13:49  [ТС]
_stanislav,
http://www.machinelearning.ru/... 0%BA%D0%B0

Добавлено через 1 минуту
_stanislav, по рекомендации из этого сайта я реализовала метод золотого сечения, но вот спуск пока не удается...

Добавлено через 3 часа 40 минут
_stanislav, помогите мне пожалуйста тот код переписать под мою программу, очень нужно...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.02.2019, 13:49

Как вывести число с одной функции в другой?
#include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;windows.h&gt; using namespace std; int Best(); int main() ...

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

Считать данные из файла от одной строки до другой
Всем привет. Задача такая: есть текстовый файл, в котором существует двумерный массив, записано все в файле так Step number= 1 ...

Применение переменных одной функции в другой функции
Здравствуйте. Помогите, пожалуйста, решить такую проблему. Мне необходимо, чтобы 4 переменных, которые рассчитываются в одной функции, были...

Как сделать так чтобы переменная в описании одной функции была доступна в описании другой?
Как сделать так чтобы переменная в описании одной функции была доступна в описании другой? Заранее спасибо.


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru