- •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
36
begin inc(CountPositive); Temp := Temp+A[i];
end;
if CountPositive>0 then begin
Average := Temp/CountPositive; Result := True;
end else
Result := False;
end;
begin
Count1 := Mas1SG.RowCount; for i := 1 to Count1 do
Mas1[i] := StrToInt(Mas1SG.Cells[0,i-1]); Count2 := Mas2SG.RowCount;
for i := 1 to Count2 do
Mas2[i] := StrToInt(Mas2SG.Cells[0,i-1]); ResMemo.Clear;
Sum := Summa(Mas1,Count1);
ResMemo.Lines.Add('Сумма элементов первого массива: '+ IntToStr(Sum));
Sum := Summa(Mas2,Count2);
ResMemo.Lines.Add('Сумма элементов второго массива: '+ IntToStr(Sum));
if AveragePositive(Mas1,Count1,Average) then ResMemo.Lines.Add('Среднее из положительных элементов
первого массива: '+FloatToStr(Average))
else
ResMemo.Lines.Add('В первом массиве положительных элементов нет');
if AveragePositive(Mas2,Count2,Average) then ResMemo.Lines.Add('Среднее из положительных элементов
второго массива: '+FloatToStr(Average))
else
ResMemo.Lines.Add('Во втором массиве положительных элементов нет');
end;
2.18 Локализация имен
При использовании подпрограмм возникает возможность использования в них идентификаторов, которые уже используются в основной программе. Однако при этом требуется четкое представление того, какой из идентификаторов будет использоваться в том или ином фрагменте программы.
Общим правилом для определения доступности идентификаторов является следующее: доступны всегда идентификаторы, расположенные выше по
37
описанию и находящиеся в цепочки вложенности процедур и функций. Таким образом, возможно, например, обращение из процедуры к глобальным переменным основной программы, описанным выше, к переменным других процедур, в которые вложена данная, но невозможно обращение из основной программы к переменным любой из процедур.
Рассмотрим пример:
unit Main; interface
...
implementation var
A,B : integer;
procedure P1; var
A,B : integer;
procedure P1_1; var
A,C : integer; begin
{Доступные переменные}
A := 1; {переменная процедуры P1_1} C := 2; {переменная процедуры P1_1} B := 3; {переменная процедуры P1} Main.A := 4; {переменная модуля Main} Main.B := 5; {переменная модуля Main} {Недоступные переменный}
A из процедуры P1 A,D из процедуры P1_2 E,F из модуля Main
end; {P1_1}
procedure P1_2; var
A,D : integer; begin
{Доступные переменные}
A := 1; {переменная процедуры P1_2} D := 2; {переменная процедуры P1_2} B := 3; {переменная процедуры P1} Main.A := 4; {переменная модуля Main} Main.B := 5; {переменная модуля Main} {Недоступные переменный}
A из процедуры P1 A,С из процедуры P1_1 E,F из модуля Main
end; {P1_2} begin
{Доступные переменные}
A := 1; {переменная процедуры P1}
38
B := 2; {переменная процедуры P1} Main.A := 3; {переменная модуля Main} Main.B := 4; {переменная модуля Main} {Недоступные переменный}
A,С из процедуры P1_1
A,D из процедуры P1_2 E,F из модуля Main
end; {P1}
var
E,F : integer; begin
{Доступные переменные}
A := 1; {переменная модуля Main} B := 2; {переменная модуля Main} E := 3; {переменная модуля Main} F := 4; {переменная модуля Main} {Недоступные переменный}
A,B из процедуры P1
A,С из процедуры P1_1
A,D из процедуры P1_2 end. {модуля Main}
Таким образом, в передах видимости оказываются только переменные, описанные выше в основной программе, либо в текущей процедуре.
2.19 Модули
Во многих случаях, при разработке программ, размещение некоторой части переменных, констант, функций целесообразно проводить в модулях (например, библиотека функций).
Модуль – это автономно компилируемая программная единица, включающая в себя различные компоненты интерфейсного раздела, и, возможно, некоторые исполняемые операторы инициирующего раздела. Реализация процедур и функций модуля описывается в исполняемом разделе.
Каждый модуль описывается в отдельном файле. Формат модуля:
unit <идентификатор модуля>; interface
<описание типов, констант, переменных, подпрограмм> implementation
<реализация предоставляемых модулем подпрограмм, описание локальных типов, констант, переменных, подпрограмм>
[begin
<раздел инициализации>] end.
<идентификатор модуля> должен совпадать с именем файла, в котором хранится данный модуль.
39
Все компоненты, описанные в разделе interface, являются доступными для всех программ и модулей, использующих данный модуль.
При описании подпрограмм, в разделе interface приводится только заголовок подпрограммы. В разделе implementation заголовок каждой из подпрограмм повторяется, после чего происходит описание ее реализации. При повторении заголовка допускается опускание параметров подпрограммы. Если параметры не опускаются, то заголовок должен в точности соответствовать заголовку раздела interface.
Раздел инициализации, чаще всего, используется для задания начальных значений переменных, описанных в модуле. Выполнение данного раздела производится только один раз, даже если в разрабатываемой программе имеется несколько ссылок на данный модуль.
Примечание: в среде Delphi раздел инициализации можно начать используя ключевое слово initialization. Кроме того, после данного раздела может идти раздел завершения (ключевое слово finalization).
Для подключения модуля к основной программе, а также для использования одним модулем другого, применяется ключевое слово uses, после которого указывается список идентификаторов подключаемых модулей.
При использовании одного модуля другим, подключение модулей с использованием ключевого слова uses может производиться как в разделе interface, так и в разделе implementation. Однако не допускается взаимное подключение модулей через разделы interface. При необходимости взаимного подключения модулей, как минимум одно из подключений должно располагаться в разделе implementation. Выбор вариантов подключения производится на основе того, в каком из модулей необходим доступ к ресурсам другого модуля в разделе interface. В случае, когда обоим модулям требуется подключение в разделе interface, создается третий модуль, в который переносятся взаимно-зависимые части.
Являясь независимой программной единицей, модуль имеет свое пространство идентификаторов. Если в программе или модуле, использующем другой модуль, имеется одноименный идентификатор, то ему отдается предпочтение. Для обращения к идентификатору подключаемого модуля, в этом случае, требуется уточнение, записываемое как:
<идентификатор модуля>.<идентификатор компонента>
Пример:
unit Modul1; interface type
Mas : array[1..100] of integer; var
X : integer;
procedure InputMas(var A : Mas; n : integer); implementation
procedure InputMas(var A : Mas; n : integer);