Programming Taskbook 0


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


Глава 3. Массивы и последовательности 
31 
но выводить пробелы или применять форматированный вывод данных; в 
противном случае все выводимые значения целого типа сольются в одно 
длинное «число». 
Все описываемые далее дополнительные возможности, связанные с 
выводом массивов, применимы не только к массивам, но и к любым после-
довательностям (см. их описание в п. 3.4), а также к другим структурам 
данных, которые могут быть неявно преобразованы в последовательности 
(будем называть такие структуры коллекциями; различные виды коллекций 
описываются во втором выпуске данной серии — см. [1, гл. 2–5]).
Для перебора элементов любой коллекции в PascalABC.NET преду-
смотрен специальный вариант оператора цикла — цикл foreach. Использо-
вание цикла foreach позволяет при выводе элементов массива обойтись без 
применения индексов: 
foreach var e in a do 
Print(e); 
В данном случае параметром цикла выступает переменная e, имеющая 
тот же тип, что и элементы массива а (выбор имени параметра цикла объ-
ясняется тем, что с буквы «e» начинается слово «element»). На каждой ите-
рации в переменную e записывается очередной элемент массива a. Обрати-
те внимание на то, что тип переменной e (как и тип переменной i в цикле 
for) указывать не требуется: он выводится из типа связываемых с ней дан-
ных. Поскольку переменная e описана в заголовке цикла, она существует 
только на протяжении его работы и уничтожается после завершения цикла. 
Необходимо отметить ограничения цикла foreach: во-первых, он всегда 
перебирает все элементы массива, причем в порядке возрастания их индек-
сов, и, во-вторых, он не позволяет изменять элементы массива. 
В PascalABC.NET предусмотрены более простые способы вывода эле-
ментов массива или других коллекций, не требующие применения циклов.
Во-первых, любая коллекция может быть непосредственно указана в 
процедуре Write/Writeln или Print/Println: 
Writeln(a); // пример вывода: [1,5,3,13,20] 
В этом случае вывод массива или последовательности выполняется в 
специальном формате: элементы разделяются запятыми, а весь список 
элементов заключается к квадратные скобки. 
Напомним, что аналогичным образом оформляется в процедурах Write 
и Print вывод кортежей (см. п. 1.4); единственное отличие состоит в том, 
что список полей кортежа заключается не в квадратные, а в круглые скобки 
(следует заметить, что кортеж не является коллекцией, так как его нельзя 
преобразовать в последовательность). Имеются особые виды коллекций, 
например множества и словари [1, гл. 3–4], при выводе элементов кото-
рых используются фигурные скобки { }. 


32 
Во-вторых, можно использовать методы Print и Println, вызываемые для 
массивов и других коллекций с помощью точечной нотации. Например
обеспечить вывод всех элементов массива a в том же виде, в каком они 
были бы выведены при использовании любого из двух вариантов с опера-
торами цикла, можно так: 
a.Print; // пример вывода: 1 5 3 13 20 
Вызов a.Println дополнительно обеспечит переход в окне вывода на но-
вую строку. В методах Print и Println (в отличие от одноименных процедур) 
можно настроить разделитель, который выводится между элементами; для 
этого его достаточно указать в качестве параметра этих методов. Напри-
мер, для того чтобы вывести каждый элемент массива a на новой строке, 
можно использовать следующий вариант метода: 
a.Print(#13); // Сейчас это a.PrintLines 
В качестве параметра здесь указана константа #13 — символ с ко-
дом 13, который интерпретируется системой как переход на новую строку. 
Кроме того, можно изменить системную переменную PrintDelimDefault, 
содержащую значение разделителя по умолчанию (в начале программы в 
ней записан символ пробела). Методы Print/Println без параметров
исполь-
зуют
текущее
значение
этой
переменной
в
качестве разделителя, за исклю-
чением случая, когда выводится массив символов (array of char): для такого 
массива разделителем по умолчанию всегда считается пустая строка (т. е. 
символы выводятся без разделителей). Методы Print и Println печатают раз-
делитель только между выводимыми элементами коллекции, а после по-
следнего элемента разделитель не выводится.
Для вывода коллекций (в частности, массивов) при решении задач с 
использованием задачника Programming Taskbook предусмотрены методы 
Write и WriteAll, реализованные в модуле PT4. Первый из них пересылает за-
дачнику все элементы коллекции, а второй перед этим действием дополни-
тельно пересылает ее размер (поскольку в некоторых задачах требуется 
вывести не только элементы, но и, предварительно, размер полученного 
набора данных). Вместо метода Write можно использовать методы Writeln
Print и Println (для программ с подключенным модулем PT4 эти методы вы-
полняют одинаковые действия); вместо метода WriteAll можно использовать 
его синоним PrintAll.
Процедуры Write и Print при использовании совместно с задачником не 
позволяют указывать коллекции и другие составные данные (например, 
кортежи) в качестве параметров; допускаются только данные базовых ска-
лярных типов: логического, целочисленного, вещественного, символьного 
и строкового (а также данные типа PNode и Node для групп заданий, свя-
занных с динамическими структурами — см. [2]).


Download 1.62 Mb.

Do'stlaringiz bilan baham:
1   ...   11   12   13   14   15   16   17   18   ...   71




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