- •1.1 Общие положения
- •1.2 Количественные оценки
- •1.3 Устройство ПК
- •1.4 Программное обеспечение
- •1.5 Автоматизированные и информационные системы
- •1.6 Разное
- •1.7 Алгоритм
- •2. PASCAL
- •2.1 Алфавит
- •2.2 Типы данных
- •2.3 Переменные
- •2.4 Константы
- •2.5 Стандартные функции
- •2.6 Выражения
- •2.7 Операторы
- •2.7.1 Оператор присваивания
- •2.7.2 Составной оператор
- •2.7.3 Условный оператор IF
- •2.7.4 Условный оператор CASE
- •2.7.5 Оператор цикла FOR
- •2.7.6 Оператор цикла REPEAT
- •2.7.7 Оператор цикла WHILE
- •2.8 Одномерные массивы
- •2.9 Многомерные массивы
- •2.10 Строки
- •2.11 Записи
- •2.12 Множества
- •2.13 Пользовательские типы
- •2.14 Файлы
- •2.15 Перечисляемый тип
- •2.16 Тип-диапазон
- •2.17 Функции и процедуры
- •2.18 Локализация имен
- •2.19 Модули
- •2.20 Операторы прерывания
- •2.21 Комментарии
- •2.22 Указатели
- •2.23 Динамические массивы Delphi
- •3. ОСНОВНЫЕ ПОЛОЖЕНИЯ ООП
- •4. БАЗОВЫЕ КЛАССЫ DELPHI
- •4.1 TObject
- •4.2 Exception
- •4.3 TList
- •4.4 TPersistent
- •4.5 TCollection
- •4.6 TCollectionItem
- •4.7 TStrings
- •4.8 TStringList
- •4.9 TGraphicsObject
- •4.10 TPen
- •4.11 TBrush
- •4.12 TCanvas
- •4.13 TGraphics
- •4.14 TPicture
- •4.15 TComponent
- •4.16 TControl
- •4.17 TWinControl
- •4.18 TGraphicControl
- •4.19 TTimer
- •4.20 TThread
- •4.21 TTreeView
- •4.22 TTreeNodes
- •4.23 TTreeNode
- •4.24 TForm
- •4.25 TMainMenu
- •4.26 TMenuItem
- •4.27 TStatusBar
- •4.28 TStatusPanels
- •4.29 TStatusPanel
- •4.30 TToolBar
- •4.31 TToolButton
- •4.32 TActionList
- •4.33 TAction
27
2 : ResMemo.Lines.Add(IntToStr(i)+' - круг, S='+ FloattoStr(Pi*sqr(Radius)));
end;
end;
2.12 Множества
Множества – это наборы однотипных логически связанных друг с другом объектов. Для описания множества используется следующий формат:
<идентификатор> = set of <начало> .. <окончание> <идентификатор> = set of (<элемент1> [,<элемент2> …])
Элементы, описываемый <начало>, <окончание> должны быть порядкового типа. Количество элементов множества не может превышать 256.
Множества часто используются для проверок установки тех или иных флагов объектов.
Операции с множествами:
•+ – сложение; результат содержит элементы первого множества, дополненные недостающими элементами второго множества;
•- – вычитание; результат содержит элементы из первого множества, которые не принадлежат второму;
•* – пересечение; результат содержит элементы, общие для обоих множеств;
•= – проверка эквивалентности; возвращается True, если множества эквивалентны;
•<> – проверка неэквивалентности; возвращается True, если множества неэквивалентны;
•<= – проверка вхождения; возвращается True, если первое множество включено во второе;
•>= – проверка вхождения; возвращается True, если второе множество включено в первое;
•in – проверка принадлежности; возвращается True, если элемент входит в множество;
•include(s,i) – включает новый элемент i в множество s;
•exclude(s,i) – исключает элемент i из множество s.
Процедуры include и exclude отличаются высокой скоростью выполнения, т.к. оптимизированы на работу с одиночными элементами.
Рассмотрим на примере операции работы с множествами. Пример (выполнение действий с множествами):
var
s1,s2,s3,s : set of 0..9; f : boolean;
begin
s1 := [0..3,6]; {Пример присвоения}
28
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;
2.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;
Month = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec); Alfa = set of 'A'..'Z';
2.14 Файлы
Файл представляет собой последовательность компонент, размещенных на внешнем носителе. Для работы с файлами требуется в первую очередь описать переменную, которая будет связана с файлом:
29
<идентификатор> : {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 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 := MasSG.RowCount;
30
for i := 1 to n do begin
Mas[i].Name := MasSG.Cells[0,i-1]; Mas[i].Height := StrToInt(MasSG.Cells[1,i-1]); Mas[i].Weight := StrToFloat(MasSG.Cells[2,i-1]);
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;
Пример 2 (обработка файла с множествами):
procedure TForm1.Button1Click(Sender: TObject); var
fIn,fOut : TextFile;
Processing : set of (DelEndSpace, DelSomeSpace, DelEmptyLine); s : string;
EndCycle : boolean; i : integer;
begin
Processing := [];
if EndSpaceCB.Checked then
Processing := Processing+[DelEndSpace]; if TwoSpaceCB.Checked then