
Множества в языке Pascal
Множество—это структурированный тип данных, представляющий собой набор взаимосвязанных по какому-либо признаку или группе признаков объектов, которые можно рассматривать как единое целое. Каждый объект в множестве называется элементом множества. Все элементы множества должны принадлежать одному из порядковых типов, содержащему не более 256 значений. Этот тип называется базовым типом множества. Базовый тип задается диапазоном или перечислением. Область значений типа множество — набор всевозможных подмножеств, составленных из элементов базового типа. В выражениях на языке Паскаль значения элементов множества указываются в квадратных скобках: [1,2,3,4], ['а',‘b','с'], ['a'..'z']. Если множество не имеет элементов, оно называется пустым и обозначается как []. Количество элементов множества называется его мощностью. Множество может принимать все значения базового типа. Базовый тип не должен превышать 256 возможных значений.Базовым типом множества могут быть byte, char, boolean и производные от них типы. Множество в памяти хранится как массив битов, в котором каждый бит указывает является ли элемент принадлежащим объявленному множеству или нет. Максимальное число элементов множества 256, а данные типа множество могут занимать не более 32 байт. Не имеет значения порядок записи элементов множества внутри конструктора. Например, [1, 2, 3] и [3, 2, 1]—это эквивалентные множества. Каждый элемент в множестве учитывается только один раз. Поэтому множество [1, 2, 3, 4, 2, 3, 4, 5] эквивалентно [1..5]. Переменные множественного типа описываются так:Var <идентификатор> : set of <базовый тип>; Например: Var A, D : Set Of Byte; B : Set Of 'a'..'z'; C : Set Of Boolean; Нельзя вводить значения во множественную переменную процедурой ввода и выводить процедурой вывода. Множественная переменная может получить конкретное значение только в результате выполнения оператора присваивания:<множественная переменная> := <множественное выражение>; Например: A : = [50, 100, 150, 200];B : = ['m', 'n', 'k']; C : = [True, False]; D : = A;Выражения могут включать в себя операции над множествами. Объединением двух множеств A и B называется множество, состоящее из элементов, входящих хотя бы в одно из множеств A или B. Знак операции объединения в Паскале «+».Пересечением двух множеств A и B называется множество, состоящее из элементов, одновременно входящих во множество A и во множество B. Знак операции пересечения в Паскале «*»Разностью двух множеств A и B называется множество, состоящее из элементов множества A, не входящих во множество B.
Массивы
Массивы - это совокупности однотипных элементов. Характеризуются они следующим: каждый компонент массива может быть явно обозначен и к нему имеется прямой доступ; число компонент массива определяется при его описании и в дальнейшем не меняется.Для обозначения компонент массива используется имя переменной-массива и так называемые индексы, которые обычно указывают желаемый элемент. Тип индекса может быть только порядковым (кроме longint). Чаще всего используется интервальный тип (диапазон). Описание типа массива задается следующим образом: type имя типа = array[ список индексов ] of тип Здесь имя типа - правильный идентификатор; список индексов - список одного или нескольких индексных типов, разделенных запятыми; тип - любой тип данных. Вводить и выводить массивы можно только поэлементно.Определить переменную как массив можно и непосредственно при ее описании, без предварительного описания типа массива, например: var a,b,c: array[1..10] of integer;Если типы массивов идентичны, то в программе один массив может быть присвоен другому. В этом случае значения всех переменных одного массива будет присвоены соответствующим элементам второго массива. Над массивами не определены операции отношения. Сравнивать два массива можно только поэлементно. Так как тип, идущий за ключевым словом of в описании массива, - любой тип Турбо Паскаль, то он может быть и другим массивом.Таким образом возникает понятие многомерного массива. Глубина вложенности массивов произвольная, поэтому количество элементов в списке индексных типов (размерность массива) не ограничена, однако не может быть более 65520 байт. Работа с многомерными массивами почти всегда связана с организацией вложенных циклов. Так, чтобы заполнить двумерный массив (матрицу) случайными числами, используют конструкцию вида: for i:=1 to m do for j:=1 to n do a[i,j]:=random(10); Для "красивого" вывода матрицы на экран используйте такой цикл: for i:=1 to m do begin for j:=1 to n do write(a[i,j]:5); writeln;end;
Строки
Строка (string) - это последовательность литер Тип данных (string) определяет строки с максимальной длиной 255 символов. Переменная этого типа может принимать значения переменной длины.Например,MaxLine : string;City : string[30] Строковая переменная может иметь атрибут длины, определяющий ее максимальную длину.Текущая длина строковой переменной может быть определена с помощью встроенной функции Length. Для заданного значения типа string эта функция возвращает целое значение, показывающее количество литер в строке.Выражения, в которых операндами служат строки, называются строковыми выражениями.Над строками определены следующие операции:1. Операция конкатенации (+) применяется для сцепления нескольких строк в одну.2. Операции отношения (=, <>, >, <, >=, <=) проводят посимвольное сравнение двух строк слева направо до первого несовпадающего символа. Большей считается та строка, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией. Результат выполнения операций отношения над строками всегда имеет булевский тип.Если строки имеют различную длину, но в их общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная.Строки считаются равными, если они совпадают по длине и содержат одни и те же символы на соответствующих местах в строке.Для присваивания строковой переменной результата строкового выражения используется оператор присваивания. Если значение переменной после выполнения оператора присваивания превышает по длине максимально допустимую при описании величину, то все лишние символы справа отбрасываются.Допускается смешение в одном выражении операндов строкового и символьного типа.К отдельным символам строки можно обратиться по номеру (индексу) данного символа в строке. Для хранения строковых переменных выделяется количество байтов памяти, на единицу большее максимальной длины строки. Начальный байт этой памяти отводится для хранения текущей длины строки, следующие байты - для символов самой строки. Так как элементы строк стандартно нумеруются целыми числами, начиная с единицы, байт с длиной строки можно считать нулевым ее элементом. Такая структура памяти допускает прямой доступ к ее элементам.Для обработки строковых данных можно использовать встроенные процедуры и функции:Delete (Str, Poz, N) - удаление N символов строки Str, начиная с позиции Poz.Insert (What, Where, Poz) - вставка строки What в строку Where, начиная с позиции Poz.Copy (Str, Poz, Nstr) - выделяет подстроку длиной Nstr, начиная с позиции Poz, из строки Str.Concat (Str1, Str2, ..., StrN) - выполняет сцепление строк в том порядке, в каком указаны в списке параметров.Pos (What, Where) - обнаруживает первое появление подстроки What в строке Where.UpCase (Ch) - преобразует строчную букву в прописную.Str (Number, Stroka) - преобразует число в строку.Val (Stroka, Number, Code) - преобразует строку в число и выдает код правильности преобразования
Файлы
Файловый тип данных или файл определяет упорядоченную совокупность произвольного числа однотипных компонент.Понятие файла достаточно широко. Это может быть обычный файл на диске, коммуникационный порт ЭВМ, устройство печати, клавиатура или другие устройства. При работе с файлами выполняются операции ввода - вывода. Операция ввода означает перепись данных с внешнего устройства (из входного файла) в основную память ЭВМ, операция вывода-это пересылка данных из основной памяти на внешнее устройство.Файлы на внешних устройствах часто называют физическими файлами.Их имена определяются операционной системой. В программах на языке Паскаль имена файлов задаются с помощью строк. Турбо Паскаль поддерживает три файловых типа: текстовые файлы; типизированные файлы; нетипизированные файлы.Доступ к файлу в программе происходит с помощью переменных файлового типа. Переменную файлового типа описывают одним из трех способов: file of тип - типизированный файл(указан тип компоненты); text - текстовый файл; file - нетипизированный файл. Стандартные процедуры и функцииAssign(f, FileName)связывает файловую переменную f с физическим файлом, полное имя которого задано в строке FileName. После связи файловой переменной с дисковым именем файла в программе нужно указать направление передачи данных (открыть файл). В зависимости от этого направления говорят о чтении из файла или записи в файл. Reset(f) открывает для чтения файл, с которым связана файловая переменная f. После успешного выполнения процедуры Reset файл готов к чтению из него первого элемента. Процедура завершается с сообщением об ошибке, если указанный файл не найден. Если f - типизированный файл, то процедурой reset он открывается для чтения и записи одновременно. Rewrite(f) открывает для записи файл, с которым связана файловая переменная f. После успешного выполнения этой процедуры файл готов к записи в него первого элемента. Если указанный файл уже существовал, то все данные из него уничтожаются. Close(f)закрывает открытый до этого файл с файловой переменной f. Вызов процедуры Close необходим при завершении работы с файлом. Если по какой-то причине процедура Close не будет выполнена, файл все-же будет создан на внешнем устройстве, но содержимое последнего буфера в него не будет перенесено. EOF(f): boolean возвращает значение TRUE, когда при чтении достигнут конец файла. Это означает, что уже прочитан последний элемент в файле или файл после открытия оказался пуст. Rename(f, NewName) позволяет переименовать физический файл на диске, связанный с файловой переменной f. Переименование возможно после закрытия файла. Erase(f)уничтожает физический файл на диске, который был связан с файловой переменной f. Файл к моменту вызова процедуры Erase должен быть закрыт.