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

Информация

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

Задание

Разработать класс для манипуляций с числовым рядом следующего вида:

TFloatSequence=class
private
 ...
public
 property item[index:integer]:extended read ... write ...;default; 
  {
   Числовой ряд, индексируется от 0.
   Попытка получения неприсвоенного значения за пределами ряда должна генерировать ошибку. 
   Доступ к неприсвоенным элементам разреженного ряда должен возвращать значение 0.
   Ряд называется разреженным (sparse), если в нем доступны элементы с неприсвоенными значениями, индекс которых
   меньше, чем индекс хотя-бы одного элемента с присвоенным значением.
   Например, если в ряду присвоены значения только элементам с индексами 7 и 100, то он является разреженным,
   при этом получение значений элементов с индексами от 0 до 6 и от 8 до 99 возвратит ноль, 
   а чтение содержимого элементов с индексами от 101 и выше - сгенерирует ошибку.
  }
 property count:integer read ... write ...; 
  {
   Количество элементов числового ряда, равен 0 для пустого ряда.
   Значение свойства может изменяться как напрямую, так и косвенно. Прямое присвоение уменьшает или увеличивает 
   количество элементов ряда, изменяя, возможно, его разреженность. Косвенное изменение может реализовываться за счет
   присвоения значений элементам ряда. Например, для пустого ряда присвоение значение элементу с индексом 200 установит
   значение count равным 201.
  }
 property sparse:boolean read ...; // возвращает истину, если ряд является разреженным
 property sum:extended read ...; // возвращает сумму элементов ряда
 property mul:extended read ...; // возвращает произведение элементов ряда
 property avg:extended read ...; // возвращает среднее арифметическое элементов ряда
 property geomean:extended read ...; // возвращает среднее геометрическое элементов ряда

 procedure fact(n); // генерирует факториальный ряд из n элементов. Предыдущее содержимое ряда очищается.
 procedure fibb(n); // генерирует ряд чисел фиббоначи из n элементов. Предыдущее содержимое ряда очищается.
 procedure store(fn:string); // сохраняет содержимое ряда в файл
 procedure load(fn:string); // загружает содержимое ряда из файла. Предыдущее содержимое ряда очищается.
 procedure push(s:tAbstractStack); // сохраняет содержимое ряда на вершину переданного стека.
 procedure pop(s:tAbstractStack); // извлекает содержимое ряда с вершины переданного стека. Предыдущее содержимое ряда очищается.
end;

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