Programming Taskbook 0


Download 1.62 Mb.
Pdf ko'rish
bet30/71
Sana21.06.2023
Hajmi1.62 Mb.
#1644761
TuriУчебное пособие
1   ...   26   27   28   29   30   31   32   33   ...   71
Bog'liq
Abramyan-Pascal2016-1


Глава 3. Массивы и последовательности 
51 
Для использования нужной начальной части этой последовательности 
надо, как обычно, использовать соответствующий вспомогательный за-
прос, например уже известный нам запрос Take: 
Task('Array1'); // Вариант 5 
AllOddGen.Take(ReadInteger).Write; 
Пример функции AllOddGen еще более наглядно демонстрирует осо-
бенности функций с конструкцией yield. Несмотря на то что в теле функции 
присутствует бесконечный цикл, ее вызов не приводит к зацикливанию. 
Фактически, как уже было сказано, ее вызов вообще не приведет к выпол-
нению содержащихся в ней операторов. Ее тело будет выполняться только 
тогда, когда последовательности потребуется перебрать свои элементы, и 
итерации будут повторяться лишь до тех пор, пока не будут получены те 
элементы, которые требуются.
Если в функции, возвращающей последовательность, не будет вызва-
но ни одной конструкции yield, то будет возвращена пустая последователь-
ность. Подобная ситуация возникнет, например, при вызове OddGen(0). 
3.7.
Ввод массивов и последовательностей. 
Инвертирование. Срезы 
Рассмотрев различные способы создания массивов и последовательно-
стей, мы пока еще не обсудили варианты организации ввода этих структур. 
Очевидным вариантом организации ввода массива является цикл for. 
Вначале запрашивается размер массива, затем в цикле вводятся его эле-
менты. Для большей наглядности ввод данных следует сопровождать при-
глашающими сообщениями. Благодаря тому, что в PascalABC.NET для ор-
ганизации ввода предусмотрены не только традиционные процедуры, но и 
функции (см. п. 1.2), ввод размера можно выполнить непосредственно при 
инициализации массива. Кроме того, инициализацию можно объединить с 
описанием массива. В результате ввод, например, массива целых чисел 
можно организовать следующим образом: 
var a := new integer[ReadInteger('Введите размер массива:')]; 
Print('Введите элементы массива:'); 
for var i := 0 to a.Length - 1 do 
a[i] := ReadInteger; 
При выполнении этого фрагмента вначале будет выведено приглаше-
ние «Введите размер массива», после которого пользователь должен вве-
сти размер (целое число). Введенный размер сразу будет передан в кон-
структор массива, что обеспечит выделение памяти под требуемое число 
элементов. Затем выводится приглашение на ввод элементов, после чего в 
цикле выполняется сам ввод. Заметим, что элементы можно вводить либо в 
одной строке, разделяя их пробелами, либо в различных строках, нажимая 


52 
после ввода каждого элемента клавишу Enter. Можно также комбинировать 
эти варианты.
Для проверки правильности ввода можно использовать процедуру 
Write: 
Write(a); 
Приведем результат выполнения предыдущего фрагмента, дополнен-
ного процедурой Write: 

Download 1.62 Mb.

Do'stlaringiz bilan baham:
1   ...   26   27   28   29   30   31   32   33   ...   71




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