• массивы, в которых местоположения элементов со значениями, отличными от фонового значения, могут быть описаны математическими закономерностями;
• массивы со случайным расположением элементов.
В случае работы с разреженными массивами вопросы размещения их в памяти реализуются на логическом уровне с учетом их вида.
Помня об этом, классифицируем случай электронной таблицы как структуру данных в виде двухмерного массива со случайным расположением редких элементов на фоне пустых значений.
Отсюда решение. Воспользуемся гибридной динамико-статической структурой хранения клеточной информации с использованием статической матрицы. Применим статическую матрицу записей размером количество строк, умноженное на количество столбцов. Каждый элемент матрицы состоит из записи с двумя полями: поля формата вывода числовых значений (2 байта) и поля указателя на информацию клетки (4 байта).
Структура данных пустой электронной таблицы в виде статической матрицы теперь занимает (2 + 4) * 100 * 100 = 60 000 байт ≈ 59 кбайт. Объем менее 64 кбайт для единой статической структуры соответствует возможностям Turbo Pascal.
Процедура инициализации пустой таблицы будет заключаться в присвоении каждому полю формата значения стандартного формата и указателя значения Nil. Объем памяти, занимаемый статическим массивом, при работе программы никогда не изменяется.
По окончании ввода информации в выбранную клетку, если клетка не пустая (значение указателя на структуру клетки
Полезная информация клетки включает постоянное поле атрибута содержимого клетки, а также вариантные поля остальной информации.
Пусть электронная таблица заполнена 300 числовыми значениями, 200 текстовыми строками длиной в 40 символов и 400 формулами с текстом формул по 30 символов. В этом случае для размещения электронной таблицы в оперативной памяти потребуется всего
300 * (2 + 10) + 200 * (2 + 41) + 400 * (2 + 10 + 31) = 29 400 байт ≈ 28,8 кбайт.
Как видно, при работе с электронной таблицей объем информации, занимаемой динамической структурой клеток, растет медленно. Окончательно принимаем данный вариант к реализации, выделив из атрибута случай ошибки при расчете формулы в отдельный атрибут Error.
Ниже приведен пример реализации на языке Turbo Pascal структуры данных электронной таблицы. Начнем описание структуры с глобальных описаний:
Туре
Real = Extended; {Требуется сопроцессор}
Const
{Структура данных электронной таблицы}
MAXCOLS = 100; {Размер таблицы}
MAXROWS = 100;
MAXINPUN = 79; {Длина вводимой строки}
{Значение атрибута вида клетки}
ТХТ = 0; {В клетке текст}
VALUE = 1; {В клетке значение}
FORMULA = 2; {В клетке формула}
{Тип вариантной информации клеток}
Туре
TString = String [MAXINPUT]; {Тип вводимых строк}
TCellRec = record {Тип информации клетки}
Error: Boolean; {Поле ошибки формулы}
case Attrib: Byte of {Attrib — это поле}
TXT: (TextStr: TString); {В клетке текст}
VALUE: (Value: Real); {В клетке значение}
FORMULA: (Fvalue: Real; {В клетке формула}
Formula: TString);
end;
end;
{Тип указателя на тип клетки}
TCellPtr = ^TCellRec;
{Тип элемента таблицы}
TCellTableElement = record
CellFormat: Word: {Формат клетки}
CellPtr: TCellPtr; {Указатель на клетку в ДРП}
end:
{Тип массива информации клеток таблицы}
TCellsTable = array [1..MAXCOLS, 1..MAXROWS] of TCellPtr;
Var {Глобальные переменные}
Cells: TCellsTable; {Статическая матрица всех
клеток}
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии