Programming Taskbook 0
Download 1.62 Mb. Pdf ko'rish
|
Abramyan-Pascal2016-1
- Bu sahifa navigatsiya:
- [1,5,3,13,20]
Глава 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]). |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling