- •Введение в object pascal
- •Лекция 1. Интегрированная Среда и Состав языка Object Pascal
- •1.1 Работа с окнами
- •1.2 Редактирование в Object Pascal
- •1.3 Команды меню
- •1.4 «Горячие» клавиши в Object Pascal
- •1.5 Состав языка
- •1.5.1 Алфавит и ключевые слова
- •1.5.2 Идентификаторы
- •1.5.3 Знаки операций, разделители, выражения и операторы
- •Лекция 2. Описательная часть программы
- •2.1 Структура программы
- •2.2 Описание констант
- •2.3 Описание и использование меток
- •2.4 Комментарии
- •Лекция 3. Описание переменных
- •3.1 Структура раздела описания переменных
- •3.2 Классификация типов данных
- •3.2.1 Целочисленные типы
- •3.2.2 Логический тип
- •3.2.3 Символьный тип
- •3.2.4 Вещественные типы
- •3.3 Описание типов пользователя
- •Лекция4. Выражения
- •4.1 Порядок выполнения операций
- •4.2 Выражения целого типа
- •4.3 Вещественные выражения
- •4.4 Логические выражения
- •Лекция 5. Программы Линейной структуры
- •5.1 Операторы ввода (Read, Readln)
- •5.2 Операторы вывода (Write, Writeln)
- •5.2.1 Форматирование численных значений
- •5.2.2 Вывод строковых, символьных и логических значений
- •5.2.3 Вывод вещественных значений в экспоненциальном формате
- •5.2.4 Расположение данного в поле вывода. Примеры
- •5.3 Оператор присваивания
- •5.4 Составной оператор
- •5.5 Стандартные процедуры и функции
- •5.5.1 Понятие процедуры и функции
- •5.5.2 Описание некоторых стандартных процедур и функций
- •5.5.3 Примеры программ линейной структуры
- •Лекция 6. Операторы ветвления (выбора)
- •6.1 Оператор ветвления if
- •6.2 Оператор множественного выбора (варианта) - case
- •Лекция 7. Операторы организации циклов
- •7.1 Цикл типа for
- •7.1.1 Прямая форма оператора for
- •7.1.2 Обратная форма оператора for
- •7.1.3 Советы для начинающих и примеры
- •7.2 Цикл типа While
- •7.3 Цикл типа Repeat... Until
- •7.4 Дополнительные операторы при программировании циклов
- •7.4.1 Досрочный выход из цикла - break
- •7.4.2 Переход к следующей итерации цикла - continue
- •Лекция 8. Массивы
- •8.1 Одномерные массивы
- •8.2 Сортировка одномерного массива
- •8.3 Массивы с большей размерностью
- •8.4 Констант-массивы
- •8.5 Генератор случайных чисел
- •8.5.1 Описание функции Random
- •8.5.2 Применение случайных чисел при работе с массивами
- •Лекция 9. Строки
- •9.1 Строковый тип
- •9.2 Операции над строками
- •Лекция 10. Записи и множества
- •10.1 Запись
- •10.2 Множества
- •11 Пользовательские процедуры и функции
- •11.1 Описание функции и процедуры
- •11.2 Понятие формальных и фактических параметров
- •11.3 Способы передачи параметров в подпрограмму через заголовок
- •11.4 Область видимости идентификаторов
- •12 Файлы
- •12.1 Основные понятия
- •12.2 Типизированные файлы
- •12.3 Текстовые файлы
10.2 Множества
Множество относится к структурным типам данных. Тип «множество» задаёт интервал значений, который является множеством всех подмножеств базового типа. Базовый тип – это перечислимый тип, кроме word, integer, longint. Синтаксис определения типа множества:
<имя типа> = set of <базовый тип>;
Примеры:
Type
Tdigit = set of 0 .. 9;
Tsimv = set of 'A' .. 'Z' ;
Var
digit : Tdigit ;
simv : Tsimv;
Если переменная типа «множество» описана как set of 1 .. 3, то она может принимать следующие значения: (1, 2, 3), (1, 2), (1, 3), (2, 3), (1), (2), (3), ().
Размер множества равен числу компонент базового типа и может меняться от 0 до 256. Множество может быть пустым. В отличие от массивов, множества содержат переменное количество элементов, для которых порядок следования не важен.
Константы множественного типа записываются с помощью квадратных скобок и списка элементов в них.
Примеры:
Const
alpha = ['A' .. 'Z' , 'a' .. 'z' ];
empty = [] ;
digits = [ 0 .. 9] ;
Зарезервированное слово in для определения принадлежности элемента множеству:
if ch in alpha then …
В этом операторе выполняется проверка принадлежности элемента ch множеству alpha. Часто это гораздо проще, чем многократно сравнивать ch с некоторыми элементами.
Множества языка Object Pascal обладают свойствами математических множеств. Над ними можно выполнять те же операции. Если S1 и S2 – константы или переменные множественного типа, то S1+ S2 будет их объединением, S1*S2 - пересечением, S1-S2 – разностью. Операции отношений = (равенство), <> (неравенство), <= (первое является подмножеством второго), >= (второе является подмножеством первого) к множествам применяются, а отношения строго включения типа «<» или «>» - не применяются.
Чтобы добавить в множество какой-либо элемент, можно добавить множество, состоящее из единственного элемента. Либо использовать процедуру include(S,a) , где S – множество, в которое добавляем, a – добавляемый элемент. Имеется и обратная процедура – exclude(S , a) - для исключения элемента из множества. Здесь параметры S и a имеют тот же смысл.
Пример:
program p10_2;
var
S: set of 'A' .. 'Z' ;
ch: char;
Begin
S := [ ];
ch := 'A';
repeat
S := S+[ch] ;
Inc(ch);
Until ch >= 'Z' ;
……………………..
В этом примере в цикле заполняется множество S (изначально пустое) символами английского алфавита.
11 Пользовательские процедуры и функции
В лекции 5 мы уже говорили об использовании стандартных процедур и функций. Но язык Object Pascal позволяет программисту создавать собственные подпрограммы (функции и процедуры). Их описание располагается в описательной части программы и начинается с заголовка.
11.1 Описание функции и процедуры
Заголовок функции записывается следующим образом:
Function <идентификатор функции> (<списки
параметров>) : <тип значения функции>;
Заголовок же процедуры записывается несколько иначе:
procedure <идентификатор процедуры>(<списки
параметров>);
И в том, и в другом случае <списки параметров> - это перечисление имён переменных с указанием через двоеточие их типа; один список от другого отделяется точкой с запятой. <списки параметров> - это те значения, которые или должны быть или переданы в подпрограмму, или вычислены в подпрограмме. <тип значения функции> - это одно из ключевых слов для обозначения типов переменных или наименование пользовательского типа (смотри лекцию 3). Функция обязана вернуть значение указанного типа.
Примеры заголовков функций и процедур:
function Chr(X: Byte) : Char;
procedure Delay (MS: Word) ;
function Copy(S: String; Index: Integer; Count: Integer) : String;
procedure GetDate(var Year, Month, Day,
DayOfWeek: Word);
Отметим, что списки параметров в заголовках процедур могут отсутствовать. Пример:
procedure NoSound;
Структура процедур и функций почти повторяет структуру программы. Например, описание процедуры имеет вид:
procedure <идентификатор процедуры> ( <списки параметров>) ;
const <раздел описания констант>
type <раздел описания типов>
var <раздел описания переменных>
label <раздел описания меток>
<раздел описания процедур и функций>
begin
<тело процедуры - операторный_блок>
end;
и описание функции:
function <идентификатор процедуры> ( <списки параметров>) :
<тип значения функции> ;
const <раздел описания констант>
type <раздел описания типов>
var <раздел описания переменных>
label <раздел описания меток>
<раздел описания процедур и функций>
begin
<тело процедуры - операторный блок>
end;
Как и в основной программе любой из разделов описаний, и в функции, и в процедуре может отсутствовать. Однако в теле функции обязан быть оператор присваивания идентификатору функции значение соответствующего типа. Пример:
Function Sum(A, B : real) : real;{ Описание функции суммирования }
Var S : real;
Begin
S:= A+B;
Sum:= S; { Присвоение идентификатору функции значения }
End;
Основное отличие процедур и функций заключается в том, что идентификатор функции имеет (или возвращает) значение определенного типа и поэтому для вызова функции необходимо включить ее в выражение, например в правую часть оператора присваивания. Примеры:
p:=gradf(x); { gradf - идентификатор функции}
t:=2*grod(w)-7; { grod - идентификатор функции}
Процедура, в отличие от функции, не может быть составной частью выражения и вызывается самостоятельным оператором. Пример:
Proced1(А,В,С); { оператор вызова процедуры Proced1 }