![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Вычисление функции нескольких переменных в диапазоне и сохранение результатов в список в Delphi/PascalDelphi , Синтаксис , ЦиклыВозникла задача вычислить функцию нескольких переменных в заданном диапазоне и сохранить результаты в список. Например, для функции трех переменных
Конечно, можно программно реализовать это и для большего количества переменных (например, 20), но это станет очень громоздким, и поскольку всё жестко кодируется, невозможно изменить количество переменных во время выполнения. Как лучше всего это сделать? Ответ: Для поддержки произвольного количества аргументов лучше всего работать с массивами переменной длины, а не с аргументами. Это потому, что язык не имеет хорошей поддержки списков переменной длины аргументов. После того, как все аргументы упакованы в массив, перед вами стоит задача сгенерировать все возможные комбинации. Это не простая задача. Я покажу вам, как это сделать с каждым измерением, которое является целым значением в диапазоне от 0 до N[i]-1, где i - индекс измерения. Как только вы сможете перебирать все такие комбинации, вы можете легко расширить это для генерации ваших действительных значений. Основная идея состоит в том, чтобы поддерживать текущее значение итерации, которое инкрементируется. Первое измерение является самым внутренним циклом. Когда оно достигает своего максимального значения, оно возвращается к нулю, и следующее внешнее измерение инкрементируется. И так далее. Вот пример кода: ```pascal {$APPTYPE CONSOLE} uses System.SysUtils; procedure IterMultiDim(const N: array of Integer; const Proc: TProc Задача состоит в том, чтобы вычислить функцию нескольких переменных в заданном диапазоне и сохранить результаты в список в Delphi/Pascal. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |