Satiata
@Satiata

Перенести текст в переменную для использования в функции?

Есть программа для расчета интегралов (не суть). Я ввожу в разные поля различные данные и она по определенному алгоритму должена считать мне ответ.
Ну и вот. Первые три значения он считывает нормально, потому что это числа (первые два типа дабл и третья инт).
В четвертое же окошечко я ввожу интегрируемое выражение. Т.е. по сути это кусок текста, который в определенном месте должен вставиться в одну из функций и дальше пойдет вся считалка. Внимание вопрос: как и куда можно записать это? Пока что это имеет вид:
x = Convert::ToDouble(intText->Text);
но, конечно же, не работает, потому что это в корне неправильно. Т.к., по сути, вылазит до функции, где она используется. Использовала я эту переменную так.
Есть функция, которая имеет вид
double f (double x1)
{
return x1;
}

Т.е. я вызываю ее F = f(x), тем самым передавая в нее значение.
Но! Этого, конечно, не происходит, потому что выражение, даже самое простое, в переменную у меня в самом начале не записывается (программа останавливает выполнение и переменные, начиная от этой самой x равны нулю)

Общий вид кода такой:
private: System::Void otvetButton_Click(System::Object^  sender, System::EventArgs^  e) {

				 double a, b, h, I, F, x;
				 int n;

					 a = Convert::ToDouble(aPredelText->Text);
					 b = Convert::ToDouble(bPredelText->Text);
					 n = Convert::ToInt32(nText->Text);
					 x = Convert::ToDouble(intText->Text);

					 F = f(x);
					 I = Integr(a, b, n);

					 otvet->Text = I.ToString("n");

			 }


Где f и Integral - написанные в отдельных файлах функции.

Отсюда вопрос: как надо считать переменную и в каком месте, чтобы все было хорошо и выполнение алгоритма продолжило ход?
  • Вопрос задан
  • 2362 просмотра
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Хороший вариант: Вам нужно вашу подинтегральную функцию откомпилировать, а потом динамически скомпоновать с вашей программой:

  1. из вашей переменной составляете исходник на C путем конкатенации
  2. вызываете компилятор C
  3. вызываете компоновщик, получаете динамически подключаемую библиотеку с вашей подинтегральной функцией
  4. загружаете библиотеку, подключаете функцию к вашей программе
  5. считаете интеграл


То же самое, только в профиль - взять OpenCL. Тогда вся работа по компиляции ядра и компоновке будет от вас скрыта, да и вычисления можно будет проделать на GPU

Плохой вариант: написать собственный интерпретатор математических функций (воспользовавшись алгоритмом сортировочной станции). Это будет дикий тормоз.

Третий вариант - выкинуть вашу программу на помойку и считать в Maxima, Maple, Octave и других умных программах. Хотя это тоже медленно.

И да, каким велосипедом вы считаете интеграл? Потому как редко когда самопальный интегратор может соревноваться с GSL.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы