- •Содержание
- •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
13
for j := 1 to 2 do A[i,j] := ???;
n1 := 1;
n2 := 2;
MinA := sqrt(sqr(A[n1,1]-A[n2,1])+sqr(A[n1,2]-A[n2,2])); for i := 1 to n-1 do
for j := i+1 to n do begin
Temp := sqrt(sqr(A[i,1]-A[j,1])+sqr(A[i,2]-A[j,2])); if MinA>Temp then
begin
MinA := Temp; n1 := i;
n2 := j; end;
end;
<вывод n1 и n2>; end;
Пример 3 (формирование одномерного массива из положительных чи-
сел):
procedure TForm1.Button1Click(Sender: TObject); var
A : array[1..10,1..10] of integer; B : array[1..100] of integer; Count,n,m,i,j : integer;
begin
n := ???;
m := ???;
for i := 1 to n do for j := 1 to m do
A[i,j] := ???;
Count := 0;
for i := 1 to n do for j := 1 to m do
if A[i,j]>0 then begin
inc(Count); B[Count] := A[i,j];
end;
for i := 1 to Count do <вывод B[i]>;
end;
1.10 Строки
Строковый тип String можно рассматривать как одномерный массив символов. Поэтому обращение к конкретному символу строки можно осу-
14
ществлять по его индексу, например, S[12] – обращение к 12-му символу строки S.
Максимальную длину строки можно задать при объявлении переменной,
например, S : string[80].
Для строк допустимо выполнение операции сложения, например,
S := 'Первая '+'строка'.
Так как каждому символу соответствует определенный числовой код, то строки можно сравнивать между собой, например, 'AB'>'A' значение True, т.к. более короткая строка имеет меньший код.
Для работы со строками могут применяться стандартные функции и процедуры:
Функция |
Описание |
Length(S) |
Определяет длину строки в символах |
Pos(SubS,S) |
Поиск подстроки SubS в строке S |
Copy(S,i,n) |
Копирование n символов из строки S начиная с позиции i |
Concat(S1[,S2…]) |
Объединение строк |
Delete(S,i,n) |
Удаление n символов из строки S начиная с позиции i |
Insert(SubS,S,i) |
Вставка подстроки SubS в строку S начиная с позиции i |
Str(X[:m:n],S) |
Перевод числа X в строку S |
Val(S,X,c) |
Перевод строки S в число X. с – код результата перевода |
Пример (разложение строки на отдельные слова):
procedure TForm1.Button1Click(Sender: TObject); var
S : string;
Mas : array[1..100] of string; i,n : integer;
begin
S := ???;
n := 0; repeat
i := Pos(' ',S); if i>0 then begin
inc(n);
Mas[n] := Copy(S,1,i-1); Delete(S,1,i);
end; until i=0;
if Length(S)>0 then begin
inc(n); Mas[n] := S;
end;
for i := 1 to n do <вывод Mas[i]>;
end;
15
1.11 Записи
В отличии от массива, тип-запись включает ряд компонент, называемых полями, которые могут быть различных типов. Формат описания:
<идентификатор записи> : record <идентификатор поля1> : <тип поля1>;
…
<идентификатор поляN> : <тип поляN>; end;
Количество и тип полей записи может быть произвольным. Для обращения к полю записи используется формат:
<идентификатор записи>.<идентификатор поля>
Если требуется обращение к нескольким полям записи подряд, то можно для упрощения использовать оператор WITH:
WITH <идентификатор записи> do <оператор>
WITH <идентификатор записи> do begin
<оператор1>
…
<операторN> end;
Пример (нахождение среднего роста людей старше 50 лет):
procedure TForm1.Button1Click(Sender: TObject); var
People : array[1..100] of record
Name : string; Age : integer; Height : integer;
end; i,CountPeople,SumHeight,CountSelect : integer;
begin
CountPeople := ???;
for i := 1 to CountPeople do begin
People[i].Name := ???;
People[i].Age := ???;
People[i].Height := ???;
end;
CountSelect := 0; SumHeight := 0;
for i := 1 to CountPeople do if People[i].Age>50 then begin
16
inc(CountSelect);
SumHeight := SumHeight+ People[i].Height; end;
if CountSelect>0 then
<вывод SumHeight/CountSelect> else
<вывод 'таких людей нет'>;
end;
При работе с записью можно применять вариантную часть, которая может быть одна на всю запись и располагается после описания всех полей:
<идентификатор записи> : record
…
case [<идентификатор поля>:]<тип поля> of
<вариант выбора1> : (<идентификатор поля> : <тип поля>);
…
<вариант выбораN> : (<идентификатор поля> : <тип поля>); end;
Для всех вариантов отводится общая область памяти, поэтому имеется возможность преобразовывать данные одного типа в другой, однако при неправильном обращении к полю имеется возможность ошибки.
Пример (нахождение площади фигур):
procedure TForm1.Button1Click(Sender: TObject); var
Figures : array[1..100] of record X,Y : real;
case Vid : integer of
0: (Side : real); {квадрат}
1: (Side1,Side2 : real){прямоугольник};
2: (Radius : real); {круг}
end;
Count,i : integer; s : string;
begin
Count := ???;
for i := 1 to Count do with Figures[i] do begin
Vid := ???;
X := ???;
Y := ???;
case Vid of
0 : Side := ???;
1 : begin
Side1 := ???;
Side2 := ???;
end;
2 : Radius := ???;
end;