- •Содержание
- •1. PASCAL
- •1.1 Алфавит
- •1.2 Типы данных
- •1.3 Переменные
- •1.4 Константы
- •1.5 Стандартные функции
- •1.6 Выражения
- •1.7 Операторы
- •1.7.1 Оператор присваивания
- •1.7.2 Составной оператор
- •1.7.3 Условный оператор IF
- •1.7.4 Условный оператор CASE
- •1.7.5 Оператор цикла FOR
- •1.7.6 Оператор цикла REPEAT
- •1.7.7 Оператор цикла WHILE
- •1.8 Одномерные массивы
- •1.9 Многомерные массивы
- •1.10 Строки
- •1.11 Записи
- •1.12 Множества
- •1.13 Пользовательские типы
- •1.14 Файлы
- •1.15 Перечисляемый тип
- •1.16 Тип-диапазон
- •1.17 Функции и процедуры
- •1.18 Локализация имен
- •1.19 Модули
- •1.20 Операторы прерывания
- •1.21 Комментарии
- •1.22 Указатели
- •1.23 Динамические массивы Delphi
- •2. Основные положения ООП
- •3. Базовые классы Delphi
- •3.1 TObject
- •3.2 Exception
- •3.3 TList
- •3.4 TPersistent
- •3.5 TCollection
- •3.6 TCollectionItem
- •3.7 TStrings
- •3.8 TStringList
- •3.9 TGraphicsObject
- •3.10 TPen
- •3.11 TBrush
- •3.12 TCanvas
- •3.13 TGraphics
- •3.14 TPicture
- •3.15 TComponent
- •3.16 TControl
- •3.17 TWinControl
- •3.18 TGraphicControl
- •3.19 TTimer
- •3.20 TThread
- •3.21 TTreeView
- •3.22 TTreeNodes
- •3.23 TTreeNode
- •3.24 TForm
- •3.25 TMainMenu
- •3.26 TMenuItem
- •3.27 TStatusBar
- •3.28 TStatusPanels
- •3.29 TStatusPanel
- •3.30 TToolBar
- •3.31 TToolButton
- •3.32 TActionList
- •3.33 TAction
17
end;
for i := 1 to Count do begin
with Figures[i] do case Vid of
0 : s := IntToStr(i)+' - квадрат, S='+ FloatToStr(sqr(Side));
1 : s := IntToStr(i)+' - прямоугольник, S='+ FloatToStr(Side1*Side2);
2 : s := IntToStr(i)+' - круг, S='+ FloattoStr(Pi*sqr(Radius));
end; <вывод s>;
end;
end;
1.12 Множества
Множества – это наборы однотипных логически связанных друг с другом объектов. Для описания множества используется следующий формат:
<идентификатор> = set of <начало> .. <окончание>
<идентификатор> = set of (<элемент1> [,<элемент2> …])
Элементы, описываемый <начало>, <окончание> должны быть порядкового типа. Количество элементов множества не может превышать 256.
Множества часто используются для проверок установки тех или иных флагов объектов.
Операции с множествами:
+ – сложение; результат содержит элементы первого множества, дополненные недостающими элементами второго множества;
- – вычитание; результат содержит элементы из первого множества, которые не принадлежат второму;
* – пересечение; результат содержит элементы, общие для обоих множеств;
= – проверка эквивалентности; возвращается True, если множества эквивалентны;
<> – проверка неэквивалентности; возвращается True, если множества неэквивалентны;
<= – проверка вхождения; возвращается True, если первое множество включено во второе;
>= – проверка вхождения; возвращается True, если второе множество включено в первое;
in – проверка принадлежности; возвращается True, если элемент входит в множество;
include(s,i) – включает новый элемент i в множество s;
18
exclude(s,i) – исключает элемент i из множество s.
Процедуры include и exclude отличаются высокой скоростью выполнения, т.к. оптимизированы на работу с одиночными элементами.
Рассмотрим на примере операции работы с множествами. Пример (выполнение действий с множествами):
var
s1,s2,s3,s : set of 0..9; f : boolean;
begin
s1 := [0..3,6]; {Пример присвоения}
s2 := [4,5];
s3 := [3..9];
s := s1+s2; {s = [0..6] - сложение}
s := s2+s3; {s = [3..9] - отброс дублирования} s := s1*s3; {s = [3,6] - пересечение}
s := s3-s2; {s = [3,6..9] - вычитание} f := s1=s2 {f = False}
f := s1<>s2; {f = True} f := s2<=s3; {f = True} f := s1>=s3; {f = False} f := 4 in s1; {f = False}
include(s1,4); {s1 = [0..4,6]} exclude(s1,2); {s1 = [0..1,3..4,6]}
end;
1.13 Пользовательские типы
При работе со структурированными типами во многих случаях удобнее при описании переменных, констант использовать заранее созданные пользовательские типы. Формат описания типа:
<идентификатор типа> = <описание типа>;
Описание типов производится в секции type. Вновь созданный тип становится равноправным со стандартными типами, поэтому его использование не требует отдельного рассмотрения.
Примеры описания типов:
type
Mas = array[1..10] of real;
Matrix = array[1..10,1..10] of integer; Figure = record
X,Y : real; case integer of
0: (Side : real); {квадрат}
1: (Side1,Side2 : real){прямоугольник};
2: (Radius : real); {Окружность}
end;
FigureFile = file of Figure;
19
Month = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec); Alfa = set of 'A'..'Z';
1.14 Файлы
Файл представляет собой последовательность компонент, размещенных на внешнем носителе. Для работы с файлами требуется в первую очередь описать переменную, которая будет связана с файлом:
<идентификатор> : {TextFile | file | file of <тип>};
Порядок работы с файлами приведен ниже в таблице (считаем, что имеется переменная f)
Действие |
TextFile |
file |
file of … |
Связывание с перемен- |
|
AssignFile(f,<имя файла>); |
|
ной |
|
|
|
Открытие файла на |
reset(f); |
reset(f[,<число байт>]); |
reset(f); |
чтение |
|
|
|
Открытие файла на за- |
rewrite(f); |
rewrite(f[,<число байт>]); |
rewrite(f); |
пись |
|
|
|
Чтение |
read(f,…); |
blockread(f, …, <количество> |
read(f,…); |
|
readln(f,…); |
[,<cчитано>]); |
|
Запись |
write(f,…); |
blockwrite(f, …, <количество> |
write(f,…); |
|
writeln(f,…); |
[,<записано>]); |
|
Закрытие |
|
CloseFile(f); |
|
файла |
|
|
|
При работе с файлами второго типа <число байт> указывает, количество байт, считываемых или записываемых в файл за одну операцию. <количество> указывает на размер чтения или записи в байтах. Для определения этого параметра можно воспользоваться функцией SizeOf(), в качестве параметра которой задается тип или идентификатор.
При считывании данных из файла можно воспользоваться функцией Eof(), которая показывает, был ли достигнут конец файла.
При работе с файлами первого типа возможно использование функции Append(), открывающую файл на дозапись.
Для файлов второго и третьего типа возможно использование функций Seek() – смена позиции в файле, FilePos() – определение текущей позиции в файле, FileSize() – размер файла. Также возможно проведение записи в файл, открытый с помощью функции Reset(), обеспечивающее модификацию и дозапись файла.
Пример 1 (запись данных о людях в файл различными способами и алгоритм считывания данных из файла):
procedure TForm1.Button1Click(Sender: TObject); type
MyRec = record
Name : ShortString; // Обратить внимание на ShortString
20
Height : integer; Weight : real;
end; var
Mas : array[1..100] of MyRec; f1 : TextFile;
f2 : file;
f3 : file of MyRec; i,n : integer;
begin
n := ???;
for i := 1 to n do begin
Mas[i].Name := ???;
Mas[i].Height := ???;
Mas[i].Weight := ???;
end;
AssignFile(f1,'data.txt');
rewrite(f1);
for i := 1 to n do begin
writeln(f1, Mas[i].Name); writeln(f1, Mas[i].Height); writeln(f1, Mas[i].Weight);
end;
CloseFile(f1);
AssignFile(f2,'data.dat');
rewrite(f2,1); for i := 1 to n do begin
blockwrite(f2, Mas[i].Name, SizeOf(Mas[i].Name)); blockwrite(f2, Mas[i].Height, SizeOf(Mas[i].Height)); blockwrite(f2, Mas[i].Weight, SizeOf(Mas[i].Weight));
end;
CloseFile(f2);
AssignFile(f3,'data.rec');
rewrite(f3);
for i := 1 to n do write(f3, Mas[i]);
CloseFile(f3); n := 0; reset(f3);
while not Eof(f3) do begin
inc(n);
read(f3, Mas[n]); end; CloseFile(f3);
end;