Apache OpenOffice. Динамические массивы

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

— Указатели в СтарБейсике видишь?
— …
— А они там есть.

Вступление

Динамические массивы повышают интеграционную адаптивность программ.

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

Без претензии на толкование динамических массивов, далее по тексту изложены:
• операторы языка StarBasic из Apache OpenOffice для работы с динамическими массивами;
• демонстрационные примеры с динамическими массивами на языке StarBasic.

Операторы языка StarBasic

Для практического применения динамических массивов необходимо и достаточно:
• создавать собственные структуры данных;
• обращаться к данным по‑значению и по‑адресу (ссылке);
• произвольно выделять и освобождать блоки памяти в куче.

Язык программирования StarBasic содержит необходимый и достаточный набор операторов:

  1. Оператор объявления пользовательского типа данных:

Type TUserType
	field_1 as EmbeddedType_1
	field_2 as EmbeddedType_2(*)
End Type

(*) Для полиморфных данных применим встроенный тип Variant.

  1. Оператор выделения блока памяти из кучи:

Dim userVar as New TUserType
  1. Оператор возврата блока памяти в кучу:

userVar = Nothing
  1. Оператор присваивания значения:

userVar_1 = userVar_2
  1. Оператор присваивания ссылки:

Set userVar_1 = userVar_2
  1. Передача параметров по-ссылке (ByRef) и по‑значению (ByVal).

  2. Функции пользовательского типа возвращают результат по‑ссылке.

Далее на примерах.

Пример 1. Односвязный список

Главный структурный элемент односвязного списка — это указатель на следующий элемент списка.
Описание элемента односвязного списка на языке «С»:

struct sListItem
{
	int 		item;	//полезная информация элемента
	sListItem	*succ;	//указатель на следующий элемент
};

Структурная схема односвязного списка:

Пример демонстрирует по‑элементное создание и удаление односвязного списка.

Описание структуры односвязного списка на языке StarBasic:

Type TListItem
	n as Integer
	succ as Variant
End Type

Точка запуска демонстрации односвязного списка:

'***************************************************************************
' Тест односвязного списка

Sub list_Test()

Детали и подробности в исходном тексте.
Исходный текст демонстрационного примера в финале публикации.

Пример 2. Двоичное дерево

В структуре элемента двоичного дерева содержится два указателя на предшествующий и последующий элементы.

Описание элемента бинарного дерева на языке «С»:

struct sBTreeItem
{
	int 		item;	//полезная информация элемента
	sBTreeItem	*pred;	//указатель на предыдущий элемент
	sBTreeItem	*succ;	//указатель на следующий элемент
};

Структурная схема двоичного дерева:

Пример демонстрирует адаптивное создание, реструктуризацию, частичное и полное удаление произвольного двоичного дерева согласно набора внутренних и внешних правил.

Описание структуры двоичного дерева на языке StarBasic:

Type BTreeNodeType
	Expression as String
	Left as Variant
	Right as Variant
End Type

Точки запуска демонстрации двоичного дерева

'***************************************************************************
' Функция для формул листа

Public Function BOOLCALC(formula as String) as String

'***************************************************************************
' Тест динамического двоичного дерева

Sub btree_test()

Прикладная часть примера с двоичным деревом — простой логический вычислитель.

На вход вычислителя подаётся строка с логической формулой.

Вычислитель возвращает решение (упрощение) логической формулы, если это возможно. Например:

0 ^ 1 = 1

b | a & b | c = B | C

Словарь вычислителя:
• 0 — FALSE
• 1 — TRUE
• A, D, C, D, E, F, G — произвольные логические функции (всего 7)
• | — логический оператор OR
• & — логический оператор AND
• ^ — логический оператор XOR
• ~ — логический оператор NOT
• () — оператор повышения приоритета

Высший приоритет у оператора отрицания «~».

Другие операторы имеют равный приоритет, выполняются последовательно слева направо.

Оператор повышения приоритета «()» меняет порядок выполнения операторов по правилам арифметики.

Детали и подробности в исходном тексте.

Демонстрационный пример

Демонстрационный пример требует средний уровень безопасности макросов.

Во время открытия файла примера «включить» макросы.

Демонстрационный пример в формате электронной таблицы содержит два листа с формулами и два модуля с макросами.

На первом листе таблица основных логических преобразований. Первый лист служит для проверки программы.

На втором листе форма проверки произвольной логической формулы.

Первый модуль макросов содержит демонстрационный пример работы со связным списком.
Во-втором модуле макросов — демонстрационный пример работы с двоичным деревом.

Демонстрационный файл доступен по ссылке:
ApacheOpenOfficeDynarr.ods.

Вместо заключения

Дополнительная информация в завершение темы динамических массивов как средства повышения интеграционной адаптивности программ:

• примеры подготовлены в Apache OpenOffice 4.1.11;

• допускается применение других офисных пакетов;

• условия распространения кода — GNU GPL v3.

Источник: https://habr.com/ru/post/665674/


Интересные статьи

Интересные статьи

Я Роман Ананьев, NoSQL/Kafka-инженер в Авито. В этом материале расскажу, как мы попробовали использовать брокер сообщений Apache Kafka в трёх дата-центрах и что из этого получилось.Сначала пробегусь п...
Всем привет! Меня зовут Андрей Попов, я Middle QA Engineer Auto-test в Утконос Онлайн. В этой статье хочу поделиться, почему мы выбрали Apache JMeter для нагрузочного тестирования, как выглядит этот и...
Привет! Меня зовут Сергей Тетерюков, и я работаю инженером инфраструктуры и автоматизации в X5 Tech. Недавно я написал для коллег обзорную статью о БД Apache Cassandra DB и её деплое, и теперь хочу по...
В Apache Cassandra 4.0 будет новое значение по умолчанию для num_tokens! Звучит как незначительное изменение в CHANGES.txt, но по факту это серьезно повлияет на работу кластера. Как нов...
Введение Существуют различные способы для написания тестов с использованием Apache Kafka. К примеру, можно использовать TestContainers и EmbeddedKafka. Об этом можно почитать, к примеру,...