- •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
19
•в теле цикла должно быть изменение величин, входящих в условие, иначе
может получиться “вечный цикл”. Пример (xk/k < a {поиск k}):
var
k : integer; x,a,p : real;
begin
a := StrToFloat(AEdit.Text); x := StrToFloat(XEdit.Text); k := 1;
p := x;
while p/k>=a do begin
p :=p*x; inc(k);
end;
KEdit.Text := IntToStr(k); end;
2.8 Одномерные массивы
Массив представляет собой фиксированное количество упорядоченных однотипных компонент, снабженных индексами. Формат определения массива:
<идентификатор1>[, <идентификатор2>…] : array [<тип индекса>] of <тип компонента>;
Компоненты массива могут быть любого типа, индексы могут быть любого порядкового типа и записываются в формате
<начальный индекс> … <конечный индекс>
В качестве начального и конечного индексов не могут использоваться переменные (но могут использоваться константы).
Для обращения к компоненту массива требуется указать идентификатор массива с указанием в квадратных скобках индекса компонента.
Все значения компонентов одного массива можно присвоить компонентам другого массива только в том случае, если эти два массива одного и того же типа.
Для обработки одномерных массивов чаще всего используются итерационные алгоритмы. В приведенном ниже примере рассматриваются стандартные алгоритмы: ввода компонентов, поиска суммы элементов массива, минимального элемента массива, индекса максимального элемента массива, минимального среди положительных чисел массива, сортировки массива, а также некоторые допустимые и недопустимые действия.
Пример (для пояснения массив 3 7 2 8 1 4 9):
20
procedure TForm1.Button1Click(Sender: TObject); var
A,B : array[1..100] of integer; C : array[1..100] of integer;
n,i,j,k,TempA,MinA,MaxIndexA,SumA : integer; key : boolean;
const
D : array[1..10] of integer = (1,2,3,4,5,6,7,8,9,10); begin
n := AStringGrid.RowCount; for i := 1 to n do
A[i] := StrToInt(AStringGrid.Cells[0,i-1]);
B:= A; {Допустимо}
C:= A; {Недопустимо}
{Нахождение суммы элементов массива} SumA := 0;
for i := 1 to n do SumA := SumA+A[i];
SumEdit.Text := IntToStr(SumA); {Нахождение минимального элемента массива} MinA := A[1];
for i := 2 to n do if MinA>A[i] then
MinA := A[i];
MinEdit.Text := IntToStr(MinA);
{Нахождение индекса максимального элемента массива} MaxIndexA := 1;
for i := 2 to n do
if A[MaxIndexA]<A[i] then MaxIndexA := i;
MaxIndexEdit.Text := IntToStr(MaxIndexA);
{Нахождение минимального из положительных чисел массива} key := False;
for i := 1 to n do if A[i]>0 then
if not key then begin
MinA := A[i]; key := True;
end else
if MinA>A[i] then MinA := A[i];
if key then
MinPositiveEdit.Text := IntToStr(MinA) else
MinPositiveEdit.Text := 'Положительных элементов нет'; {Сортировка массива по возрастанию}
for i:= 1 to n-1 do begin
k := i;
for j := i+1 to n do if A[k]>A[j] then
21
k := j; TempA := A[i]; A[i] := A[k]; A[k] := TempA;
end;
for i := 1 to n do
SortUpSG.Cells[0,i-1] := IntToStr(A[i]); {Сортировка массива по убыванию}
i := 1; while i<n do
if A[i]<A[i+1] then begin
TempA := A[i];
A[i] := A[i+1];
A[i+1] := TempA; if i>1 then
dec(i) else
inc(i);
end else
inc(i);
for i := 1 to n do
SortDownSG.Cells[0,i-1] := IntToStr(A[i]);
end;
2.9 Многомерные массивы
Многомерные массивы отличаются от одномерных заданием нескольких типов индексов вместо одного, например:
A : array[1..2,1..10,1..5] of integer;
При обращении к компоненту многомерному массиву требуется указать через запятую индекс компонента по каждой из размерностей. Размерность массива может быть любой.
При обработке многомерных массивов, в большинстве случаев, требуется применение нескольких вложенных циклов, количество которых определяется размерностью массива.
Пример 1 (нахождение минимального элемента массива, подсчет сумм элементов массива по строкам и столбцам, вывод в табличной форме):
procedure TForm1.Button1Click(Sender: TObject); var
A : array[1..10,1..10] of integer; n,m,i,j,MinA : integer;
C : array[1..3,1..3] of integer = ((1,2,3),(4,5,6),(7,8,9)); begin
n := AStringGrid.RowCount;
22
m := AStringGrid.ColCount;
for i |
:= 1 |
to |
n |
do |
for |
j := |
1 to |
m do |
|
A[i,j] |
:= |
StrToInt(AStringGrid.Cells[j-1, i-1]); |
||
{Нахождение минимального элемента массива} |
||||
MinA := A[1,1]; |
|
|||
for i := 1 |
to |
n do {Обратить внимание на начало с 1 а не с 2} |
||
for |
j := |
1 to |
m do |
|
if MinA>A[i,j] then |
||||
|
MinA := |
A[i,j]; |
||
MinEdit.Text := |
IntToStr(MinA); |
|||
{Подсчет сумм |
элементов по строкам} |
|||
for i := 1 |
to |
n do |
||
begin |
|
|
0; |
|
A[i,m+1] := |
m do |
|||
for |
j := |
1 to |
||
A[i,m+1] := |
A[i,m+1]+A[i,j]; |
|||
end; |
|
|
элементов по столбцам} |
|
{Подсчет сумм |
||||
for j |
:= 1 |
to |
m+1 do |
|
begin |
|
|
0; |
|
A[n+1,j] := |
n do |
|||
for |
i := |
1 to |
||
A[n+1,j] := |
A[n+1,j]+A[i,j]; |
|||
end; |
:= 1 |
to |
n+1 do |
|
for i |
||||
for |
j := |
1 to |
m+1 do |
ResStringGrid.Cells[j-1,i-1] := IntToStr(A[i,j]);
end;
Пример 2 (нахождение наиболее близко расположенных городов, заданных своими координатами):
procedure TForm1.Button1Click(Sender: TObject); var
A : array[1..100,1..2] of integer; n,i,j,n1,n2 : integer;
MinA,Temp : real; begin
n := AStringGrid.RowCount; for i := 1 to n do
for j := 1 to 2 do
A[i,j] := StrToInt(AStringGrid.Cells[j-1,i-1]); 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;