Лабораторная работа 2.
Свойства, свойства-массивы.

Информация

Одна из задач, решаемых свойствами класса - предоставление программисту доступа к одной и той-же информации различным образом. При этом исходная информация может генерироваться и преобразовываться по различным алгоритмам.

Задание

Массив называется разреженным (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;

Провести комплексную проверку разработанного класса.