0% нашли этот документ полезным (0 голосов)
2 просмотров18 страниц

Inductive Operations Using

Методичка по системному программированию Тема: индуктивные операторы

Загружено:

alvarking777
Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
2 просмотров18 страниц

Inductive Operations Using

Методичка по системному программированию Тема: индуктивные операторы

Загружено:

alvarking777
Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ


ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
им. Р.Е.АЛЕКСЕЕВА»

Институт радиоэлектроники и информационных технологий

Кафедра «Информационные радиосистемы»

ИНДУКТИВНЫЕ ОПЕРАЦИИ
НАД ПОСЛЕДОВАТЕЛЬНОСТЬЮ ДАННЫХ
И ИХ ИСПОЛЬЗОВАНИЕ В ПРОГРАММНЫХ СИСТЕМАХ

Методические указания
к лабораторным работам по дисциплине
«Алгоритмы и методы организации программных систем»
для студентов направления подготовки бакалавра
11.03.01 «Радиотехника» и специальности
11.05.01 «Радиоэлектронные системы и комплексы»
очной формы обучения

Нижний Новгород 2024


Составитель С.Б.Сидоров

УДК 519.6

Индуктивные операции над последовательностью данных и их


использование в программных системах : Метод. указания к лаб. работам
по дисциплине «Алгоритмы и методы организации программных систем»
для студентов направления подготовки бакалавра 11.03.01
«Радиотехника» и специальности 11.05.01 «Радиоэлектронные системы и
комплексы»очной формы обучения. / НГТУ; Сост.: С.Б. Сидоров.
Н. Новгород, 2024.– 18 с.

Изложены краткие сведения о методах разработки алгоритмов


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

Редактор

Подписано в печать . . . Формат 60 х 841/16 .


Бумага офсетная. Печать трафаретная. Усл. печ. л. .
Тираж экз. Заказ
________________________________________________________________
Нижегородский государственный технический университет им. Р.Е. Алексеева.
Типография НГТУ.
Адрес университета и полиграфического предприятия:
603155, г. Нижний Новгород, ул. Минина, 24.

© Сидоров С.Б., 2024


1. Лабораторная работа №1 «Индуктивные операции над
последовательностью данных»

1.1. Цель работы

Освоение способов разработки алгоритмов выполнения


индуктивных операций над последовательностью данных, построение
индуктивных функций методом индуктивных расширений. Изучение
общей схемы программной реализации индуктивной функции и схемы
обработки последовательности элементов с использованием индуктивной
функции.

1.2. Краткие сведения

Формулировка задачи
На вход системы последовательно и неограниченно во времени
поступают элементы x i , где i — порядковый номер элемента, начиная с
1. Все элементы имеют одну и ту же природу, то есть являются
однотипными. Над набором элементов X (n)=⟨ x 1 , x 2 , x 3 ,…, x n ⟩
выполняется некоторая операция f ( X (n)) . Результатом ее выполнения
является набор выходных значений Y (n)=⟨ y (n) (n) (n) (n)
1 , y 2 , y 3 ,…, y k (n) ⟩
. Все
элементы выходного набора также имеют одну и ту же природу, то есть
являются однотипными. При этом типы элементов на входе и выходе
системы в общем случае отличаются.
Указанная операция выполняется каждый раз при поступлении
очередного элемента x n+1 для набора X (n+1) .
Классы операций
Все операции над набором данных подразделяются на два класса:
− вычисление значения характеристики набора;
− порождение наборов данных.
Для класса вычисления значения характеристики количество
элементов в выходном наборе k (n)≡1 . Эта характеристика может быть
скалярной величиной, может состоять из набора элементов разной
природы или представлять собой набор однотипных значений.
Существенным является конечный размер выходного элемента, не
зависящий от n.
Для этого класса можно определить выходную последовательность

3
Y '(n)=⟨ y (1) (2) (3) (n)
1 , y 1 , y 1 ,…, y 1 ⟩
, расширяющуюся во времени по мере
поступления на вход системы обработки очередных входных элементов
xn .
Отличием операций, относящихся к другому классу является
неограниченный рост количества элементов k (n) в выходном наборе Y (n)
так, что ∄ K : ∀ n ⇒ k (n)<K .
Для данного класса в качестве выходной последовательности Y ' (n)
можно рассмотреть Y (n) , то есть Y ' (n)=Y ( n) , но только при определенных
условиях, а именно:
(n+1)
=⟨ y (n+1) (n+1)
∀ n ⇒ Y (n+1)=Y (n)∗q(n+1) , где q k (n)+1 ,…, y k (n+1) ⟩ и * —
операция присоединения.
В этом случае выходная последовательность
' (n) (1) (2) (n)
Y =Δ∗q ∗q ∗…∗q , (1)
где Δ — пустая последовательность, т. е. для нее количество
элементов n=0. Заметим, что в данных обозначениях для первого класса
операций ∀ k : q(k)=⟨ y(k) 1 ⟩.

Индуктивная функция
Функцию f : Ω( x)→Ω(Y ) назовем индуктивной, если
f (ω∗x)=f (ω)∗q(ω∗x) , причем q(ω∗x )= F ' q ( S(ω∗x) , x ) , а S (ω∗x)
можно вычислить, зная S (ω) и x, т. е. если для нее существует функция
F S ( y , x) такая, что
S (ω∗x)=F S (S(ω), x ) . (2)
Также предполагаем, что значение S от пустой последовательности
S (Δ) известно. Положим его равным S(0) , имея в виду, что значение
верхнего индекса имеет смысл количества элементов в
последовательности, т. е. в данном случае в пустой последовательности.
Тогда для последовательности ω с количеством элементов (длиной) n
введем обозначения S(n)=S(ω) и q(n) =q (ω) . С учетом этого:
(n+1) (n)
S =F S (S , x) ,
(n+1) (n+1) (n) (n)
(3)
q =F ' q (S , x)=F ' q ( F S ( S , x ))= F q (S , x) .
В этом случае вектор-функцию F (s , x)=⟨ F q (s , x) , F S (s , x )⟩ назовем
функцией перевычисления. Она позволяет рассчитать новые значения
(n+1)
q и S(n+1) для расширенной последовательности, используя текущее
значение S(n) и очередной поступивший элемент x входной
последовательности.

4
С точки зрения изначально поставленной задачи величину S можно
понимать как некоторое состояние вычислителя. Для выполнения
требуемой обработки элементов входной последовательности в
большинстве случае удобно или даже необходимо использовать
некоторые вспомогательные величины. Они будут рассчитываться, а
точнее перевычисляться каждый раз при поступлении очередного
элемента последовательности. Тогда совокупность таких величин примем
в качестве рассматриваемого S, т. е. S=⟨ s1 , s2 ,…, s k ⟩ .
Допустим, что удалось найти такой состав S и получить выражение
для функции перевычисления. В таком случае решение исходной задачи
удалось представить с помощью индуктивной функции.
Для индуктивных функций можно получить в общем виде простой
однопроходный алгоритм обработки последовательно поступающих
данных:
вычислить начальное S=f (Δ)
пока есть непрочитанные элементы
нц
получить очередное значение x
вычислить ⟨q , S ⟩=⟨ F q ( S , x) , F S ( S , x)⟩
выдать q
кц
При этом расчет нового значения S и формирование выхода q
выполняются одновременно, на основе текущего состояния S . Учитывая
(3), алгоритм можно записать следующим образом:
вычислить начальное S=f (Δ)
пока есть непрочитанные элементы
нц
получить очередное значение x
вычислить S=F S (S , x )
'
вычислить q= F q (S , x )
выдать q
кц
В этом случае при вычислении q используется обновленное
состояние S . Выбор варианта алгоритма пересчета определяется
конкретной задачей, исходя из критерия более простой и понятной формы
записи правила формирования выхода вычислителя. Сам вычислитель,
работающий по приведенной схеме, назовем индуктивным вычислителем.
Примеры индуктивных функций:
− сумма элементов последовательности. Обозначим искомую
величину как s. Индуктивная функция записывается в следующем

5
виде:
S=⟨ s ⟩ ,
(0)
s =0 ,
s=s+ x ,
'
q= F q (S , x )=⟨ s⟩ .
− длина последовательности. Обозначим искомую величину как n.
S=⟨ n⟩ ,
(0)
n =0 ,
n=n+1 ,
'
q= F q (S , x )=⟨n ⟩ .
− последний элемент. Обозначим искомую величину как v.
S=⟨ v ⟩ ,
(0)
v — любое,
v =x ,
'
q= F q (S , x )=⟨ v ⟩ .
Индуктивное расширение
Подавляющее большинство полезных функций не являются
индуктивными, поскольку при в записи их функции перевычисления в
правой части, кроме S и x присутствуют другие переменные величины.
Однако такие функции могут быть приведены к классу индуктивных
посредством рассмотрения их индуктивного расширения.
Пусть для целевой задачи получено некоторое правило
формирования выхода вычислителя, как отклика на поступление одного
очередного элемента входной последовательности. Пусть также в записи
этого правила присутствуют величины, отличные от входного элемента и
составных частей описания T y . Совокупность таких величин обозначим
как ⃗v =(v 1 , v 2 ,… v r ) . Рассмотрим новую операцию f z ( x) , результатом
которой является набор, состоящий из элементов z=( y , ⃗v ) типа T z .
Новый тип является составным типом и включает в себя элемент типа T y
и набор величин ⃗v , т. е. T z=(T y , ⃗v ) . Операцию f z ( x) назовем
индуктивным расширением операции f (x ) , если она удовлетворяет
определению (2). Для этого случая (1) можно переписать в следующем
виде:
' (n) (1) (2) (n)
Z =Δ∗q z ∗q z ∗…∗q z . (4)
(n+1) (n+1) (n+1)
Здесь q z =⟨ z k (n)+1 ,… zk (n+1) ⟩ — отклик вычислителя,
выполняющего операцию f z ( x) , на поступление очередного элемента

6
x n+1 входной последовательности X. Для полученного индуктивного
расширения S z (ω∗x)=Φ S (S z (ω), x ) , а сама Φ S () вместе с Φ q ( S z , x)
составляет новую функцию перевычисления Φ( z , x) .
Поскольку исходная задача состоит в выполнении операции f (x ) , то
для получения результата ее выполнения из элементов выходной
последовательности Z необходимо выделять составляющую y.
Величины, входящие в набор ⃗v , назовем элементами
индуктивного расширения. Они являются вспомогательными для
формирования результатов выполнения исходной задачи и внутренними
деталями реализации вычислителя. С точки зрения внешней среды,
которая использует вычислитель, вопрос существования элементов
индуктивного расширения и, тем более, их природы, отсутствует.
С практической точки зрения при рассмотрении индуктивного
расширения, компоненты ⃗v добавляются в исходное состояние S и
приводятся правила их пересчета, а также указываются начальные
значения.
Если при записи пересчета этих величин в правой части их формул
появились новые величины, то указанную операцию надо повторить и для
них.
Обычно операции являются параметризованными, т. е. в их
формулировке присутствуют параметры, величины, значения которых
считаются известными и не меняются во время работы вычислителя. В
этом смысле они являются константами, их нет необходимости заново
вычислять при поступлении очередного x, и поэтому их присутствие в
правой части не нарушает требования к функции перевычисления.
Архитектура программной компоненты вычисления индуктивной
функции
В области программной реализации вычислитель индуктивной
функции определяется набором следующих программных компонент:
− тип элемента входной последовательности ( OperationInputItem),
который должен определяться в отдельном модуле;
− тип элемента выходной последовательности ( OperationOutputItem),
который должен определяться в отдельном модуле;
− тип выхода вычислителя, как отклика на поступление очередного
входного элемента, q (OperationOutput), который приводится в
модуле вычислителя;
− тип, описывающий набор параметров обработки
(OperationParameters), который приводится в модуле вычислителя;
− тип, описывающий индуктивное расширение операции

7
(OperationExtension), который приводится в модуле вычислителя;
− класс индуктивной операции (Operation).
Класс индуктивной операции удобно представить в виде класса
функциональных объектов. В этом классе конструктор определяет
начальное значение результата обработки для пустой входной
последовательности (начальные значения), а деструктор содержит
действия, необходимые для корректного завершения работы с
вычислителем. Центральное место в классе занимает реализация функции
перевычисления. Представим ее в виде перегруженной операции вызова
функции с двумя аргументами, значением очередного элемента входной
последовательности и переменной, куда необходимо поместить результат
обработки q.

1.3. Задания и порядок их выполнения

На вход системы последовательно и неограниченно во времени


поступают элементы x i , где i — порядковый номер элемента, начиная с
1. Реализовать указанную в варианте обработку f (X)
последовательности элементов X=⟨ x 1 , x 2 , x 3 ,…⟩ с использованием
схемы индуктивной обработки на пространстве последовательностей.
Полученный набор выходных значений Y =⟨ y 1 , y 2 , y 3 ,…⟩
рассматривается как результирующая последовательность. Значения
элементов исходной последовательности должны запрашиваться у
пользователя (приниматься со стандартного устройства ввода) по одному
за раз. Сформированные выходные значения требуется выдавать сразу
после их формирования на стандартное устройство вывода. Реализация
индуктивного вычислителя должна быть приведена в отдельном модуле в
виде класса функциональных объектов.
Решение задачи выполняется в два этапа. Сначала создается
математическое описание решения задачи, а затем по полученному
математическому решению создается программная реализация.
1. Из постановки задачи определите структуру элемента входной
последовательности данных и структуру элемента выходной
последовательности.
2. Разработайте алгоритм индуктивной обработки данных и запишите
его в математической форме.
3. Определите вспомогательные структурные типы данных для
представления в программе элемента входной последовательности,
элемента выходной последовательности, набора параметров обработки,

8
индуктивного расширения.
4. Определите класс для представления индуктивного вычислителя,
используя вспомогательные типы данных.
5. Получите реализацию методов класса.
6. Подготовьте тесты для решаемой задачи, охватывающие как можно
больше различных сценариев поступления данных.
7. Получите реализацию тестовой программы для проверки
подготовленных тестов.
8. Проведите тестирование полученной программной реализации и при
необходимости выполните её отладку для устранения выявленных на
этапе тестирования ошибок. Данный этап необходимо выполнять до
успешного прохождения всех подготовленных тестов.
9. В целях самоконтроля ответьте на вопросы раздела
10. По завершении разработки программы продемонстрируйте её работу
преподавателю и ответьте на его вопросы.
11. Доработайте программу с учётом изменений, предложенных
преподавателем и продемонстрируйте работу изменённой программы
преподавателю.

1.4. Контрольные вопросы

1. Какие операции называются индуктивными?


2. Какая модель поступления данных на вход блока обработки
рассматривается применительно к индуктивным операциям?
3. Какие классы операций над последовательностью данных выделяют?
Приведите примеры операций разных классов.
4. Поясните специфику выходной последовательности для операции,
являющейся индуктивной.
5. Какие вычислительные проблемы можно решить, при использовании
метода индуктивной обработки последовательности данных?
6. Дайте определение индуктивной функции и приведите примеры
индуктивных функций и не являющихся таковыми.
7. Что такое функция перевычисления?
8. Поясните понятие индуктивного расширения.
9. Какова причина необходимости задания начального значения

9
компонентам индуктивного вычислителя?
10. Перечислите составные части индуктивного вычислителя.
11. Какая структура элемента входной последовательности данных
выбрана Вами для разработанного индуктивного вычислителя?
12. Какая структура элемента выходной (результирующей)
последовательности данных выбрана Вами для разработанного
индуктивного вычислителя?
13. Поясните определение структуры параметров обработки
реализованного индуктивного вычислителя.
14. Детально объясните определение структурного типа данных для
представления индуктивного расширения с точки зрения его
соответствия математического представления индуктивного
вычислителя .
15. Поясните разработанный Вами алгоритм обработки данных на
основе математической записи.
16. Дайте подробное объяснение программной реализации функции
обработки элемента входной последовательности.
17. Опишите реализованную схему тестовой программы.

10
2. Лабораторная работа №2 «Использование плагинов в
программных системах»

2.1. Постановка задачи

Разработать программу, расширяющую свои возможности за счет


подключения плагина индуктивной обработки последовательности
элементов известного типа. Обработка должна быть представлена
функциональным объектом с интерфейсом абстрактного класса,
включающего: имя плагина, операцию настройки обработки (задание
параметров), реализацию функции перевычисления. Плагин реализуется в
виде разделяемой библиотеки. Интерфейс плагина — функция создания
объекта индуктивной обработки. В качестве индуктивной обработки
рассмотреть задание из лабораторной работы №1.

2.2. Порядок выполнения

1. Создайте проект основной программы и выполните его настройку.


2. В основной программе реализуйте абстрактный класс для
представления индуктивного вычислителя
3. Создайте проект для реализации плагина в виде разделяемой
библиотеки. При этом при создании проекта в списке типов
проектов следует выбрать Shared Library / Empty Project.
4. Выполните настройку созданного проекта. Дополнительно там же в
окне настроек необходимо выбрать ветвь C/C++ Build / Settings и на
форме во вкладке Tool Settings (выбрана изначально) в левом
иерархическом списке следует выбрать GCC C+
+ Compiler / Miscellaneous и отметить опцию Position Independent
Code (-fPIC).

5. Через контекстное меню, вызванное для проекта, выбрав пункт New /


Source Folder, добавьте в него папку для исходных текстов. При
этом в появившемся диалоговом окне в поле Folder name:
необходимо задать имя папки (например, src).
6. Внедрите в проект разработанный абстрактный класс.
7. Получите реализацию индуктивного вычислителя для заданной
обработки в виде класса, производного от абстрактного. При
разработке максимально используйте имеющуюся реализацию из

11
предыдущей лабораторной работы.
8. В разрабатываемой библиотеке определите ее интерфейс в виде
функции создания объекта индуктивного вычислителя. Представьте
ее отдельным модулем в составе библиотеки.
9. Получите двоичный образ разделяемой библиотеки, как результат
сборки проекта.
10. В проекте основной программы через представление Project
Explorer создайте специальный каталог plugins
11. Имеющийся плагин (двоичный образ разделяемой библиотеки)
необходимо поместить в созданный каталог.
12. Реализуйте основную программу, обеспечивающую загрузку
плагина системными средствами из библиотеки libdl и выполнение
обработки поступающих данных индуктивным вычислителем из
плагина.
13. Для использования функций управления динамически
загружаемыми библиотеками в настройках проекта основной
программы следует выбрать ветвь C/C++ Build / Settings. На форме
во вкладке Tool Settings в левом списке следует выбрать GCC C++
Linker / Libraries и добавить в список подключаемых библиотек
библиотеку libdl без указания в предлагаемом поле ввода префикса
lib.
14. Проведите тестирование полученной программной реализации и
при необходимости выполните её отладку для устранения
выявленных на этапе тестирования ошибок. Данный этап
необходимо выполнять до успешного прохождения всех
подготовленных тестов.
15. По завершении разработки программы продемонстрируйте её
работу преподавателю и ответьте на его вопросы.
16. Доработайте программу с учётом изменений, предложенных
преподавателем и продемонстрируйте работу изменённой
программы преподавателю.

12
3. Лабораторная работа №3 «Функции высшего порядка»

3.1. Постановка задачи

Реализовать процедуру использования индуктивного вычислителя из


задания №1 в виде функции высшего порядка. При этом операции
получения очередного элемента входной последовательности и выдачи
очередного элемента результирующей последовательности представить в
виде функций обратного вызова.
Дополнительно процедура использования вычислителя должна
учитывать возможность поступления конечного числа элементов на вход
обработки и завершения своей работы в этом случае. Для обеспечения
указанного требования функция получения элемента входной
последовательности должна дополнительно возвращать признак
завершения потока данных на входе.
Выполнение операции получения очередного элемента входной
последовательности заключается в чтении значения элемента из потока
ввода. Аналогично выполнение операции вывода элемента выходной
последовательности состоит в записи значения в поток вывода. При этом
требуется обеспечить выполнение дополнительной настройки операции
выдачи посредством указания символа разделителя, используемого для
отделения значений последовательных элементов в потоке вывода.

