- •Глава 4. Компоненты 30
- •Глава 5. Основы программирования 37
- •Часть I. Delphi и работа в Интегрированной Среде
- •Глава 1. Объектно-ориентированное программирование
- •1.1. Основные понятия и определения
- •1.2. Визуальное программирование интерфейса
- •1.3. Общие вопросы построения программ
- •Глава 2. Проекты Delphi
- •2.1.Файлы проекта
- •2.2.Структура файла головной программы
- •2.3. Окно Интегрированной Среды Разработки Delphi
- •2.4. Панель главного меню и всплывающие меню
- •2.5. Форма и компоненты
- •2.5.1.Окно формы
- •2.5.2. Окно Редактора Кода
- •2.5.3. Инспектор Объектов
- •2.6. Структура модуля приложения
- •Глава 3. Элементы языка Delphi
- •3.1.Типы данных
- •3.1.1. Целый тип
- •3.1.2.Вещественный тип
- •3.1.3. Символьный тип
- •3.1.4. Строковый тип
- •3.1.5. Логический тип
- •3.2. Переменная
- •3.3. Константы
- •3.3.1.Числовые константы
- •3.3.2. Строковые и символьные константы
- •3.3.3. Логические и именованные константы
- •3.4. Инструкция присваивания
- •3.5. Стандартные функции
- •3.5.1.Математические функции
- •Глава 4. Компоненты
- •4.1. Форма и компоненты на форме
- •4.2. Событие и процедура обработки событий
- •Глава 5. Основы программирования
- •5.1. Сохранение проекта, его повторное открывание
- •5.2. Стиль программирования
- •5.3. Порядок разработки проекта
- •5.4. Управляющие структуры языка Delphi
- •5.4.1. Инструкция if
- •5.4.2. Инструкция case
- •5.5. Циклы
- •5.5.1. Инструкция for
- •5.5.2. Инструкция while
- •5.5.3. Инструкция repeat
- •5.5.4. Инструкция goto
- •5.6. Процедуры и функции
- •5.6.1. Структура функции
- •5.6.2. Структура процедуры
- •5.6.3. Ввод и вывод данных в диалоговых окнах
- •5.6.4. Запись инструкций программы
- •5.6.5. Отладка программы
- •5.7. Операции со строками
- •5.7.1. Стандартные функции и процедуры работы со строками
- •5.7.2. Использование операций со строками
- •5.8. Массивы
- •5.8.1. Объявление массива
- •5.8.2. Операции с массивами
- •5.8.3. Стандартные функции обработки массивов
- •5.8.4. Многомерные массивы
5.8.4. Многомерные массивы
Можно объявлять и обрабатывать многомерные массивы, т.е. массивы, элементами которых являются массивы. Например, двумерный массив можно объявить таким образом:
Var A2:array[1..10]of array[1..3]of integer;
Этот оператор описывает двумерный массив, который можно представить себе как таблицу, состоящую из 10 строк и 3 столбцов. То же самое можно объявить более компактно:
Var A2: array[l..10,1..3] of integer;
Обычно используется именно такая форма объявления многомерных массивов. Как и в одномерных массивах, элементы могут иметь любой тип, и индексы тоже могут иметь любой ограниченный тип.
Доступ к значениям элементов многомерного массива обеспечивается через индексы, перечисляемые через запятую. Например, А2[4,3] – значение элемента, лежащего на пересечении четвертой строки и третьего столбца.
Так же, как и в случае одномерных массивов, можно определять не непосредственно переменные типа многомерных массивов, а сначала определять соответствующий тип, а затем – переменные или типизированные константы этого типа. Например:
type АrЗ = array[1..4,1..3,1..2] of integer;
var A1,A2: АrЗ;
const A3: Ar3=(((0,1), (2,3), (4,5)),
((6,7), (8,9), (10,11)),
((12,13), (14,15), (16,17)),
((18,19), (20,21), (22,23)));
При задании начальных условий список значений по каждой размерности заключается в скобки. Приведенный выше пример типизированной константы создает массив A3, четыре строки которого являются матрицами вида (рис. 5.25).
0 |
1 |
|
6 |
7 |
|
12 |
13 |
|
18 |
19 |
2 |
3 |
|
8 |
9 |
|
14 |
15 |
|
20 |
21 |
4 |
5 |
|
10 |
11 |
|
16 |
17 |
|
22 |
23 |
Рис. 5.25. Строки матрицы A3
Например, элемент А3[1,2,1] равен 2, элемент А3[4,1,2] равен 19 и т.д.[1].
В качестве примера можно рассмотреть задачу вычисления среднего арифметического элементов каждой строки двумерного массива, состоящего из четырёх строк и четырёх столбцов (4*4). Диалоговое окно приложения представлено на рис. 5.26.
Рис. 5.26. Диалоговое окно приложения обработки матрицы
Фрагмент модуля приложения:
Type Ar= array [1..4,1..4] of integer;
Var a1: Ar;
Const a: Ar =((4,4,4,4),
(3,3,3,3),
(2,2,2,2),
(1,1,1,1));
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
//a:array[1..4,1..4] of integer;
i,j: integer; //индексы
summ: integer;
sr: real; // среднее
begin
Label1.Caption:='';
// ввод модифицированных значений в массив иначе
// работа будет со старыми значениями
for i := 1 to 4 do
for j := 1 to 4 do
a[i,j]:= StrToInt(StringGrid1.Cells[j,i]);
//обработка массива
for i := 1 to 4 do
begin
summ:=0;
for j := 1 to 4 do
summ:= summ + a[i,j];
sr:= summ/4;
Label1.Caption:= Label1.Caption + 'строка '+
IntToStr(i)+ ' среднее = '+FloatToStr(sr)+#13;
end;
end;
procedure TForm1.Formcreate(Sender: TObject);
var
i,j: Integer;
begin
for I := 1 to 4 do
StringGrid1.Cells[0,i]:=IntToStr(i);//запись номеров
// столбцов
for j := 1 to 4 do
StringGrid1.Cells[j,0]:=IntToStr(j);//запись номеров
// строк
//заполнение начальных значений массива в таблицу
for i := 1 to 4 do
for j := 1 to 4 do
StringGrid1.Cells[j,i]:= IntToStr(a[i,j]);
end;
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);