Programming Taskbook 0


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


Глава 3. Массивы и последовательности 
35 
Классическим примером последовательности, в которой элемент 
определяется по двум предыдущим, является последовательность Фибо-
наччи. В ней два первых элемента равны 1, а следующие равны сумме двух 
предыдущих: 1, 1, 2, 3, 5, 8, 13, 21, 34 и т. д. В задаче Array5 требуется 
сформировать и вывести массив, содержащий n первых чисел Фибоначчи. 
С использованием последнего варианта функции ArrGen эта задача также 
решается в одну строку: 
Task('Array5'); // Вариант 1 
ArrGen(ReadInteger, 1, 1, (e1, e2) -> e1 + e2).Print; 
При программировании рекуррентной формулы с двумя параметрами 
надо учитывать, что ближайшим соседом к формируемому элементу счи-
тается второй параметр e2 лямбда-выражения; иными словами, если через 
е3 обозначить значение вычисляемого элемента, то порядок значений в 
массиве будет следующим: e1, e2, e3. 
Завершая обзор средств формирования массивов, отметим две допол-
нительные возможности. Во-первых, в массив можно превратить любой 
набор однотипных значений, указав эти значения в качестве параметров 
функции Arr (количество параметров может быть произвольным): 
var a := Arr(1, 10, 2, 9, 3, 8); 
При выполнении этого оператора мы получим массив a из 6 указан-
ных целых чисел (располагающихся в массиве в том же порядке). Вызов 
Arr(x) формирует одноэлементный массив, единственный элемент которого 
имеет значение x (в некоторых ситуациях требуется использовать одно-
элементные массивы, и указанный вызов является простейшим способом 
создать такой массив). Функция Arr входит в группу так называемых ко-
ротких функций (названных так из-за краткости их имен), позволяющих 
быстро сформировать различные структуры с требуемыми значениями. 
Другие примеры коротких функций приводятся в п. 3.4 и 4.6. 
Второй возможностью, оказывающейся полезной, в частности, при те-
стировании программ, является создание числовых массивов, заполненных 
случайными значениями. Для этого предназначены функции ArrRandomInte-
ger (имеет краткий синоним ArrRandom) и ArrRandomReal: 
function ArrRandomInteger(n: integer := 10; a: integer := 0;
b: integer := 100): array of integer 
function ArrRandomReal(n: integer := 10; a: real := 0;
b: real := 10): array of real 
В каждой из этих функций можно указывать от 0 до 3 необязательных 
параметров. Первый параметр n, как и в случае функций ArrFill и ArrGen, за-
дает размер массива (по умолчанию создается массив из 10 элементов), 
второй и третий параметры a и b задают диапазон, из которого выбираются 
случайным образом значения элементов. В случае целых чисел в диапазон 


36 
входят все целые числа от a до b включительно, по умолчанию использует-
ся диапазон от 0 до 100; в случае вещественных чисел диапазон представ-
ляет собой полуинтервал [a, b), т. е. левый конец диапазона включается, а 
правый нет, по умолчанию используется полуинтервал [0; 10). В случае 
вещественных чисел при a ≠ b можно считать, что случайные числа выби-
раются из интервала (a, b), так как вероятность случайного выбора числа, 
равного a, практически равна нулю. 
Интересно отметить, что параметр a может быть больше параметра b, 
границы диапазона при этом будут установлены правильно. Эта особен-
ность справедлива и для полезной функции Random(a, b: integer), которая 
возвращает случайное целое число от a до b включительно: допускается 
ситуация, когда a > b, в этом случае используется диапазон от b до a 
(напомним, что имеется также вариант функции Random без параметров
возвращающий случайное вещественное число из полуинтервала [0; 1)).
Отмеченную особенность надо учитывать при указании в функциях 
ArrRandomInteger и ArrRandomReal только параметра a (без параметра b). 
Например, вызов ArrRandomInteger(20, 5), как и следовало ожидать, вернет 
массив из 20 элементов со случайными значениями в диапазоне от 5 до 100 
(значение b = 100 используется по умолчанию). Если же выполнить вызов 
ArrRandomInteger(20, 150), то мы получим массив из 20 элементов со случай-
ными значениями в диапазоне от 100 до 150 (значение b по-прежнему счи-
тается равным 100, поэтому границы a = 150 и b = 100 «меняются места-
ми»). Аналогично будет вести себя и функция ArrRandomReal, вызванная с 
двумя параметрами n и a. 
3.4.
Последовательности 
Последовательность (sequence) представляет собой тип данных, при-
шедший в PascalABC.NET из стандартной библиотеки платформы .NET (в 
которой он реализован в виде обобщенного интерфейса IEnumerable — 
см. [3, п. 9.7, 10.1]). В традиционном Паскале подобный тип отсутствует. 
Последовательности обладают рядом замечательных свойств, которые 
позволяют во многих случаях использовать их более эффективно, чем дру-
гие структуры данных, в частности, массивы. В то же время массивы
строки и большинство других структур данных могут быть неявно преоб-
разованы в последовательности (напомним, что мы условились называть 
такие структуры коллекциями). Поэтому средства, предназначенные для 
обработки последовательностей, можно применять к любым коллекциям; 
следует лишь учитывать, что в результате применения этих средств будут 
получены не структуры исходного типа, а последовательности. 
Последовательности в языке PascalABC.NET описываются подобно 
динамическим массивам, за исключением того, что вместо ключевого сло-
ва array надо использовать слово sequence, например:


Download 1.62 Mb.

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




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