Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatica / lin.doc
Скачиваний:
79
Добавлен:
09.04.2015
Размер:
776.19 Кб
Скачать

Многомерные массивы

В Паскале требуется, чтобы все компоненты массива были одного и того же типа. В частности, компонентами массива могут быть массивы. Если компоненты-массивы состоят из скалярных значений, то мы получаем матрицу.

Возможный вид задания двумерного массива:

A: array [1..10] of array [1..20] of real ,а A[i][j] – элемент массива.

Допускается и другая форма задания:

A: array [1..10,1..20] of real и A[i,j].

Синтаксис задания регулярного типа:

<задание регулярного типа>::=

array[<тип индекса>{,<тип индекса>}]of<тип компонент>

<тип индекса>::=char|boolean| <огранич. тип>|<перечисл. тип>

<ограниченный тип>::=<имя типа>|<задание ограниченного типа>

<перечислимый тип>::=<имя типа>|<задание перечисл. типа>

<тип компонент>::=<имя типа>|<задание типа>

В качестве <тип компонент> можно задать любой тип Паскаля кроме файлового, а в качестве <тип индекса> – только такой, значения которого образуют ограниченное перенумерованное множество.

<перем. с индексами>::= <перем.-массив>[<индекс> {,<индекс>}]

<индекс>::=<выражение>

<переменная-массив>::=<имя>

Строки

Особое место занимают в Паскале строки – одномерные масси­вы, состоящие из элементов символьного типа

В Delphi определены 5 типов строк:

  • ShortString – короткая строка;

  • AnsiString– длинная строка;

  • WideString– длинная строка в кодировке UNICODE;

  • String– универсальная строка;

  • PChar– строка, оканчивающаяся нулевым кодом (#0), введена для совместимости с другими языками программирования (такие строки используются в C++ и Windows).

Переменная PChar– это ссылка на строку. Строки типаPCharразмещаются в динамической памяти. Динамическая память – это сво­бодная память, которая остается после загрузки программ и данных. Про­граммный элемент получает ее в процессе выполнения программы, а не на этапе компиляции (статическая память). ПеременнаяPCharсодержит адрес строки. По этому адресу записываются необходимые данные. Ком­пилятор выделяет под переменнуюPChar4 байта, а сама строка, которая размещается по адресу, записанному в эти 4 байта, может быть любой длины. Если строки не существует, а переменнаяPCharобъявлена, то в эту переменную необходимо записатьnil(пустой адрес).

Переменные типа AnsiStringсодержат динамические строки (до 231символов) в ANSI-кодировке. Переменные типаWideStringсодержат динамические строки (до 230символов) в кодировке UNICODE. Термин «динамические» означает, что переменные указанных типов, как и типPChar, являются адресами, т.е. ссылками на память с соответствующим типом данных.

ShortString– это фактически массивarray [0..255] of char. При этом выделяется 256 байт, а строка размещается динамически, т.е. через адрес. Символы строки содержатся в байтах с первого по 255. В байте с номером 0 содержится символ, порядковый номер которого равен числу фактически имеющихся в строке символов. ТипShortStringвведен для совместимости с более ранними версиями языка Паскаль.

Строка Stringв зависимости от директивы компилятора{$H}может совпадать сAnsiString({$H+}, установлено по умолчанию) илиShortString({$H-}).

Для строки Stringможно задать максимальное количество сим­волов с помощью объявленияvar st:String[25];

В этом случае строка st может содержать не более 25 символов и в памяти она занимает 26 байт. При задании строки максимальной длины используется только слово String.

Доступ к строке может осуществляться посимвольно (как для массивов). В строке PCharсимволы нумеруются, начиная с 0, а в остальных строковых типах, начиная с 1.

Обладая свойствами массивов, строки имеют ряд особенностей.

  1. Существуют строковые константы. Строка-константа – после­довательность литер, заключенная в одиночные апострофы.

  2. Со строками определены операции конкатенации (сложения) и сравнения.

Складывают строки, используя знак '+', например: s:=s+s1. При этом в конец строкиsдобавляется содержимое строкиs1. Следует отме­тить, что в случае присваивания строковой переменной выражения с дли­ной, большей, чем максимально допустимая для данной переменной, про­исходит усечение строки до максимальной длины. Эта ситуация не счита­ется ошибочной и не приводит к прерыванию выполнения программы.

При сравнении строк сравнивают ANSI коды символов слева направо. Если строки разной длины, то короткая строка дополняется справа, причем код, который участвует в дополнении строки, меньше кода любого символа, участвующего в ANSI-кодировке.

Если в операциях участвуют строки разного типа, то необходимо явное преобразование типов.

Присваивание значений элементам строки не влияетна ее теку­щую длину. Значение текущей длины устанавливается или меняется, если строке как целому присваивается новое значение.

Для выполнения различных операций над строками существует ряд встроенных подпрограмм:

Операция

Описание

Copy(S,pos,len)

Возвращает подстроку длиной len симво­лов из строки S, начиная с символа номер pos

Length(S)

Возвращает фактическую динамическую длину строки S

Pos(substr,S)

Возвращает позицию первого вхождения подстроки substrв строкуS

Set Length(S,newlen)

Задает новую длину newlenстроке S

StringOfChar(Ch,Count)

Возвращает строку, заполненную символом Chв количествеCount

Trim(S)

Возвращает строку без начальных и ко­нечных пробелов

UpperCase(S)

Возвращает строку с прописными (латин­скими) буквами

Соседние файлы в папке Informatica