Одна из задач, решаемых свойствами класса - предоставление программисту доступа к одной и той-же информации различным образом. При этом исходная информация может генерироваться и преобразовываться по различным алгоритмам.
Массив называется разреженным (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;
Провести комплексную проверку разработанного класса.