3.2. Порядок выполнения

1. Создайте проект основной программы и выполните его настройку.


2. В созданный проект внедрите реализацию индуктивного вычислителя
из первой работы.
3. Создайте модуль для реализации функции использования вычислителя.
4. В созданном модуле определите типы данных, необходимые для
представления в виде функций обратного вызова операций получения
элемента входной последовательности и выдачи элемента выходной
последовательности.
5. В созданном модуле создайте и получите реализацию функцию
использования вычислителя в виде функции высшего порядка. При этом
рекомендуется воспользоваться реализацией тестовой программой из
первой работы, выполнив необходимую доработку в соответствии с
предъявляемыми требованиями.
6. В основном модуле программы реализуйте функцию получения

13
элемента входной последовательности с учетом предъявляемых к ней
требований.
7. В основном модуле программы реализуйте функцию выдачи элемента
выходной последовательности.
8. В основной (тестовой) программе обеспечьте создание вычислителя с
его настройкой, настройку операций ввода и вывода, а также вызов
функции использования вычислителя.
9. Выполните тестирование полученной программной реализации и при
необходимости проведите доработку.
10. После успешного завершения тестирования продемонстрируйте
результаты выполнения работы преподавателю и ответьте на его вопросы.
11. Выполните предложенную преподавателем доработку программы.
12. Продемонстрируйте преподавателю работы измененной программы и
поясните сделанные изменения.

3.3. Контрольные задания

Для проверки возможности повторного использования


разработанной компоненты рассмотреть следующие альтернативные
способы выполнения различных этапов процедуры:
1. значение очередного входного элемента последовательно берется из
предварительно заданного набора данных конечного размера, свернутого
в кольцо;
2. формирование элемента входной последовательности со случайным
значением с равномерным распределением в заданной области изменения;
3. расчет значения элемента входной последовательности по заданному
закону изменения , как функции от порядкового номера элемента и набора
параметров ;
4. получение значения элемента входной последовательности как
результата работы некоторого заданного индуктивного вычислителя, на
вход которого поступают данные, формируемые указанным способом;
5. значения выходных элементов последовательно заносятся в указанный
набор элементов соответствующего типа конечного размера, свернутого в
кольцо;
6. сброс элементов выходной последовательности в «мусорную корзину»,
что означает отсутствие какого-либо дальнейшего использования
полученного значения;
7. передача значения на вход некоторого заданного индуктивного
вычислителя, результат работы которого обрабатывается указанным
способом.

14
4. Лабораторная работа №4 «Управляемое устройство
индуктивной обработки»

4.1. Постановка задачи

Реализовать модель управляемого устройства индуктивной


обработки потока входных данных. Устройство обеспечивает выполнение
операций:
- прием данных из внешнего мира,
- обработка элемента потока данных,
- остановка (запрет) обработки,
- возобновление,
- сброс в исходное состояние
- выдача результатов во внешний мир
Элементы потока входных данных поступают через стандартное
устройство ввода. Результаты обработки отправляются на стандартное
устройство вывода.
Логика работы устройства должна быть реализована в виде
управляющего конечного автомата.

4.2. Порядок выполнения

1. Для выполнения лабораторной работы создайте проект и выполните его


настройку.
2. Получите реализацию контроллера в соответствии со следующими
рекомендациями.
2.1. Создайте в проекте новый модуль для реализации контроллера
2.2. В заголовочном файле определите класс контроллера со
следующими компонентами:
━ перечислимые типы для представления входного алфавита,
перечня состояний автомата и выходного алфавита;
━ тип данных для представления функций обратного вызова,
реализующих действия исполнительной компоненты и метод для связи
символа выходного алфавита с действием;
━ метод обработки символа входного алгоритма;
━ тип данных для представления элемента таблицы переходов;
━ тип данных для описания действия;
━ пустое действие для правил перехода, не предусматривающих
формирования символа на выходе;

