Programming Taskbook 0


Введите размер и элементы: 5 2 3 4 5 6


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

Введите размер и элементы: 5 2 3 4 5 6 
[2,3,4,5,6] 
Для большей наглядности можно перейти на новую строку после вво-
да размера последовательности; это никак не повлияет на результат. 
Следует, однако, учитывать, что ввод данных в последовательность 
принципиальным образом отличается от ввода данных в массив. Чтобы в 
этом убедиться, достаточно после ввода данных попытаться дважды выве-
сти эти данные, например:
Writeln(a); 
Write(a); 
В случае массива ничего неожиданного не произойдет: содержимое 
массива просто выведется дважды. Однако при обработке последователь-
ности результат будет иным: после первого вывода содержимого введен-
ной последовательности программа опять попытается ввести такое же 
количество элементов последовательности (при этом никакого пригла-
шающего сообщения выведено не будет). И если проанализировать дан-
ную ситуацию, то можно понять, что именно такое поведение и является 
для последовательностей наиболее естественным. Ключевая идея состоит в 
том, что последовательность не хранит в памяти свои элементы. Она ге-
нерирует их (тем или иным образом) лишь тот момент, когда эти элементы 
требуется обработать (например, вывести на экран). Если алгоритм гене-
рации задан явным образом, то последовательность всегда генерирует 
одинаковый набор данных, и по поведению программы невозможно опре-


Глава 3. Массивы и последовательности 
55 
делить, в какой момент эта генерация производится. Однако при вводе 
данных с клавиатуры ситуация иная: для того чтобы повторно сгенериро-
вать последовательность необходимо ее повторно ввести, так как прежние 
значения элементов уже обработаны и забыты (последовательность пом-
нит лишь свой размер).
Необходимо также учитывать следующее. Ввод массива выполняется 
при выполнении того фрагмента, в котором ввод запрограммирован. Даже 
если бы мы не указали после этого фрагмента процедуру Write, память под 
массив была бы выделена и в нее занесены введенные значения элементов. 
Действия же по вводу последовательности фактически производятся толь-
ко в момент перебора ее элементов. Поэтому если бы мы включили в про-
грамму только приведенный выше единственный оператор, определяющий 
последовательность a, то при выполнении этого фрагмента были бы вы-
полнены только действия по вводу единственного числа — размера после-
довательности (в чем можно легко убедиться, закомментировав идущие 
далее вызовы процедуры Write: если в этом случае после ввода первого 
числа нажать Enter, то программа немедленно завершится). 
Описанная особенность ввода последовательностей означает, что ор-
ганизовывать подобный ввод имеет смысл только если сразу после ввода 
последовательность будет обработана требуемым образом (обычно с при-
менением цепочки запросов) и получен результат, после чего в программе 
не будет производиться обращений к этой последовательности. Заметим, 
что в такой ситуации обычно не требуется связывать последовательность с 
какой-либо переменной, так как в дальнейшем эта переменная в программе 
не будет использоваться.
Как и для массивов, для последовательностей с числовыми и строко-
выми элементами в PascalABC.NET предусмотрены специальные функции, 
упрощающие их ввод. Их имена аналогичны именам функций для ввода 
массивов, за исключением того, что текст «Arr» надо в них заменить на 
«Seq»: ReadSeqInteger, ReadSeqReal, ReadSeqString.
Например, использованный ранее оператор для ввода целочисленной 
последовательности можно записать гораздо короче: 
var a := ReadSeqInteger 
(ReadInteger('Введите размер и элементы:')); 
Можно также указать отдельные приглашения для ввода размера и 
элементов, как в ранее рассмотренном примере с массивом: 
var a := ReadSeqInteger('Введите элементы:',
ReadInteger('Введите размер:')); 
Еще раз подчеркнем, что ввод элементов будет выполняться только в 
момент перебора элементов последовательности. 


56 
Варианты функций ReadSeqInteger, ReadSeqReal, ReadSeqString реализо-
ваны и в модуле PT4 электронного задачника. Как и в случае функций для 
ввода массивов, имеются варианты этих функций без параметров и с од-
ним параметром — размером вводимой последовательности.

Download 1.62 Mb.

Do'stlaringiz bilan baham:
1   ...   29   30   31   32   33   34   35   36   ...   71




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