• 1. Строковый тип в Pascal
  • 2. Процедуры и функции для переменных строкового типа
  • 3. Записи
  • 4. Множества
  • ЛЕКЦИЯ № 5. Строковый тип данных

    1. Строковый тип в Pascal

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

    К каждому элементу строки можно обратиться по его номеру. Однако ввод и вывод строк осуществляются целиком, а не поэлементно, как это происходит в массивах. Число введенных символов не должно превышать указанного в максимальном размере строки, так если такое превышение будет иметь место, то «лишние» символы будут проигнорированы.

    2. Процедуры и функции для переменных строкового типа

    1. Function Copy(S: String; Index, Count: Integer): String;

    Возвращает подстроку строки. S – выражение типа String.

    Index и Count – выражения целого типа. Функция возвращает строку, содержащую Count символов, начинающихся с позиции Index. Если Index больше, чем длина S, функция возвращает пустую строку.

    2. Procedure Delete(var S: String; Index, Count: Integer);

    Удаляет подстроку символов длиной Count из строки S, начиная с позиции Index. S – переменная типа String. Index и Count – выражения целого типа. Если Index больше, чем длина S, символы не удаляются.

    3. Procedure Insert(Source: String; var S: String; Index: Integer);

    Объединяет подстроку в строку, начиная с определенной позиции. Source – выражение типа String. S – переменная типа String любой длины. Index – выражение целочисленного типа. Insert вставляет Source в S, начиная с позиции S[Index].

    4. Function Length(S: String): Integer;

    Возвращает число символов, фактически используемое в строке S. Обратите внимание: при использовании строк с нуль-окончанием, число символов не обязательно равно числу байтов.

    5. Function Pos(Substr: String; S: String): Integer;

    Ищет подстроку в строке. Pos ищет Substr внутри S и возвращает целочисленное значение, которое является индексом первого символа Substr внутри S. Если Substr не найден, Pos возвращает нуль.

    3. Записи

    Запись представляет собой совокупность ограниченного числа логически связанных компонент, принадлежащих к разным типам. Компоненты записи называются полями, каждое из которых определяется именем. Поле записи содержит имя поля, вслед за которым через двоеточие указывается тип этого поля. Поля записи могут относиться к любому типу, допустимому в языке Pascal, за исключением файлового типа.

    Описание записи в языке Pascal осуществляется с помощью служебного слова RECORD, вслед за которым описываются компоненты записи. Завершается описание записи служебным словом END.

    Например, записная книжка содержит фамилии, инициалы и номера телефона, поэтому отдельную строку в записной книжке удобно представить в виде следующей записи:

    type Row = Record

    FIO: String[20];

    TEL: String[7];

    end;

    var str: Row;

    Описание записей возможно и без использования имени типа, например:

    var str : Record

    FIO : String[20];

    TEL : String[7];

    end;

    Обращение к записи в целом допускается только в операторах присваивания, где слева и справа от знака присваивания используются имена записей одинакового типа. Во всех остальных случаях оперируют отдельными полями записей. Чтобы обратиться к отдельной компоненте записи, необходимо задать имя записи и через точку указать имя нужного поля. Такое имя называется составным. Компонентой записи может быть также запись, в таком случае составное имя будет содержать не два, а большее количество имен.

    Обращение к компонентам записей можно упростить, если воспользоваться оператором присоединения with. Он позволяет заменить составные имена, характеризующие каждое поле, просто на имена полей, а имя записи определить в операторе присоединения.

    Иногда содержимое отдельной записи зависит от значения одного из ее полей. В языке Pascal допускается описание записи, состоящей из общей и вариантной частей. Вариантная часть задается с помощью конструкции case Р of, где Р – имя поля из общей части записи. Возможные значения, принимаемые этим полем, перечисляются так же, как и в операторе варианта. Однако вместо указания выполняемого действия, как это делается в операторе варианта, указываются поля варианта, заключенные в круглые скобки. Описание вариантной части завершается служебным словом end. Тип поля Р можно указать в заголовке вариантной части. Инициализация записей осуществляется с помощью типизированных констант.

    4. Множества

    Понятие множества в языке Pascal основывается на математическом представлении о множествах: это ограниченная совокупность различных элементов. Для построения конкретного множественного типа используется перечисляемый или интервальный тип данных. Тип элементов, составляющих множество, называется базовым типом.

    Множественный тип описывается с помощью служебных слов Set of, например:

    type M = Set of В;

    Здесь М – множественный тип, В – базовый тип.


    Принадлежность переменных к множественному типу может быть определена прямо в разделе описания переменных.

    Константы множественного типа записываются в виде заключенной в квадратные скобки последовательности элементов или интервалов базового типа, разделенных запятыми. Константа вида [] означает пустое подмножество.

    Множество включает в себя набор элементов базового типа, все подмножества данного множества, а также пустое подмножество. Если базовый тип, на котором строится множество, имеет К элементов, то число подмножеств, входящих в это множество, равно 2 в степени К. Порядок перечисления элементов базового типа в константах безразличен. Значение переменной множественного типа может быть задано конструкцией вида [Т], где Т – переменная базового типа.

    К переменным и константам множественного типа применимы операции присваивания (:=), объединения (+), пересечения (*) и вычитания (—). Результат выполнения этих операций есть величина множественного типа:

    1) ['A','B'] + ['A','D'] даст ['A','B','D'];

    2) ['A'] * ['A','B','C'] даст ['A'];

    3) ['A','B','C'] – ['A','B'] даст ['C'].


    К множественным величинам применимы операции: тождественность (=), нетождественность (<>), содержится в (<=), содержит (>=). Результат выполнения этих операций имеет логический тип:

    1) ['A','B'] = ['A','C'] даст FALSE ;

    2) ['A','B'] <> ['A','C'] даст TRUE;

    3) ['B'] <= ['B','C'] даст TRUE;

    4) ['C','D'] >= ['A'] даст FALSE.


    Кроме этих операций, для работы с величинами множественного типа используется операция in, проверяющая принадлежность элемента базового типа, стоящего слева от знака операции, множеству, стоящему справа от знака операции. Результат выполнения этой операции – булевский. Операция проверки принадлежности элемента множеству часто используется вместо операций отношения.

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

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

    Инициализация величин множественного типа производится с помощью типизированных констант.

    Приведем некоторые процедуры для работы с множествами.

    1. Procedure Exclude(var S: Set of T; I:T);

    Удаляет элемент I из множества S. S – переменная типа «множество», и I – выражение типа, совместимого с исходным типом S. Конструкция Exclude(S, I) соответствует S: = S – [I], но генерирует более эффективный код.

    2. Procedure Include(var S: Set of T; I:T);

    Добавляет элемент I к множеству S. S – переменная типа «множество», и I – выражение типа, совместимого с типом S. Конструкция Include(S, I) соответствует S: = S + [I], но генерирует более эффективный код.









    Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Вверх