
- •Основы программирования
- •Введение
- •Основы delphi
- •Общая технология программирования
- •Язык программирования
- •Объектно-ориентированное программирование
- •Визуальное программирование
- •Событийно управляемое программирование
- •Windows-приложение
- •Среда программирования
- •Первоначальные сведения о проекте приложения
- •Встроенный отладчик
- •Использование встроенных классов
- •Иерархия классов
- •Использование палитры компонентов и инспектора объектов
- •Использование графики
- •Основные инструменты
- •Основные характеристики шрифтов
- •Графические данные и палитра
- •Некоторые общие свойства компонентов
- •Сохранение проекта
- •Построение простейшего проекта
- •Понятие исключительной ситуации
- •Введение в object pascal
- •Структура приложения
- •Структура программы-проекта
- •Структура модуля
- •Пример 1
- •Описания программных элементов
- •Программные элементы и адреса памяти
- •Области видимости
- •Правила записи имен
- •Время жизни идентификаторов
- •Использование локальных переменных в примере 1
- •Использование глобальных переменных в примере 1
- •Простые типы
- •Целые типы
- •Целые типы
- •Некоторые операции с целым типом
- •Символьные типы
- •Логические типы
- •Тип перечень
- •Интервальный тип
- •Вещественный тип
- •Вещественные типы
- •Некоторые операции с вещественным типом
- •Тип дата-время
- •Выражения
- •Константы
- •Типизированные константы.
- •Переменные
- •Операции
- •Унарная операция not (отрицание)
- •Логические операции and, or, xor
- •Функции
- •Порядок вычисления выражений
- •Виды операторов
- •Простые операторы
- •Составной оператор
- •Операторы условного перехода
- •Оператор if
- •Пример 2
- •Оператор case
- •Пример 3
- •Использование enter в примере 3
- •Операторы цикла
- •Оператор цикла for
- •Пример 4
- •Оператор цикла while
- •Пример 5
- •Оператор цикла repeat
- •Пример 6
- •Использование процедур break и continue
- •Пример 7
- •Массивы
- •Статические массивы
- •Динамические массивы
- •Пример 8
- •Пример 9
- •Записи (объединения)
- •Оператор with
- •Пример 10
- •Совместимость и преобразование типов данных
- •Идентичность типов
- •Совместимость типов
- •Совместимость по присваиванию
- •Преобразование типов
- •Операторы обработки исключительных ситуаций
- •Пример 11
- •Множества
- •Операции над множествами
- •Пример 12
- •Вариантный тип данных
- •Процедуры и функции
- •Процедура
- •Функция
- •Рекурсия
- •Формальные и фактические параметры
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Параметры без типа
- •Массивы открытого типа
- •Парамеры по умолчанию
- •Процедура exit
- •Директивы подпрограммы
- •Соглашения по передаче данных
- •Директива forward
- •Директива external
- •Директива assembler
- •Перегруженные подпрограммы
- •Пример 13
- •Инкапсуляция
- •Класс как объектный тип
- •Наследование
- •Области видимости
- •Операции is и as
- •Виды методов
- •Методы virtual и полиморфизм
- •Методы dynamic
- •Методы message
- •Методы abstract
- •Методы override
- •Методы class
- •Пример 14
- •Динамическое создание компонентов
- •Использование класса со счетчиком объектов
- •Отслеживание разрушения объектов
- •События
- •Указатели на методы
- •Пример 15
- •Типы ссылки на класс
- •Свойства
- •Свойства simple
- •Свойства enumerated
- •Свойства set
- •Свойства object
- •Свойства array
- •Задание начальных значений свойствам
- •Пример 16
- •Файловые типы
- •Текстовые файлы
- •Типизированные файлы
- •Файлы без типа
- •Дополнительные процедуры и функции
- •Пример 17
- •Компонент tmainmenu
- •Указатели
- •Пример 18
- •Динамические структуры данных
- •Однонаправленные списки
- •Двунаправленные списки
- •Стеки, очереди
- •Бинарные деревья
- •Пример 19
- •Процедурный тип
- •Программные единицы dll
- •Пример 20
- •Технологии программирования
- •Потоки данных
- •Пример 21
- •Пример 22
- •Интерфейс drag and drop
- •Пример 23
- •Технология drag and dock
- •Пример 24
- •Использование функций windows api при работе с файлами
- •Пример 25
- •Использование отображаемых файлов
- •Пример 26
- •Программные потоки
- •Приоритеты потоков
- •Класс tthread
- •Пример 27
- •Использование блокировки в примере 27
- •Многопоточное приложение в примере 28
- •Проблемы синхронизации потоков
- •Список используемых в примерах компонентов
- •Список используемых компонентов и других классов
- •Библиографический список
- •Оглавление
Массивы
Массив представляет собой фиксированное количество однотипных компонентов, снабженных индексами. Массивы соответствуют, например, векторам (одномерный массив), матрицам (двумерный массив) и др.
Статические массивы
Тип статического массива объявляются следующим образом: Type <Имя> = Array[<тип индекса>] of <тип элеметов>; Например, Type Vekt = Array [1..10] of byte;
В данном случае задан одномерный массив (вектор) состоящий из 10-ти элементов целого типа byte. Отдельные элементы этого массива в программе определяются с помощью индексов, например, если объявлено Var X: vekt;, то в выражениях можно использовать X[1], X[2], ... , X[10]. В квадратных скобках указывается значение индекса, т.е. номер компонента в массиве. Отсчет номеров ведется так, как указано в индексе при объявлении. Пусть объявлено: Var Z: array [-2..2] of integer; - это значит заданы элементы Z[-2], Z[-1], Z[0], Z[1], Z[2] целого типа integer.
В общем случае тип индекса может быть любым порядковым типом. Так, в примере Var Y: array [‘A’..’Z’] of integer; объявлено 26 элементов (по количеству букв в английском алфавите): Y[‘A’], Y[‘B’], ..., Y[‘Z’], выделено 26 ячеек памяти, в которые можно записывать данные типа integer, например Y[‘C’]:=5;. Информацию можно также считывать из этих ячеек памяти - A:=cos(PI + Y[‘C’]);.
Индекс можно определять и таким способом: Var Y:array[Char] of single;, т.е. определено 256 ячеек памяти, в которые можно записывать вещественные числа. Однако имеется ограничение при объявлении массивов: размер памяти, занимаемый одним массивом не должен превышать 2 Гбайта. Так объявление var X:array[LongInt] of integer; синтаксически верно, но превышен размер памяти, который должен быть выделен для этого массива (более 2 Гбайт).
Аналогичные правила действуют и для двумерных массивов, – например, объявление Var A: array[1..2, 1..3] of double; определяет двумерный массив (матрицу), который содержит 2 строки и 3 столбца (всего 6 элементов). Эти элементы записываются в памяти следующим образом: A[1,1], A[1,2], A[1,3], A[2,1], A[2,2], A[2,3], т.е. сначала первая строка матрицы, а затем вторая. Этот массив можно определить и так: A: array[1..2] of array[1..3] of real; или
Type Vekt = array[1..3] of real;
Var A: array[1..2] of vekt;
Разрешается объявлять и использовать многомерные массивы (до семимерных включительно).
Для массивов можно задавать типизированные константы, т.е. задавать начальные значения элементам массива. Например, требуется задать в памяти значения элементов вектора q = (5.2, 6.0, -3.1, 0.8). Это можно осуществить следующим образом: Const q:array[1..4] of real=(5.2,6.0,-3.1,0.8);.
Начальные значения
для двумерного массива, например матрицы
,
можно задать следующим способом:
Type Matr= array[1..2, 1..3] of byte;
Var R:Matr=((3, 7, 5), (8, 11, 6));
При задании значения индекса для элемента какого-либо массива можно использовать выражение соответствующего типа, указанного при объявлении. При этом необходимо следить, чтобы значение этого выражения не выходило за объявленные границы. Например, для элемента объявленной выше матрицы R можно записать R[Succ(i),Pred(j)] (табл. 2), необходимо лишь, чтобы выполнялись для заданной матрицы R условия: 1 Succ(i) 2 и 1 Pred(j) 3.
Если задан массив символов, то типизированную константу можно определять следующим образом:
Const C: array[1..5] of Char= ‘abcde’;
Если два или более массивов имеют один тип, т.е. объявлены с помощью одного описания, то эти массивы можно присваивать друг другу. Например, если объявлено
Type V= array[1..5] of real;
Var A,B:V;, то можно записывать A:=B;.
Однако при следующем описании тех же переменных A и B
Var A:= array[1..5] of real; B:= array[1..5] of real;
записывать A:= B; нельзя.