Programming Taskbook 0
Download 1.62 Mb. Pdf ko'rish
|
Abramyan-Pascal2016-1
- Bu sahifa navigatsiya:
- Array1
- Array1 ); // Вариант 1a
- Array1 ); // Вариант 2
[; from: integer]): array of T
34 function ArrGen(count: integer; first: T; next: T -> T): array of T function ArrGen(count: integer; first, second: T; next: (T,T) -> T): array of T Как уже было отмечено, первый параметр определяет размер массива. Если вторым параметром является лямбда-выражение f типа integer -> T, то в массив последовательно записываются значения f(i), начиная от i, равного параметру from. Если параметр from не указан, то он полагается равным 0; в этом случае значение f(i) записывается в элемент массива с индексом i. Данный вариант функции ArrGen удобно использовать, если имеется явная формула, определяющая значение элемента по его индексу. В качестве примера использования данного варианта функции ArrGen приведем решение задачи Array1, в которой требуется сформировать мас- сив, состоящий из n первых положительных нечетных чисел (1, 3, 5, …): Task('Array1'); // Вариант 1 var a := ArrGen(ReadInteger, i -> 2 * i + 1); a.Write; Для вывода полученного массива мы использовали вспомогательный метод Write из модуля PT4. Поскольку метод Write можно применить к массиву сразу после его создания, в решении можно обойтись без пере- менной a: Task('Array1'); // Вариант 1a ArrGen(ReadInteger, i -> 2 * i + 1).Write; Разумеется после выполнения данного оператора мы потеряем связь с созданным массивом, однако на правильность решения это не повлияет. Обратимся к другим вариантам функции ArrGen. Эти варианты удобны в ситуациях, когда для определения значений элементов массива исполь- зуются не явные, а рекуррентные формулы, т. е. выражения, в которых значение очередного элемента определяется через значение одного или не- скольких предыдущих элементов. При этом надо явно определить значения соответствующего количества начальных элементов массива. Функция ArrGen позволяет использовать рекуррентные соотношения с одним или двумя параметрами. Иными словами, с ее помощью можно создавать мас- сивы, в которых каждый последующий элемент определяется по одному или двум предыдущим элементам. Рекуррентная формула указывается в виде лямбда-выражения next и является последним параметром функции. Перед ней указывается один или два параметра, задающие значения начальных элементов массива. Используя рекуррентное соотношение, мы можем запрограммировать решение задачи Array1, не содержащее операции умножения: Task('Array1'); // Вариант 2 ArrGen(ReadInteger, 1, e -> e + 2).Print; |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling