- •Оглавление
- •Введение
- •Основные этапы решения задач на эвм
- •Анализ постановки задачи и ее предметной области
- •Формальное решение задачи
- •Алгоритмизация
- •Основные средства представления алгоритмов
- •Визуальные алгоритмы
- •Процесс программирования
- •Языки программирования
- •Язык программирования Pascal
- •Среда программирования Delphi
- •Событийная модель ос Windows
- •Концепция объектно-ориентированного программирования
- •Delphi. Основные характеристики продукта
- •Высокопроизводительный компилятор в машинный код
- •Быстрая разработка приложения из прототипов
- •Структурное объектно-ориентированное программирование
- •Создание приложения в Delphi
- •Свойства в Delphi
- •События в Delphi
- •Основные понятия алгоритмического языка Состав языка
- •Основные символы
- •Элементарные конструкции
- •Выражения
- •Комментарии
- •Директивы компилятора
- •Тип данных
- •Приведение типов
- •Простые типы данных Целые типы данных
- •Битовая арифметика
- •Вещественные типы данных
- •Логический тип данных
- •Символьный тип данных
- •Структура программы
- •Константы
- •Переменные
- •Операторы Оператор присваивания
- •Оператор перехода
- •Структурные операторы
- •Операторы управления выполнением цикла
- •Оператор варианта
- •Подпрограммы
- •Перечисляемый тип данных
- •Интервальный тип данных
- •Структурированные типы данных Массивы
- •Строковой тип данных (строки)
- •Множества
- •Файлы. Файловый тип
- •Текстовые файлы
- •Типизированные файлы
- •Нетипизированные файлы
- •Последовательный и прямой доступ к компонентам файла
- •Процедурный тип
- •Вариантный тип
- •Адресный тип. Указатели
- •Динамические переменные
- •Динамические структуры данных
- •Динамические массивы
- •Очереди
- •Статические методы
- •Виртуальные методы
- •Динамические методы
- •Методы обработки сообщений
- •Конструкторы и деструкторы
- •Замещенные методы
- •Абстрактные методы
- •Свойства
- •Обработчики событий
- •Список рекомендуемой литературы
Последовательный и прямой доступ к компонентам файла
Смысл последовательного доступа заключается в том, что в каждый момент времени доступна лишь одна компонента из всей последовательности. Для того, чтобы обратиться (получить доступ) к компоненте с номером К, необходимо просмотреть от начала файла К-1 предшествующую компоненту. После обращения к компоненте с номером К можно обращаться к компоненте с номером К+1.
Файл вначале строится при помощи последовательного добавления компонент в конец, а затем может последовательно просматриваться от начала до конца.
Стандартные процедуры ввода/вывода обеспечивают последовательный доступ. Для типизированных и нетипизированных файлов, можно применять прямой доступ. Прямой доступ означает возможность заранее определить компонент файла, к которому будет применена операция ввода - вывода.
Прямой доступ предполагает, что файл представляет собой линейную последовательность компонент нумеруемую от 0 до n-1, где n – текущее количество компонент в файле. В файле существует текущая позиция – номер компоненты, с которой будет осуществляться следующая операция ввода/вывода. При открытии файла текущая позиция устанавливается в 0.
Реализация прямого доступа осуществляется с помощью подпрограмм:
Функция FileSize(f) – возвращает количество компонент в файле f.
Функция FilePos(f) – возвращает текущую позицию в файле f.
Процедура Seek(f,N) – устанавливает текущую позицию в файле f.
Процедура Truncate(f) – удаляет все компоненты от текущей позиции до конца файла f.
Процедурный тип
Во многих задачах, особенно в задачах вычислительной математики, необходимо передавать имена подпрограмм в качестве параметров подпрограмм. Процедурные типы данных применяются для того, чтобы процедуры и функции можно было понимать как обычные значения, которые можно присваивать переменным и передавать в качестве параметров подпрограмм.
Процедурный тип определяется как заголовок процедуры и функции со списком формальных параметров, но без имени.
Type
<имя_типа>=procedure [(<сп_форм_парам>)] [of object];
<имя_типа>=function [(<сп_форм_парам>)]:<тип_результата>;
Если процедурный тип используется для хранения метода класса, то при описании типа необходимо указать of object.
Для переменных процедурного типа применима операция присваивания:
<имя_перем>:=<имя_подпр.>
<имя_перем> - имя переменной процедурного типа
<имя_подпр.> - имя подпрограммы с таким же заголовком, что и у процедурного типа.
Переменная процедурного типа фактически содержит адрес подпрограммы.
Для переменной процедурного типа применяется специальное значение Nil, которое означает, что переменная не содержит адреса подпрограммы.
Данные процедурного типа применяются, например, для назначения обработчиков события.
Вариантный тип
Иногда возникает необходимость работы с типами данных, которые не могут быть определены во время разработки приложения или тип которых изменяется. Для этого в язык Object Pascal были введены так называемые вариантные типы данных. Переменные вариантного типа могут содержать данные разных типов, кроме структурных типов данных, указателей и типа Int64. Для объявления переменной вариантного типа используется слово variant. Все типы являются совместимыми с типом variant, и компилятор делает необходимые преобразования типов автоматически.
Переменная вариантного типа может принимать два дополнительных значения:
Unassigned - не определено;
Null - значение неизвестного типа или значение потеряно.
Пример
Var
V1, V2, V3, V4, V5: Variant;
I: Integer;
D: Double;
S: string;
begin
V1 := 1; // целое значение V2 := 1234.5678; // действительное значение V3 := 'Это строка!'; // строковое значение V4 := '1000'; // строковое значение V5 := V1 + V2 + V4; // действительное значение, равное 2235.5678
I := V1; // I=1 (целое значение)
D := V2; // D = 1234.5678 (действительное значение) S := V3; // S = 'Это строка!' (строковое значение) I := V4; // I = 1000 (целое значение) S := V5; // S = '2235.5678' (строковое значение)
end;