15
━ текущее состояние автомата;
━ матрица переходов;
━ таблица связи символов выходного алфавита с действиями
исполнительной компоненты
2.3. В файле реализации модуля контроллера определите
конструктор, в котором задайте начальное состояние автомата, таблицы
связи и обеспечьте формирование таблицы переходов.
2.4. Получите реализацию функции обработки символа и функции
установления связи выхода с действием.
3. Получите реализацию исполнительной компоненты в соответствии со
следующими рекомендациями.
3.1. В качестве основы компоненты используйте реализацию
индуктивного вычислителя из первой лабораторной работы, внедрив ее в
проект.
3.2. В интерфейсную часть добавьте тип данных для представления
функции обратного вызова, для выдачи элемента выходной
последовательности и метод указания способа выдачи элемента.
3.3. В интерфейсную часть добавьте описания функций обратного
вызова, реализующих действия исполнительной компоненты.
3.4. Добавьте свойства, определяющие способ выдачи элемента
выходной последовательности.
3.5. Получите реализации всех методов, добавленных в класс
индуктивного вычислителя.
4. Получите реализацию класса управляемого устройства в соответствии
со следующими рекомендациями.
4.1. Создайте в проекте новый модуль для реализации управляемого
устройства
4.2. В заголовочном файле определите класс управляемого
устройства со следующими компонентами:
━ метод, реализующий работу устройства;
━ функцию обратного вызова для выдачи элемента выходной
последовательности;
━ объект контроллера и объект исполнительной компоненты.
4.3. Получите реализацию конструктора, в котором обеспечьте
приведение в начальное состояние всех элементов устройства и настройте
все необходимые связи.
4.4. Реализуйте модель работы управляемого устройства, в виде
бесконечного цикла. На каждой его итерации от пользователя
принимается символ из входного алфавита, который должен передаваться
в контроллер на обработку.

16
5. В отдельном модуле реализуйте основную управляющую программу по
созданию управляемого устройства и запуска его работы.
6. Выполните тестирование полученной программной реализации и при
необходимости проведите доработку.
7. После успешного завершения тестирования продемонстрируйте
результаты выполнения работы преподавателю и ответьте на его вопросы.
8. Выполните предложенную преподавателем доработку программы.
9. Продемонстрируйте преподавателю работы измененной программы и
поясните сделанные изменения.

17
5. Список литературы
1. Паттерны объектно-ориентированного проектирования : [пер. с
англ.] / Э. Гамма [и др.]. — СПб. : Питер, 2020. – 448 с.
2. Кушниренко, А.Г. Программирование для математиков : учеб.
пособие / А. Г. Кушниренко, Г. В. Лебедев. – М. : Наука, 1988. – 384 с.
3. Пселтис, Э. Потоковая обработка данных. Конвейер реального
времени / Э. Пселтис. – М.:ДМК Пресс, 2018. – 218 с.
4. Поликарпова, Н.И. Автоматное программирование / Н.И. Поликар-
пова, А.А. Шалыто. – СПб., 2008. – 167 с.
5. С.Б.Сидоров Использование среды Eclipse для разработки программ
на языке программирования С++, методические указания к
лабораторным работам, 2023. - 26 с, ил.
6. С.Б.Сидоров Реализация индуктивного вычислителя «Прореживание
потока данных». Исходные тексты программ,
localhost://home/students/materials/aimops/lab01/example/
7. С.Б.Сидоров Реализация и использование плагина индуктивного
вычислителя. Исходные тексты программ
localhost://home/students/materials/aimops/lab02/example/
8. С.Б.Сидоров Примеры определения и использования функций
высшего порядка. Исходные тексты программ
localhost://home/students/materials/aimops/lab03/example/
9. С.Б.Сидоров Программная реализация управляемого устройства
прореживания потока данных. Исходные тексты программ
localhost://home/students/materials/aimops/lab04/example/

18

Вам также может понравиться