Одна из задач, решаемых свойствами класса - предоставление программисту доступа к одной и той-же информации различным образом. При этом исходная информация может генерироваться и преобразовываться по различным алгоритмам.
Массив называется разреженным (sparse), если данные в нем представлены не непрерывно, а фрагментарно. Неприсвоенные элементы разреженного массива память не занимают и попытка их чтения либо генерирует ошибку, либо возвращает значение по умолчанию. Разработать класс для манипуляций с разреженным числовым массивом следующего вида:
TNULL=low(longint);
TSparseArray=class
private
...
public
property item[index:longint]:extended read ... write ...; default;
{
Разреженный числовой массив, индексируется от low(longint)+1 до high(longint).
Попытка получения неприсвоенного значения должна возвращать 0.0
}
property sparse[index:longint]:boolean read ... write ...;
{
Чтение свойства возращает истину, если элемент по указанному индексу отсутствует.
Запись истины удаляет соответствующий элемент массива.
}
function first:integer;
{
Инициализирует итератор, возвращает индекс первого существующего элемента массива.
Возвращает TNULL, если элементов в массиве нет
}
function next:integer;
{
Возвращает индекс следующего существующего элемента массива.
Возвращает TNULL, если элементов в массиве больше нет
}
function last:integer;
{
Инициализирует итератор, возвращает индекс последнего существующего элемента массива.
Возвращает TNULL, если элементов в массиве нет
}
function prev:integer;
{
Возвращает индекс предыдущего существующего элемента массива.
Возвращает TNULL, если элементов в массиве больше нет
}
property sum:extended read ...; // возвращает сумму существующих элементов массива
property mul:extended read ...; // возвращает произведение существующих элементов массива
property avg:extended read ...; // возвращает среднее арифметическое существующих элементов массива
property geomean:extended read ...; // возвращает среднее геометрическое существующих элементов массива
procedure store(fn:string); // сохраняет содержимое массива в файл
procedure load(fn:string); // загружает содержимое массива из файла. Предыдущее содержимое массива очищается.
procedure push(s:tAbstractStack); // сохраняет содержимое массива на вершину переданного стека.
procedure pop(s:tAbstractStack); // извлекает содержимое массива с вершины переданного стека. Предыдущее содержимое массива очищается.
end;
Провести комплексную проверку разработанного класса.