Programming Taskbook 0


Download 1.62 Mb.
Pdf ko'rish
bet17/71
Sana21.06.2023
Hajmi1.62 Mb.
#1644761
TuriУчебное пособие
1   ...   13   14   15   16   17   18   19   20   ...   71
Bog'liq
Abramyan-Pascal2016-1

[; from: integer]): array of T 


34 
function ArrGen(count:
integer;
first:
T;
next:
T
->
T):
array
of

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; 


Download 1.62 Mb.

Do'stlaringiz bilan baham:
1   ...   13   14   15   16   17   18   19   20   ...   71




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling