Реферат по предмету "Информатика, программирование"


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

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

ОГЛАВЛЕНИЕ
Перечень условных обозначений
Введение
1. Технико-экономическое обоснованиепроектируемой интеллектуальной системы
1.1 Актуальность разработкиинтеллектуальной справочной системы по музыкальным произведениям
1.2 Категории пользователей системы
1.2.1 Меломан
1.2.2 Начинающий слушатель
1.2.3 Владелец музыкального магазина илиинтернет-магазина
1.2.4 Исполнитель
1.3 Анализ аналогичных систем
1.3.1 All Music Guide
1.3.2 MusicBrainz!
1.3.3 Музыкальный словарь Гроува 
1.3.4 Сравнение аналогичных систем синтеллектуальным справочником по музыкальным произведениям
2. База знаний проектируемойинтеллектуальной системы
2.1 Задачно-ориентированная спецификациябазы знаний проектируемой интеллектуальной системы
2.1.1 Тестовый сборник вопросов
2.1.2  Список используемых в базе знанийпроектируемой интеллектуальной справочной системы ip-компонентов
2.2 Онтология базы знаний проектируемойинтеллектуальной системы
2.3 Содержательная декомпозиция базызнаний проектируемой интеллектуальной системы
2.4 Исходные тексты базы знанийпрототипа интеллектуальной системы
2.5  Верификация и отладка базы знанийпрототипа интеллектуальной системы
2.6 Спецификация разработанной базызнаний интеллектуальной системы и сертификация разработанных ip-компоненто
3. Машина обработки знаний проектируемойинтеллектуальной справочной системы
3.1 Задачно-ориентированная спецификациямашины обработки знаний проектируемой интеллектуальной справочной системы
3.1.1 Тестовый список задач
3.1.2 Содержательная классификация задач
3.1.3 Список используемых в операцияхip-компонентов
3.1.4 Классификация и спецификацияопераций проектируемой машины обработки знаний
3.1.5 Декомпозиция операций наподпрограммы и содержательная структура библиотеки программ специфицированныхопераций
3.2  Алгоритмы и исходные текстыпрограмм, реализующие операции машины обработки знаний прототипаинтеллектуальной справочной системы
3.3 Верификация и отладка программспецифицированных операций
3.4 Спецификация разработанных операцийи библиотеки программ, сертификация разработанных ip-компонентов 
4. Пользовательский интерфейспроектируемой интеллектуальной справочной системы
4.1 Задачно-ориентированная спецификацияпользовательского интерфейса проектируемой интеллектуальной системы
4.1.1 Декомпозиция пользовательскогоинтерфейса 
4.1.2 Список используемых ip-компонентовпользовательского интерфейса 
4.2  Проектирование интерфейсныхподсистем 
4.3 Верификация и отладкапользовательского интерфейса 
4.4 Спецификация разработанногопользовательского интерфейса, сертификация разработанных ip-компонентов
5. Интеграция разработанной системы сдругими системами
6. Направления дальнейшего развитияпрототипа интеллектуальной справочной системы и пути промышленного изготовленияспроектированной интеллектуальной системы
7. Вклад в развитие семантическихтехнологий проектирования интеллектуальных систем
7.1 Список выявленных ошибок средыпроектирования интеллектуальных систем
7.2 Список предложений посовершенствованию среды проектирования интеллектуальных систем
7.3 Список предложений посовершенствованию семантических технологий проектирования интеллектуальныхсистем
7.4  Создание и использованиеip-компонентов
Библиографический указатель

Перечень условныхобозначений
МП – музыкальныепроизведения
БЗ – база знаний
ИСС – интеллектуальнаясправочная система
МОЗ – машина обработкизнаний
ПИ – пользовательскийинтерфейс

Введение
Независимо от родадеятельности, возраста и пола, любому из нас приходилось сталкиваться с такимпонятием как музыка. И если раньше это было мало распространенным, доступнымдля узкого круга людей, то в наши дни трудно встретить человека, которыйникогда не слышал «волшебных» звуков музыки. В наши дни можно говорить о целоймузыкальной индустрии, людей и средств, в которой задействовано не меньше, чемв автомобилестроении или разработке IT-технологий. Одни зарабатывают на этомденьги: устраивая звукозаписывающие лейблы и студии, предоставляя свои услугипо записи, продюсированию исполнителей; открывают обычные и интернет-магазины,где успешно и не очень занимаются продажей уже готовой продукции (кассеты,компакт-диски, DVD-диски, и даже, для особых «гурманов», виниловые пластинки скомпозициями различных жанров и направлений). У других музыка – это способсамовыражения: поиск сподвижников, создание группы, а возможно выступлениесоло, написание текста и сочинение музыки, затем запись на студии, организацияконцертов. Третьи выступают в роли потребителей: скупают компакт-диски сальбомами любимых групп и исполнителей, посещают концерты, чтобы вживуюуслышать кумиров. Не стоит забывать и про тех, для кого музыка это простоприятный фон дома, на работе или в авто, который помогает скрасить серые буднимегаполисов.
Хочу обратить вниманиена термины: звукозаписывающие лейблы, компакт-диски, виниловые пластинки,группы, направление, жанры и т.д. и т.п… И если с пониманием что это и длячего оно нужно помогут справиться какая-нибудь музыкальная энциклопедия иливездесущий Google. То, что делать и у кого просить помощи, когда любимаякомпозиция после н-ного раза прослушивания перестает нравиться, а домашняя коллекцияпрослушана и переслушана вдоль и поперек. Да, песен и исполнителей в миремного. Есть маленькое «но» — их слишком много! Так в электронной версии«Музыкального словаря Гроува» содержится 27000 композиций поп-музыки или более50 дней непрерывного прослушивания (если допустить, что средняяпродолжительность композиции около 3 минут). А ведь жанров и направлений неменьше сотни! Так и целой жизни будет мало, чтобы переслушать все, что сочинилмузыкальный гений человека, и выбрать именно то, что подходит по вкусу.
Можно выделитьнесколько аспектов проблемы выбора и поиска музыкальных произведений:
— большой объемнеструктурированной информации, хранящейся в различных местах;
— трудностьформализации, а порой и отсутствие, правил описания и оценки музыкальныхпроизведений;
— формулированиезапроса для поиска композиции. Как говорил известный герой не менее известногофильма: «А ну, сочини для меня что-нибудь такое, чтоб душа сначаларазвернулась, а потом обратно завернулась».
Такие тяжеловесы какMicrosoft Corp. и Yahoo Inc. тратят миллиарды долларов, пытаясь отобрать уGoogle хотя бы небольшой сегмент рынка интернет-поиска. Но параллельно этому,растущие нишевые поисковые системы переосмысляют способ поиска информации,разрабатывая инструменты, которые тщательно ищут истинный смысл слов навеб-страницах вместо того, чтобы просто предоставить список сайтов ссовпадающими ключевыми словами, эти претенденты надеются создать сервисы,которые помогут пользователям быстрее находить то, что те ищут. Потребители хотятнаходить информацию быстрее, и они ищут инструменты, которые помогли бы имсделать это. Такие поисковые системы используют семантическую науку, изучающуюсмысл слов, чтобы производить более релевантный поиск. Дело в том, что уровеньконтекста позволяет семантическим поисковым системам представлять информацию всоответствии с тем, как обычно думают люди. Семантический поиск представляетинтерес, как для частных предпринимателей, так и для крупных компаний. Ключ куспеху семантического поиска в том, чтобы выдать результаты в контексте. Этосложно, так как объём информации всё возрастает. Причина, по которой люди хотятразрабатывать семантические поисковые системы, в том, что это лучший способнахождения информации. Учитывая, что объём контента растёт всё быстрее,поисковые системы должны быть более эффективны и работать по образцу того, какдумают люди. Подобные инструменты поиска показывают связи между различнымидокументами и сайтами, основываясь не на ссылках, а на информации, содержащейсяна страницах с помощью технологии под названием «графики семантическихкластеров». Она отображает результаты в виде, который напоминает паучьюпаутину.
Одним из примеровинтеллектуальных «помощников» является Семантическая Справочная Система (SRS),на базе которой была построена справочная система по музыкальным произведениям.SRS состоит из трех компонентов:
База знаний (БЗ),
Машина обработкизнаний,
Пользовательскийинтерфейс.
Уточним задачикомпонентов:
База знаний необходимадля хранения знаний о предметной области в системе.
Машина обработки знанийнеобходима для осуществления поиска, навигации и обработки знаний.
Пользовательскийинтерфейс необходим для осуществления взаимодействия пользователя с системой.
Наполнение базы знанийновыми знаниями значительно улучшит прикладную интеллектуальную систему.Пользователь сможет получить более подробную и более полную информацию о даннойпредметной области.
Разработка машиныобработки знаний переведет прикладную систему на качественно новый уровень –уровень интеллектуального решателя задач предметной области.
В результате разработкипользовательского интерфейса появятся новые возможности, связанные с поиском побазе знаний, редактированием базы, что облегчит пользователям работу сприкладной интеллектуальной системой.
Целью работы являетсяразработка проекта интеллектуальной справочной системы.
Задачи курсовогопроекта:
·  технико-экономическоеобоснование проектируемой интеллектуальной справочной системы;
·  разработкабазы знаний проектируемой интеллектуальной справочной системы;
·  разработкамашины обработки знаний проектируемой интеллектуальной справочной системы;
·  разработкапользовательского интерфейса интеллектуальной справочной системы;
·  реализацияпрототипа интеллектуальной справочной системы.

1. Технико-экономическоеобоснование проектируемой интеллектуальной системы
1.1 Актуальностьразработки интеллектуальной справочной системы по музыкальным произведениям
Людям, которые желаютприобрести музыкальный компакт-диск или скачать композицию из Интернета, невсегда удается затратить на это минимум своего свободного времени и средств идобиться при этом максимальной результативности. Информации содержащейся вбуклете компакт-диска или полученной от продавца чаще всего недостаточно дляосознанного выбора. Данная интеллектуальная справочная система предназначенадля того чтобы облегчить процесс выбора для некомпетентного потребителямузыкальной индустрии.
Перечислим наиболеераспространенные вопросы, интересующие людей в отношении музыкальныхпроизведений:
Общие вопросы:
Какие музыкальные жанрысуществуют?
На каких носителяхможно приобрести муз.произведения?
Какие типы музыкальныхколлективов бывают?
и т.д.
Вопросы для конкретногопроизведения:
Кто автор текста,музыки?
Кто исполнитель?
В какой альбом входит?
В каком году издано?
и т.д.
Для несколькихпроизведений, альбомов, исполнителей:
Что общего между этимиальбомами?
и т.д.
Поиск музыкальныхпроизведений:
Поиск по описаниютекста, музыки.
Поиск по году издания,жанру, рейтингу в чартах.
Поиск по исполнителю,альбому.
Поиск автора и названияпо фрагменту композиции.
Разрабатываемаяинтеллектуальная система ответит на подобные вопросы пользователя. Дополненнаябаза знаний позволит осуществить расширенный и углубленный поиск. Удобныйинтерфейс позволит интуитивно и просто найти все интересующие пользователясведения. Именно поэтому разработка справочника является актуальной ивостребованной.
1.2 Категориипользователей системы
Разрабатываемая интеллектуальнаясправочная система имеет обширную базу знаний и множество функциональныхвозможностей. Вследствие этого она поддерживает работу широкого кругапользователей. Можно выделить следующие категории пользователей:
·  меломан
·  начинающийслушатель
·  владелецмузыкального магазина или интернет-магазина
·  исполнитель
Далее приведеныпортреты пользователей системы.
 
1.2.1 Меломан
Портрет:
В данную категориюпользователей попадают люди, хорошо владеющие предметной областью. Они знаютисторию музыки, ориентируются в жанрах и направлениях. Могут четкосформулировать поисковый запрос, определенно знают, что ищут. Они имеютвозможность добавить новые знания, отредактировать или уточнить уже имеющиеся.
Функциональныевозможности:
·  добавлениеи удаление видеоклипов
·  добавлениеи удаление аудиоматериала
·  редактированиеимеющихся знаний
·  просмотрзнаний содержащихся в БЗ
·  поисккомпозиций по ключевым словам, по четким критериям
Цели:
·  пополнениесвоих знаний
·  поискмузыкальных произведений
·  заимствованиесвоего опыта для менее «продвинутых» пользователей
 
1.2.2 Начинающий слушатель
Портрет:
В данную категориюпользователей входят люди, которые желают найти для себя новую музыку, новозможно схожую с той, что ранее они слушали. Желающие познакомиться ближе смиром музыки, разобраться в ее жанрах и направлениях, открыть для себя новыхисполнителей и группы. Начинающий слушатель не может четко сформулироватьпоисковый запрос, поэтому для него разработаны специальные возможности поиска.
Функциональныевозможности:
·  просмотрзнаний содержащихся в БЗ
·  просмотрвидеоклипов
·  прослушиваниемузыкальных композиций
·  поискисполнителя по фрагменту музыкального произведения
·  поисккомпозиций по ключевым словам в описании
·  поисккомпозиций по эмоциональной окраске музыки и текста
·  поисккомпозиций по жанрам
·  поисккомпозиций с помощью временной ленты
·  получениеответа на нетривиальные вопросы о музыкальных произведениях
Цели:
·  получениебазовых знаний в предметной области
·  помощьв ориентировании по музыкальным произведениям
·  поискмузыкальных произведений по различным признакам
 
1.2.3 Владелец музыкального магазина илиинтернет-магазина
Портрет:
В данную категориюпользователей входят люди занимающиеся продажей носителей информации смузыкальными произведениями, клипами, записями концертов и выступлений. Для нихглавное структурировать информацию о продукции, для облегчения дальнейшейработы. Предоставление информации по имеющемуся ассортименту конечнымпотребителям.
Функциональныевозможности:
·  просмотринформации об исполнителях, альбомах и композициях
·  добавлениеинформации о новых исполнителях, альбомах, композициях
·  поискмузыкальных произведений
Цели:
·  пополнениебазы знаний новой информацией об исполнителях, альбомах и композициях
·  предоставленииинформации конечному потребителю

1.2.4 Исполнитель
Портрет:
В данную категориюпользователей входят люди, занимающиеся творческим процессом: написанием музыки,текстов – созданием новых музыкальных произведений. Для них будет интереснопросмотреть готовые композиции, чтобы ориентироваться в современной музыке.
Функциональныевозможности:
·  поискмузыкальных произведений
·  сравнениемузыкальных произведений
Цели:
·  ориентированиев современной музыкальной индустрии
 
1.3 Анализ аналогичных систем
1.3.1 All Music Guide
Крупная онлайноваямузыкальная база данных, принадлежащая организации All Media Guide. Данный продуктявляется энциклопедией с удобным графическим интерфейсом и поиском по ключевымсловам, названиям произведений, альбомов, исполнителей, содержит хорошопроработанную БД с большим количеством информации. Язык интерфейса английский.
1.3.2 MusicBrainz!
Проект созданияоткрытой музыкальной энциклопедии. MusicBrainz хранит сведения о музыке,которая когда-либо была записана, а не саму музыку. Все основные данные,хранимые в MusicBrainz (зафиксированные данные об исполнителях, альбомах,треках и т.п.) считаются общественным достоянием, а дополнительные сведения,такие, как данные о модерациях, распространяются под лицензией Creative Commonsnon-commercial share-and-share-alike. Язык интерфейса английский.
 
1.3.3 Музыкальный словарь Гроува
Британское справочноеиздание, посвящённое академической музыке. Под редакцией Лоры Мейси работаетпостоянно обновляемая и пополняемая сетевая версия словаря. Годовая подписка напользование ею составляет 300 долларов. Права на издание и онлайн-версию с 2004г. принадлежат издательству Оксфордского университета, вследствие чего сайт изGrove Music Online был переименован в Oxford Music Online. Включает в себяболее 50000 статей и 28000 биографий, внесенных более чем 6000 ученых со всегомира. Язык интерфейса английский.
 
1.3.4 Сравнение аналогичных систем синтеллектуальным справочником по музыкальным произведениям
В аналогичных системахне предусмотрен диалог пользователя и системы, то есть, нет возможности задатьсправочникам вопросы. В отличие от них в интеллектуальной справочной системе помузыкальным произведениям такая возможность есть. Возможность диалога ссистемой отображает ее интеллектуальные способности в полной мере. Она способноответить на все многообразие вопросов, которые могут возникнуть у пользователяв процессе поиска композиции, альбома или исполнителя.
Так же можно сказать отом, что у интеллектуальной справочной системе довольно простой интерфейс.Пользователь сможет быстро разобраться с методами получения необходимой емуинформации.

/>2.База знаний проектируемой интеллектуальной системы
/> 
2.1 Задачно-ориентированная спецификациябазы знаний проектируемой интеллектуальной системы
/>2.1.1Тестовый сборник вопросов
Описание тестовыхвопросов:
Все известныеисполнители.
Фотография конкретногоисполнителя.
Альбомы выбранногоисполнителя.
Изображение обложкиальбома.
Сравнение двух альбомовпо их характеристикам.
Композиции входящие ввыбранный альбом.
Прослушиваниекомпозиции.
Просмотр видеоклипа навыбранную композицю.
Поиск альбома по егохарактеристикам.
Поиск композиции по еехарактеристикам.
Описание музыкальногожанра.
Виды носителей.
Авторы текста икомпозиторы.
Переченьдемонстрационных вопросов:
Получение всехисполнителей БЗ.
Описание основныххарактеристик исполнителя.
Просмотр фотографииисполнителя.
Альбомы выбранного исполнителя.
Просмотр обложкиальбома.
Описание основныххарактеристик альбома.
Композиции входящие вданный альбом.
Описание основныххарактеристик композиции.
Поиск композиций порейтингу.
 
2.1.2 Список используемых в базе знанийпроектируемой интеллектуальной справочной системы ip-компонентов
В даннойинтеллектуальной справочной системе использованы исходные разделы база знанийhelp-системы:
ИсхБз. SC-ядро
ИсхБз. SCg-язык
ИсхБз. SС-язык множеств
ИсхБз. SС-языкотношений
ИсхБз. SС-язык числовыхсистем
ИсхБз. ЛогическийSС-язык
ИсхБз. ГипермедийныйSС-язык
ИсхБз. ДидактическийSС-язык
ИсхБз. SС-язык описанияошибок
ИсхБз. Пользовательскийинтерфейс SRS
Включение этого компонентав проектируемую систему позволяет уменьшить сроки разработки, так как нетнеобходимости повторного проектирования данных фрагментов.
2.2 Онтология базызнаний проектируемой интеллектуальной системы
Бинарные отношения:
«альбом*» — бинарноеотношение между исполнителем и его альбомами.
«композиция*» — бинарное отношение между альбомом и композициями в него входящими.
«описание*» — бинарноеотношение между объектом и параметрами, его характеризующими.
«страна*» — бинарноеотношение между исполнителем и страной исполнителя.
«год*» — бинарноеотношение между исполнителем и годом его основания.
«вид*» — бинарноеотношение между исполнителем и его видом (группа, соло и т.д.).
«обложка*» — бинарноеотношение между альбомом и его обложкой.
«год выпуска*» — бинарное отношение между альбомом и годом его выпуска.
«носитель*» — бинарноеотношение между альбомом и носителем, на котором он был издан.
«тип записи*» — бинарное отношение между альбомом и типом его записи.
«объем*» — бинарноеотношение между альбомом и его объемом.
«награды*» — бинарноеотношение между альбомом и его наградами.
«музыка*» — бинарноеотношение между композицией и его музыкой.
«текст*» — бинарноеотношение между композицией и его текстом.
«время*» — бинарноеотношение между композицией и его продолжительностью.
«место в чарте*» — бинарное отношение между композицией и местом в чарте.
«лейбл*» — бинарноеотношение между композицией и лейблом звукозаписи.
«композитор*» — бинарное отношение между музыкой композиции и его композитором.
«автор*» — бинарноеотношение между текстом композиции и его автором.
«тема*» — бинарноеотношение между текстом композиции и его темой.
Всего: 20 бинарныхотношений.
«Исполнители» — группавсех исполнителей.
«Альбомы» — группа всехальбомов.
«Композиции» — группавсех композиций.
«Носители» — группавсех носителей.
«Композиторы»» — группавсех композиторов музыки.
«Авторы» — группа всехавторов текста.
Всего: 6 узлов групп.
 
2.3 Содержательная декомпозиция базызнаний проектируемой интеллектуальной системы
Базу знаний можноподелить на фрагменты, в которых дается описание исполнителей, альбомов, МП иотношений между ними.
Так при описанииисполнителя представлены следующие характеристики: страна*, год основания*,вид*. Пример описания одного из исполнителей представлен на рисунке 2.3.1.
/>
Рисунок 2.3.1. – Описание исполнителя
При описании альбома вкачестве его характеристик представлены: обложка альбома*, год выпуска*,носитель*, тип записи*, объем*, награды*. Пример описания альбома представленна рисунке 2.3.2.

/>
Рисунок 2.3.2. – Описание альбома
Пример описания МПпредставлен на рисунке 2.3.3.
/>
Рисунок 2.3.3. – Описание МП

Пример описанияструктуры отношений представлен на рисунке 2.3.4.
/>
Рисунок 2.3.4. –Описание структуры отношений
 
2.4 Исходные тексты базы знанийпрототипа интеллектуальной системы
Исходные тексты базызнаний прототипа интеллектуальной системы хранятся в следующих файлах:
8diagrams_album.gwf
bringdaruckus_track.gwf
clapyohands_track.gwf
enterthewutang_album.gwf
familytree_track.gwf
iicons_album.gwf
intro.gwf
naughtybynature_artist.gwf
naughtybynature_struct.gwf
oldergods_track.gwf
povetry`sparadise_album.gwf
protectyaneck_track.gwf
shameonanigga_track.gwf
whatyouwannado_track.gwf
wutangclan_artist.gwf
wutangclan_struct.gwf
wutangforever_album.gwf
elmanana_track.gwf
feelgoodinc_track.gwf
ogreenworld_track.gwf
kidswithguns_track.gwf
lastlivingsouls_track.gwf
intro_track.gwf
demondays_album.gwf
gorillaz_struct.gwf
rockthehouse_track.gwf
doublebass_track.gwf
soundcheck_track.gwf
punk_track.gwf
manresearch_track.gwf
clinteastwood_track.gwf
newgenius_track.gwf
tomorrowcomestoday_track.gwf
54_track.gwf
re-hash_track.gwf
gorillaz_album.gwf
gorillaz_artist.gwf
Пример содержания этихфайлов можно увидеть на рисунках 2.3.1, 2.3.2, 2.3.3, 2.3.4.

2.5  Верификация иотладка базы знаний прототипа интеллектуальной системы
Верификация базы знанийв текущей версии интеллектуальной справочной системы по МП не производилась,так как в предыдущей версии системы база знаний была грамотно организована. Базабыла дополнена новыми исполнителями, альбомами и композициями. Дополнение ипроверка производилась с помощью SRS Studio.
2.6 Спецификацияразработанной базы знаний интеллектуальной системы и сертификация разработанныхip-компонентов
В базе знаний на данныймомент содержится 3 исполнителя, 7 альбомов и более 20 композиций.
В качествеip-компонентов могут быть использованы:
Определения понятий(МП, альбом, исполнитель, жанр и т.д.).
Музыкальные композиции.
Видеоклипы кмузыкальным произведениям.

3. Машина обработкизнаний проектируемой интеллектуальной справочной системы
3.1Задачно-ориентированная спецификация машины обработки знаний проектируемойинтеллектуальной справочной системы
3.1.1 Тестовый списокзадач
Под предметнымизадачами будем понимать все задачи, специфичные для данной предметной области:
·  поискисполнителей по описанию
·  поискинформации об исполнителях
·  поискальбомов по описанию
·  поискинформации об альбомах
·  поискМП по описанию
·  сравнениеальбомов
 
3.1.2 Содержательнаяклассификация задач
Множество предметныхзадач с точки зрения методов их решения можно разбить на два класса:
·  информационно-поисковыезадачи, ответы на которые присутствуют в базе знаний решателя предметных задачи, следовательно, их надо только найти;
·  задачи,ответы на которые требуется построить.
Средиинформационно-поисковых задач можно выделить задачи, в которых цель поискаможет быть точно описана «шаблоном» поиска, т.е. результатом решения задачибудут все фрагменты семантической сети базы знаний, удовлетворяющие этомушаблону. Примерами таких задач является
·  поискинформации о МП;
·  поискинформации об альбоме;
·  поискинформации об исполнителе.
Другим классоминформационно-поисковых задач являются задачи, результат решения которых неописывается шаблоном, а осуществляется с помощью scp-программы. Примерами такихзадач являются:
·  сравнениеальбомов;
·  поискальбомов по нескольким характеристикам;
·  поискМП по нескольким характеристикам.
/> 
3.1.3 Списокиспользуемых в операциях ip-компонентов
В даннойинтеллектуально справочной системе были использованы следующие операции,являющиеся Ip-компонентами, и предоставленные вместе со средой разработкиинтеллектуальных справочных систем:
all_input
all_output_all_types
analogy
example
graph
lib
logic_queries
logical_hierarhy
paramsProcessing
printSetArcs
printSetElems
main_close
main_open
open
pack_menu
peresechenie
reduce_menu
remove_menu_item
searchEnvironmentSmart
searchPatternEx
synonym_by_node
synonym_by_node_ui
synonym_by_term_ui
tests
ui_io_build_srs
ui_io_copy_scg
ui_io_erase_scg_countur
ui_io_erase_scg_el
ui_io_exec_command
ui_io_gen_srswindow
ui_io_increase
ui_io_load_folder
ui_io_load_scg
ui_io_modify_scg_el_content
ui_io_modify_scg_el_name
ui_io_modify_scg_el_type
ui_io_paste_scg
ui_io_reduction
ui_io_save_scg
ui_io_select_all
ui_registration_type_wnd
ui_show_content
ui_show_content_swf
ui_unregistration_type_wnd
update_menu
ways
whatisknown

/>3.1.4Классификация и спецификация операций проектируемой машины обработки знаний
1. Классификацияоперации all_performers.m4scp.
Название операции:all_performer.
Предметная ориентация:МП.
Входные параметры: нет.
Выходные параметры: всеизвестные исполнители.
Способ вызова:автоматически, при создании окна пользовательского интерфейса.
Спецификация операцииall_performers.m4scp.
Идентификатороперации:descr_all_performer.
Полноеимя:\operation\ all_performers.m4scp.
Комментарий: операцияпоиска в БЗ всех известных исполнителей.
Автор: Лукша Н.В.
2. Классификацияоперации all_albums_this_performer.m4scp.
Названиеоперации:all_albums_this_performer.
Предметная ориентация:МП.
Входные параметры: узелс именем исполнителя.
Выходные параметры: всеальбомы данного исполнителя.
Способ вызова: привыборе исполнителя из ListBox.
Спецификацияоперацииall_albums_this_performer.m4scp.
Идентификатороперации:descr_all_albums_this_performer.
Полноеимя:\operation\all_albums_this_performer.m4scp.
Комментарий: операцияпоиска в БЗ всех альбомов данного исполнителя.
Автор: Лукша Н.В.
3. Классификацияоперации all_tracks_this_album.m4scp.
Названиеоперации:all_tracks_this_album.
Предметная ориентация:МП.
Входные параметры: узелс именем альбома.
Выходные параметры: всеМП данного альбома.
Способ вызова: привыборе альбома из ListBox.
Спецификация операцииall_tracks_this_album.m4scp.
Идентификатор операции:descr_all_tracks_this_album.
Полноеимя:\operation\all_tracks_this_album.m4scp.
Комментарий: операцияпоиска в БЗ всех МП из данного альбома.
Автор: Лукша Н.В.
4. Классификация операцииcountry_of_performer.m4scp.
Названиеоперации:country_of_performer.
Предметная ориентация:МП.
Входные параметры: узелс именем исполнителя.
Выходные параметры:страна данного исполнителя.
Способ вызова: привыборе исполнителя из ListBox.
Спецификацияоперацииcountry_of_performer.m4scp.
Идентификатороперации:descr_country_of_performer.
Полноеимя:\operation\country_of_performer.m4scp.
Комментарий: операцияпоиска в БЗ страны данного исполнителя.
Автор: Лукша Н.В.
5. Классификацияоперации kind_of_performer.m4scp.
Названиеоперации:kind_of_performer.
Предметная ориентация:МП.
Входные параметры: узелс именем исполнителя.
Выходные параметры: видданного исполнителя.
Способ вызова: привыборе исполнителя из ListBox.
Спецификацияоперацииkind_of_performer.m4scp.
Идентификатороперации:descr_kind_of_performer.
Полноеимя:\operation\kind_of_performer.m4scp.
Комментарий: операцияпоиска в БЗ вида данного исполнителя.
Автор: Лукша Н.В.
6. Классификацияоперации year_of_foundation.m4scp.
Названиеоперации:year_of_foundation.
Предметная ориентация:МП.
Входные параметры: узелс именем исполнителя.
Выходные параметры: годоснования данного исполнителя.
Способ вызова: привыборе исполнителя из ListBox.
Спецификацияоперацииyear_of_foundation.m4scp.
Идентификатороперации:descr_year_of_foundation.
Полноеимя:\operation\year_of_foundation.m4scp.
Комментарий: операцияпоиска в БЗ года основания данного исполнителя.
Автор: Лукша Н.В.
7. Классификацияоперации type_rec.m4scp.
Название операции:type_rec.
Предметная ориентация:МП.
Входные параметры: узелс именем альбома.
Выходные параметры: типзаписи данного альбома.
Способ вызова: привыборе исполнителя из ListBox.
Спецификация операцииtype_rec.m4scp.
Идентификатор операции:descr_type_rec.
Полноеимя:\operation\type_rec.m4scp.
Комментарий: операцияпоиска в БЗ типа записи данного альбома.
Автор: Лукша Н.В.
8. Классификацияоперации vol.m4scp.
Название операции: vol.
Предметная ориентация:МП.
Входные параметры: узелс именем альбома.
Выходные параметры: типзаписи данного альбома.
Способ вызова: привыборе исполнителя из ListBox.
Спецификация операцииvol.m4scp.
Идентификатор операции:descr_vol.
Полноеимя:\operation\vol.m4scp.
Комментарий: операцияпоиска в БЗ типа записи данного альбома.
Автор: Лукша Н.В.
9. Классификацияоперации style_of_track.m4scp.
Название операции:style_of_track.
Предметная ориентация:МП.
Входные параметры: узелс именем альбома.
Выходные параметры: типзаписи данного альбома.
Способ вызова: при выбореисполнителя из ListBox.
Спецификация операцииstyle_of_track.m4scp.
Идентификатороперации:descr_style_of_track.
Полноеимя:\operation\style_of_track.m4scp.
Комментарий: стиль МП.
Автор: Лукша Н.В.
10. Классификацияоперации rewards.m4scp.
Название операции:rewards.
Предметная ориентация:МП.
Входные параметры: узелс именем альбома.
Выходные параметры: типзаписи данного альбома.
Способ вызова: привыборе исполнителя из ListBox.
Спецификация операцииrewards.m4scp.
Идентификатор операции:descr_rewards.
Полноеимя:\operation\rewards.m4scp.
Комментарий: наградыданного альбома.
Автор: Лукша Н.В.
11. Классификацияоперации type_rec.m4scp.
Название операции:type_rec.
Предметная ориентация:МП.
Входные параметры: узелс именем альбома.
Выходные параметры: типзаписи данного альбома.
Способ вызова: привыборе исполнителя из ListBox.
Спецификация операцииtype_rec.m4scp.
Идентификатор операции:descr_type_rec.
Полноеимя:\operation\type_rec.m4scp.
Комментарий: операцияпоиска в БЗ типа записи данного альбома.
Автор: Лукша Н.В.
12. Классификацияоперации rating.m4scp.
Название операции:rating.
Предметная ориентация:МП.
Входные параметры: узелс именем альбома.
Выходные параметры: типзаписи данного альбома.
Способ вызова: привыборе исполнителя из ListBox.
Спецификация операцииrating.m4scp.
Идентификатор операции:descr_rating.
Полноеимя:\operation\rating.m4scp.
Комментарий: рейтингданной композиции.
Автор: Лукша Н.В.
13. Классификацияоперации label_rec.m4scp.
Название операции:label_rec.
Предметная ориентация:МП.
Входные параметры: узелс именем альбома.
Выходные параметры: типзаписи данного альбома.
Способ вызова: привыборе исполнителя из ListBox.
Спецификация операцииlabel_rec.m4scp.
Идентификатор операции:descr_label_rec.
Полноеимя:\operation\label_rec.m4scp.
Комментарий: поисклейбла звукозаписи.
Автор: Лукша Н.В.

3.1.5 Декомпозицияопераций на подпрограммы и содержательная структура библиотеки программспецифицированных операций
В написанныхscp-операциях подпрограммы не использовались.
 
3.2  Алгоритмы и исходные текстыпрограмм, реализующие операции машины обработки знаний прототипаинтеллектуальной справочной системы
·  поискальбома по описанию (файл search_by_param.m4scp)
·  входныепараметры: узлы, характеризующие искомый альбом;
·  выходныепараметры: все альбомы подходящие под данное описание.
Алгоритм:
Делаем копию входныхпараметров.
Проверяем первыйпараметр.
Находим все альбомы,которые удовлетворяют п.2 и объединяем их в множество 1.
Проверяем второйпараметр (если такового нет, переходим п.10).
Находим все альбомы,которые удовлетворяют п.4 и объединяем их в множество 2.
Проверяем третийпараметр (если такового нет, переходим в п.9).
Находим все альбомы,которые удовлетворяют п.6 и объединяем их в множество 3.
Находим пересечениемножеств 1 и 3 и записываем в множество 1.
Находим пересечениемножеств 1 и 2 и записываем в множество 1.
Выводим множество 1 нановый лист.
Пример диалога:

/>
Рисунок 3.2.1 — вопрос «Поиск альбома поописанию»
/>
Рисунок 3.2.2 — ответна вопрос «Поиск альбома по описанию»
Исходный текстоперации:
//#Операция поискаальбома по его описанию
#include«scp_keynodes.scsy»
#include"../seb/planimetry.scsy"
procedure(search_by_param,
[[
  sheet_type= "/proc/agents/shell/keynode/SCgSheet";
  sheet_title= /«Операция прошла успешно»/;
  atr1= "/proc/keynode/1_";
  atr2= "/proc/keynode/2_";
  ui_information;
  layout;
  «MB_TITLE_QUERY_RESULT»= /«Результат запроса»/;
  «MB_TEXT_METKA»= /«Метка»/;
  «MB_TEXT_ERROR1»= /«Не равны»/;
  «MB_TEXT_ERROR2»= /«А сломалося!»/;
  «Альбомы»;
  «описание*»;
  «типзаписи*»
]],
[{
  sheet,
  shift,
  node,
  node1,
  node_temp,
  node_temp1,
  arc,
  arc1,
  arc2,
  attr_arc,
  selected_els,
  selected_els_copy,
  result_set,
  result_set1,
  result_set2,
  temp_node_with_param,
  test_node,
  node_param,
  result,
  set_albums_copy,
  node_album,
  set_album_param,
  temp_node,
  temp_set_1,
  temp_set_2,
  temp_set_3,
  temp_set_5,
  temp_set_0,
  resultSet1,
  resultSet2,
  resultSet3,
  resultSet4,
  node_out_resSet2,
  node_out_resSet3,
  node_out_resSet4,
  output_set
}],
{[
  1_:in_: selected_els,
  2_:in_: sheet,
  3_:in_: shift
]}
)
genEl([
 1_:assign_: node_: output_set
])
genEl([
 1_:assign_: node_: result_set
])
genEl([
 1_:assign_: node_: result_set1
])
genEl([
 1_:assign_: node_: result_set2
])
//#Копияselected_els_copy входных данных
searchSetStr3([
    1_:fixed_: selected_els,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:assign_: selected_els_copy
])
//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy
searchElStr3([
    1_:fixed_: selected_els_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: temp_node_with_param
])
//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node
eraseEl([
    1_:fixed_: arc
])
//#Делаемкопиюset_albums_copy всех альбомов
searchSetStr3([
    1_:fixed_: «Альбомы»,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:assign_: set_albums_copy
])
//#Проверяем описаниекаких альбомов удовлетворяет узел temp_node_with_param
//#Берем один альбомnode_album из множества альбомов set_albums_copy
label(other_album)
searchElStr3([
    1_:fixed_: set_albums_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: const_: node_album
],,not_other_album)
//#Удаляемдугуarc проведеннуюизset_albums_copy кnode_album
eraseEl([
    1_:fixed_: arc
])
//#Найдеммножествоset_album_param всех описанийальбомаnode_album
//#---------------1_проходимпервуюпару_------------------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_album,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr3([
    1_:fixed_: «описание*»,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
])
searchElStr3([
    1_:fixed_: resultSet2,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet2
])
searchSetStr5([
    1_:fixed_: node_out_resSet2,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: const_: node_: node,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
    set3_:assign_: resultSet3
])
//#---------------2_проходимтройку_------------------
searchElStr3([
    1_:fixed_: resultSet3,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet3
])
searchSetStr3([
    1_:fixed_: node_out_resSet3,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet4
])
//#Альбомы описываютсяпо трем критериям, проверяем каждый из
//#---------------1_Проверкапо типу записи_--------------
label(other_handler)
searchElStr3([
    1_:fixed_: resultSet4,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet4
],,other_album)
//#Удаляемдугуarc проведеннуюизresultSet4 к node_out_resSet4
eraseEl([
    1_: fixed_: arc
])
//#--------Ищем альбомпо его введенному описанию---------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_out_resSet4,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: temp_node_with_param,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
    set1_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
],,other_handler)
genElStr3([
 1_:fixed_: result_set,
 2_:assign_: const_: pos_: arc,
 3_:fixed_: node_album
],other_album,)
label(not_other_album)
////////////////////////////////////////////////////////////////////////
////
//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy
searchElStr3([
    1_:fixed_: selected_els_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: temp_node_with_param
],,output)
//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node
eraseEl([
    1_:fixed_: arc
])
//#Делаемкопиюset_albums_copy всех альбомов
searchSetStr3([
    1_:fixed_: «Альбомы»,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:assign_: set_albums_copy
])
//#Проверяем описаниекаких альбомов удовлетворяет узел temp_node_with_param
//#Берем один альбомnode_album из множества альбомов set_albums_copy
label(other_album1)
searchElStr3([
    1_:fixed_: set_albums_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: const_: node_album
],,not_other_album1)
//#Удаляемдугуarc проведеннуюизset_albums_copy кnode_album
eraseEl([
    1_:fixed_: arc
])
//#Найдеммножествоset_album_param всех описанийальбомаnode_album
//#---------------1_проходимпервуюпару_------------------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_album,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr3([
    1_:fixed_: «описание*»,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
])
searchElStr3([
    1_:fixed_: resultSet2,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet2
])
searchSetStr5([
    1_:fixed_: node_out_resSet2,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: const_: node_: node,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
    set3_:assign_: resultSet3
])
//#---------------2_проходимтройку_------------------
searchElStr3([
    1_:fixed_: resultSet3,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet3
])
searchSetStr3([
    1_:fixed_: node_out_resSet3,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet4
])
//#Альбомы описываютсяпо трем критериям, проверяем каждый из
//#---------------1_Проверкапо типу записи_--------------
label(other_handler1)
searchElStr3([
    1_:fixed_: resultSet4,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet4
],,other_album1)
//#Удаляемдугуarc проведеннуюизresultSet4 к node_out_resSet4
eraseEl([
    1_: fixed_: arc
])
//#--------Ищем альбомпо его введенному описанию---------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_out_resSet4,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: temp_node_with_param,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
    set1_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
],,other_handler1)
genElStr3([
 1_:fixed_: result_set1,
 2_:assign_: const_: pos_: arc,
 3_:fixed_: node_album
],other_album1,)
////////////////////////////////////////////////////////////////////////
label(not_other_album1)
////////////////////////////////////////////////////////////////////////
//
//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy
searchElStr3([
    1_:fixed_: selected_els_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: temp_node_with_param
],,output)
//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node
eraseEl([
    1_:fixed_: arc
])
//#Делаемкопиюset_albums_copy всех альбомов
searchSetStr3([
    1_:fixed_: «Альбомы»,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:assign_: set_albums_copy
])
//#Проверяем описаниекаких альбомов удовлетворяет узел temp_node_with_param
//#Берем один альбомnode_album из множества альбомов set_albums_copy
label(other_album2)
searchElStr3([
    1_:fixed_: set_albums_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: const_: node_album
],,not_other_album2)
//#Удаляемдугуarc проведеннуюизset_albums_copy кnode_album
eraseEl([
    1_:fixed_: arc
])
//#Найдеммножествоset_album_param всех описанийальбомаnode_album
//#---------------1_проходимпервуюпару_------------------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_album,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr3([
    1_:fixed_: «описание*»,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
])
searchElStr3([
    1_:fixed_: resultSet2,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet2
])
searchSetStr5([
    1_:fixed_: node_out_resSet2,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: const_: node_: node,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
    set3_:assign_: resultSet3
])
//#---------------2_проходимтройку_------------------
searchElStr3([
    1_:fixed_: resultSet3,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet3
])
searchSetStr3([
    1_:fixed_: node_out_resSet3,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet4
])
//#Альбомы описываютсяпо трем критериям, проверяем каждый из
//#---------------1_Проверкапо типу записи_--------------
label(other_handler2)
searchElStr3([
    1_:fixed_: resultSet4,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet4
],,other_album2)
//#Удаляемдугуarc проведеннуюизresultSet4 к node_out_resSet4
eraseEl([
    1_: fixed_: arc
])
//#--------Ищем альбомпо его введенному описанию---------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_out_resSet4,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: temp_node_with_param,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
    set1_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
],,other_handler2)
genElStr3([
 1_:fixed_: result_set2,
 2_:assign_: const_: pos_: arc,
 3_:fixed_: node_album
],other_album2,)
////////////////////////////////////////////////////////////////////////
label(not_other_album2)
//////////////////////////
label(output)
////////////////////////////////////////////////////////////////////////
searchSetStr3([
    1_:fixed_: result_set,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:fixed_: output_set
])
//#Проверим является лимножество result_set1 пустым
searchElStr3([
    1_:fixed_: result_set1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node
],,out)
selectYStr3([
    1_:fixed_: result_set1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: output_set
])
//#Проверим является лимножество result_set2 пустым
searchElStr3([
    1_:fixed_: result_set2,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node
],,out)
selectYStr3([
    1_:fixed_: result_set2,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: output_set
])
////////////////////////////////////////////////////////////////////////
label(out)
ui_sheet_create([
    1_:assign_: sheet,
   2_:fixed_: sheet_type,
   3_:fixed_: sheet_title,
   4_:fixed_: layout
])
ui_output([1_:fixed_: sheet, 2_: fixed_: output_set])
return()
end
поискальбомапотипузаписи(файлsearch_by_type.m4scp)
входные параметры:узел, содержащий тип записи;
выходные параметры: всеальбомы с данным типом записи.
Пример диалога:
/>
Рисунок 3.2.3 — вопрос «Поиск альбома потипу записи»
/>
Рисунок 3.2.4 — ответ на вопрос «Поискальбома по типу записи»
Алгоритм:
Делаем копию входныхпараметров.
Находим все узлыальбомов, подходящие под введенное описание и записываем их в множество 1.
Выводим на новый листмножество 1.
Исходный текстоперации:
//#Операция поискаальбома по его описанию
#include«scp_keynodes.scsy»
#include"../seb/planimetry.scsy"
procedure(search_by_type,
[[
  sheet_type= "/proc/agents/shell/keynode/SCgSheet";
  sheet_title= /«Операция прошла успешно»/;
  atr1= "/proc/keynode/1_";
  atr2= "/proc/keynode/2_";
  ui_information;
  layout;
  «MB_TITLE_QUERY_RESULT»= /«Результат запроса»/;
  «MB_TEXT_METKA»= /«Метка»/;
  «MB_TEXT_ERROR1»= /«Не равны»/;
  «MB_TEXT_ERROR2»= /«А сломалося!»/;
  «Альбомы»;
  «описание*»;
  «типзаписи*»
]],
[{
  sheet,
  shift,
  node,
  node1,
  node_temp,
  node_temp1,
  arc,
  arc1,
  arc2,
  attr_arc,
  selected_els,
  selected_els_copy,
  result_set,
  temp_node_with_param,
  test_node,
  node_param,
  result,
  set_albums_copy,
  node_album,
  set_album_param,
  temp_node,
  temp_set_1,
  temp_set_2,
  temp_set_3,
  temp_set_5,
  temp_set_0,
  resultSet1,
  resultSet2,
  resultSet3,
  resultSet4,
  node_out_resSet2,
  node_out_resSet3,
  node_out_resSet4
}],
{[
  1_:in_: selected_els,
  2_:in_: sheet,
  3_:in_: shift
]}
)
genEl([
 1_:assign_: node_: result_set
])
//#Копияselected_els_copy входных данных
searchSetStr3([
    1_:fixed_: selected_els,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:assign_: selected_els_copy
])
//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy
searchElStr3([
    1_:fixed_: selected_els_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: temp_node_with_param
])
//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node
eraseEl([
    1_:fixed_: arc
])
//#Делаемкопиюset_albums_copy всех альбомов
searchSetStr3([
    1_:fixed_: «Альбомы»,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:assign_: set_albums_copy
])
//#Проверяем описаниекаких альбомов удовлетворяет узел temp_node_with_param
//#Берем один альбомnode_album из множества альбомов set_albums_copy
label(other_album)
searchElStr3([
    1_:fixed_: set_albums_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: const_: node_album
],,not_other_album)
//#Удаляемдугуarc проведеннуюизset_albums_copy кnode_album
eraseEl([
    1_:fixed_: arc
])
//#Найдеммножествоset_album_param всех описанийальбомаnode_album
//#---------------1_проходимпервуюпару_------------------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_album,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr3([
    1_:fixed_: «описание*»,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
])
searchElStr3([
    1_:fixed_: resultSet2,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet2
])
searchSetStr5([
    1_:fixed_: node_out_resSet2,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: const_: node_: node,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
    set3_:assign_: resultSet3
])
//#---------------2_проходимтройку_------------------
searchElStr3([
    1_:fixed_: resultSet3,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet3
])
searchSetStr3([
    1_:fixed_: node_out_resSet3,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet4
])
//#Альбомы описываютсяпо трем критериям, проверяем каждый из
//#---------------1_Проверкапо типу записи_--------------
label(other_handler)
searchElStr3([
    1_:fixed_: resultSet4,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet4
],,other_album)
//#Удаляемдугуarc проведеннуюизresultSet4 к node_out_resSet4
eraseEl([
    1_:fixed_: arc
])
//#--------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_out_resSet4,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr3([
    1_:fixed_: «тип записи*»,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
],,other_handler)
searchElStr3([
    1_:fixed_: resultSet2,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet2
])
searchSetStr5([
    1_:fixed_: node_out_resSet2,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: const_: node_: node,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
    set3_:assign_: resultSet3
])
//#--------_Выделяемодно из описаний типа записи node_param_----------
searchElStr3([
    1_:fixed_: resultSet3,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_param
])
//#--------_Проверкаравенства найденного описания и введенного пользователем_-----
ifCoin([
 1_:fixed_: node_param,
 2_:fixed_: temp_node_with_param
],,other_album)
//#--------_Если альбомудовлетворяет условию, то заносим его в result_set_-------
genElStr3([
 1_:fixed_: result_set,
 2_:assign_: const_: pos_: arc,
 3_:fixed_: node_album
],other_album,other_album,other_album)
label(not_other_album)
ui_sheet_create([
    1_:assign_: sheet,
   2_:fixed_: sheet_type,
   3_:fixed_: sheet_title,
   4_:fixed_: layout
])
ui_output([1_:fixed_: sheet, 2_: fixed_: result_set])
return()
end
сравнение альбомов(файл ass.m4scp)
входные параметры:альбомы для сравнения;
выходные параметры:общие характеристики для сравниваемых альбом.
Пример диалога:

/>
Рисунок 3.1.5 — вопрос «Поиск альбома потипу записи»
/>
Рисунок 3.1.6 — ответ на вопрос «Поискальбома по типу записи»
Алгоритм:
Делаем копию входныхданных.
Находим все параметрыописания для первого альбома и записываем в множество 1.
Находим все параметрыописания для второго альбома и записываем в множество 2.
Находим пересечениемножеств 1 и 2, записываем результат в множество 1.
Выводим на новый листмножество 1.
Исходный текстоперации:
//#Операция общее междудвумя альбомами
#include«scp_keynodes.scsy»
#include"../seb/planimetry.scsy"
procedure(ass,
[[
  sheet_type= "/proc/agents/shell/keynode/SCgSheet";
  sheet_title= /«Операция прошла успешно»/;
  atr1= "/proc/keynode/1_";
  atr2= "/proc/keynode/2_";
  ui_information;
  layout;
  «MB_TITLE_QUERY_RESULT»= /«Результат запроса»/;
  «MB_TEXT_METKA»= /«Метка»/;
  «MB_TEXT_ERROR1»= /«Не равны»/;
  «MB_TEXT_ERROR2»= /«А сломалося!»/;
  «Альбомы»;
  «описание*»;
  «типзаписи*»
]],
[{
  sheet,
  shift,
  node,
  node1,
  node_temp,
  node_temp1,
  arc,
  arc1,
  arc2,
  attr_arc,
  selected_els,
  selected_els_copy,
  result_set,
  result_set1,
  result_set2,
  temp_node_with_param,
  test_node,
  node_param,
  result,
  set_albums_copy,
  node_album,
  set_album_param,
  temp_node,
  temp_set_1,
  temp_set_2,
  temp_set_3,
  temp_set_5,
  temp_set_0,
  resultSet1,
  resultSet2,
  resultSet3,
  resultSet4,
  node_out_resSet2,
  node_out_resSet3,
  node_out_resSet4,
  output_set,
  set1,
  set2,
  set3,
  set4,
  node_in,
  node_to_result_set1,
  node_to_result_set2,
  node_out,
  node_to_description,
  node_start_descr,
  set_with_node_start_descrp,
  node_to_result,
  set_album1,
  set_album2
}],
{[
  1_:in_: selected_els,
  2_:in_: sheet,
  3_:in_: shift
]}
)
genEl([
 1_:assign_: node_: output_set
])
genEl([
 1_:assign_: node_: result_set
])
genEl([
 1_:assign_: node_: result_set1
])
genEl([
 1_:assign_: node_: result_set2
])
genEl([
 1_:assign_: node_: result
])
genEl([
 1_:assign_: node_: set_album1
])
genEl([
 1_:assign_: node_: set_album2
])
//#Копияselected_els_copy входных данных
searchSetStr3([
    1_:fixed_: selected_els,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:assign_: selected_els_copy
])
//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy
searchElStr3([
    1_:fixed_: selected_els_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: node_album
])
//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node
eraseEl([
    1_:fixed_: arc
])
//#Найдеммножествоset_album_param всех описанийальбомаnode_album
//#---------------1_проходимпервуюпару_------------------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_album,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr3([
    1_:fixed_: «описание*»,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
])
searchElStr3([
    1_:fixed_: resultSet2,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet2
])
searchElStr5([
    1_:fixed_: node_out_resSet2,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: const_: node_: node_to_description,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
])
//#---------------2_проходимтройку_------------------
searchSetStr3([
    1_:fixed_: node_to_description,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_start_descr,
    set3_:assign_: set_with_node_start_descrp
])
//#--------------_Записываемвсе параметры в сеты для каждого альбома----------------
label(next_descrp)
searchElStr3([
    1_:fixed_: set_with_node_start_descrp,
    2_:assign_: arc,
    3_:assign_: node_in
],,next_album)
//#----_ydalilidugu k yzly_---
eraseEl([
    1_:fixed_: arc
])
//#--------_Пройдемпятерочку_----
searchElStr5([
    1_:assign_: node_out,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_in,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_: atr1
])
searchElStr5([
    1_:fixed_: node_out,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node_to_result,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_: atr2
])
genElStr3([
    1_:fixed_: set_album1,
    2_:assign_: arc_: arc,
    3_:fixed_: node_to_result
],next_descrp,)
//#-----_povtaryaemvse dlya vtorogo alboma_--------
label(next_album)
//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy
searchElStr3([
    1_:fixed_: selected_els_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: node_album
])
//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node
eraseEl([
    1_:fixed_: arc
])
//#Найдеммножествоset_album_param всех описанийальбомаnode_album
//#---------------1_проходимпервуюпару_------------------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_album,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr3([
    1_:fixed_: «описание*»,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
])
searchElStr3([
    1_:fixed_: resultSet2,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet2
])
searchElStr5([
    1_:fixed_: node_out_resSet2,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: const_: node_: node_to_description,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
])
//#---------------2_проходимтройку_------------------
searchSetStr3([
    1_:fixed_: node_to_description,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_start_descr,
    set3_:assign_: set_with_node_start_descrp
])
//#--------------_Записываемвсе параметры в сеты для каждого альбома----------------
label(next_descrp2)
searchElStr3([
    1_:fixed_: set_with_node_start_descrp,
    2_:assign_: arc,
    3_:assign_: node_in
],,out)
//#----_ydalilidugu k yzly_---
eraseEl([
    1_:fixed_: arc
])
//#--------_Пройдемпятерочку_----
searchElStr5([
    1_:assign_: node_out,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_in,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_: atr1
])
searchElStr5([
    1_:fixed_: node_out,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node_to_result,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_: atr2
])
genElStr3([
    1_:fixed_: set_album2,
    2_:assign_: arc_: arc,
    3_:fixed_: node_to_result
],next_descrp2,)
label(out)
//#--------_Naxodimobschie elementy_--------
selectYStr3([
    1_:fixed_: set_album2,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: set_album1
])
//#--------_Вывод_-------
ui_sheet_create([
    1_:assign_: sheet,
   2_:fixed_: sheet_type,
   3_:fixed_: sheet_title,
   4_:fixed_: layout
])
ui_output([1_:fixed_: sheet, 2_: fixed_: set_album1])
return()
end
поиск года основанияисполнителя (файл year_of_foundation.m4scp)
входные параметры:узел, содержащий название исполнителя;
выходные параметры: годоснования исполнителя.
Пример диалога:

/>
Рисунок 3.2.6 — вопрос год основанияисполнителя
Алгоритм:
Делаем копию входныхпараметров.
Ищем год основанияисполнителя.
Формируемрезультирующее множество.
Исходный текстоперации:
//#Операция получениягода основания выбранного исполнителя
#include«scp_keynodes.scsy»
#include"../seb/planimetry.scsy"
procedure(year_of_foundation,
[[
  sheet_type= "/proc/agents/shell/keynode/SCgSheet";
  sheet_title= /«Операция прошла успешно»/;
  atr1= "/proc/keynode/1_";
  atr2= "/proc/keynode/2_";
  ui_information;
  layout;
  «MB_TITLE_QUERY_RESULT»= /«Результат запроса»/;
  «MB_TEXT_METKA»= /«Метка»/;
  sall= "/etc/im_keynode/get_year";
  cmd= "/operation/ui_io_exec_command_par/exec_command_par";
  beg= /"...!!year_of_found_performer!!..\n"/;
  «описание*»;
  «годоснования*»;
  «Исполнители»
]],
[{
  sheet,
  shift,
  node,
  node1,
  node2,
  node3,
  node4,
  node5,
  performer,
  arc,
  arc1,
  arc2,
  arc3,
  selected_els,
  selected_els_copy,
  set,
  set1,
  set2,
  set3,
  set4,
  result_set,
  output_set,
  out,
  descr
}],
{[
  1_:in_: selected_els,
  2_:in_: sheet,
  3_:in_: shift
]}
)
//#Копияselected_els_copy входных данных
searchSetStr3([
    1_:fixed_: selected_els,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:assign_: selected_els_copy
])
label(other_copy)
//#Выделяемодинизэлементовperformer множестваselected_els_copy
searchElStr3([
    1_:fixed_: selected_els_copy,
    2_:assign_: const_: arc,
    3_:assign_: const_: performer
])
//#Удаляемдугуarc проведеннуюизselected_els_copy кperformer
eraseEl([
    1_:fixed_: arc
])
//#Проходим первуюпятерку пары
searchSetStr5([
 1_:assign_: const_: node1,
 2_:assign_: const_: arc1,
 3_:fixed_: performer,
    4_:assign_: const_: arc2,
    5_:fixed_: atr1,
 set1_:assign_: set
],,other_copy,other_copy)
//#Под отношениемописание*
searchSetStr3([
    1_: fixed_:«описание*»,
    2_:assign_: const_: arc,
    3_:assign_: const_: node,
    set3_:assign_: set1
])
//#Находим пересечениемножеств set и set1
selectYStr3([
 1_:fixed_: set1,
 2_:assign_: const_: arc3,
 3_:assign_: node_: node2,
 set3_:fixed_: set
 ],,other_copy,other_copy)
searchElStr3([
    1_:fixed_: set,
    2_:assign_: const_: arc,
    3_:assign_: const_: node3
])
//#Проходим вторуюпятерку пары
searchSetStr5([
 1_:fixed_: node3,
 2_:assign_: const_: arc1,
 3_:assign_: node4,
    4_:assign_: const_: arc2,
    5_:fixed_: atr2,
 set3_:assign_: set2
],,other_copy,other_copy)
searchElStr3([
    1_:fixed_: set2,
    2_:assign_: const_: arc,
    3_:assign_: const_: node1
])
//#Проходимтройку
searchSetStr3([
    1_:fixed_: node1,
    2_:assign_: const_: arc,
    3_:assign_: const_: node,
    set3_:assign_: set
])
label(other_node)
searchElStr3([
    1_:fixed_: set,
    2_:assign_: const_: arc,
    3_:assign_: const_: node5
])
//#Удаляемдугуarc
eraseEl([
    1_:fixed_: arc
])
//#Проходим первуюпятерку второй пары
searchSetStr5([
 1_:assign_: const_: node1,
 2_:assign_: const_: arc1,
 3_:fixed_: node5,
    4_:assign_: const_: arc2,
    5_:fixed_: atr1,
 set1_:assign_: set3
],,other_node,other_node)
//#Под отношением годоснования*
searchSetStr3([
    1_:fixed_: «год основания*»,
    2_:assign_: const_: arc,
    3_:assign_: const_: node,
    set3_:assign_: set4
])
//#Находим пересечениемножеств set3 и set4
selectYStr3([
 1_:fixed_: set4,
 2_:assign_: const_: arc3,
 3_:assign_: node_: node2,
 set3_:fixed_: set3
 ],,other_node,other_node)
searchElStr3([
    1_:fixed_: set3,
    2_:assign_: const_: arc,
    3_:assign_: const_: node3
])
//#Проходим вторую пятеркувторой пары
searchSetStr5([
 1_:fixed_: node3,
 2_:assign_: const_: arc1,
 3_:assign_: const_: node5,
    4_:assign_: const_: arc2,
    5_:fixed_: atr2,
 set3_:assign_: out
])
printNl([1_:fixed_: beg])
callReturn([1_:fixed_: cmd,
      2_:fixed_:{[
          1_:out,
          2_:sheet,
          3_:sall     
      ]}
],descr)
return()
end
поиск композиции порейтингу (файл search_by_rating.m4scp)
входные параметры:узел, содержащий название исполнителя;
выходные параметры: годоснования исполнителя.
Пример диалога:
/>
Рисунок 3.2.7 — вопрос композиции свыбранным рейтингом
Алгоритм:
Делаем копию входныхпараметров.
Ищем композиции порейтингу.
Формируемрезультирующее множество.
Исходный текстоперации:
//#Операция получениястраны выбранного исполнителя
#include«scp_keynodes.scsy»
#include"../seb/planimetry.scsy"
procedure(search_by_rating,
[[
  sheet_type= "/proc/agents/shell/keynode/SCgSheet";
  sheet_title= /«Операция прошла успешно»/;
  atr1= "/proc/keynode/1_";
  atr2= "/proc/keynode/2_";
  ui_information;
  layout;
  «MB_TITLE_QUERY_RESULT»= /«Результат запроса»/;
  «MB_TEXT_METKA»= /«Метка»/;
  sall= "/etc/im_keynode/get_search_rating";
  cmd= "/operation/ui_io_exec_command_par/exec_command_par";
  beg= /"...!!search_by_rating!!..\n"/;
  «описание*»;
  «место вчарте*»;
  «Исполнители»
]],
[{
  sheet,
  shift,
  node,
  node1,
  node2,
  node3,
  node4,
  node5,
  node6,
  performer,
  arc,
  arc1,
  arc2,
  arc3,
  selected_els,
  selected_els_copy,
  output_set,
  set,
  set1,
  set2,
  set3,
  set4,
  set_bean,
  out,
  descr
}],
{[
  1_:in_: selected_els,
  2_:in_: sheet,
  3_:in_: shift
]}
)
genEl([
    1_:assign_: node_: out
])
//#Копияselected_els_copy входных данных
searchSetStr3([
    1_:fixed_: selected_els,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:assign_: selected_els_copy
])
label(other_copy)
//#Выделяемодинизэлементовperformer множестваselected_els_copy
searchElStr3([
    1_:fixed_: selected_els_copy,
    2_:assign_: const_: arc,
    3_:assign_: const_: performer
])
//#Удаляемдугуarc проведеннуюизselected_els_copy кperformer
eraseEl([
    1_:fixed_: arc
])
//#Проходим первуюпятерку пары
searchSetStr5([
 1_:assign_: const_: node1,
 2_:assign_: const_: arc1,
 3_:fixed_: performer,
    4_:assign_: const_: arc2,
    5_:fixed_: atr2,
 set1_:assign_: set_bean
],,other_copy,other_copy)
//#Под отношением местов чарте*
searchSetStr3([
    1_:fixed_: «место вчарте*»,
    2_:assign_: const_: arc,
    3_:assign_: const_: node,
    set3_:assign_: set1
])
//#Находим пересечениемножеств set и set1
selectYStr3([
 1_:fixed_: set1,
 2_:assign_: const_: arc3,
 3_:assign_: node_: node2,
 set3_:fixed_: set_bean
 ],,other_copy,other_copy)
label(other_bean)
//#Выделяем один изэлементов
searchElStr3([
    1_:fixed_: set_bean,
    2_:assign_: const_: arc,
    3_:assign_: const_: node6
],,to_end,to_end)
//#Удаляем дугу arcпроведенную
eraseEl([
    1_:fixed_: arc
])
searchSetStr5([
 1_:fixed_: node6,
 2_:assign_: const_: arc1,
 3_:assign_: const_: node5,
    4_:assign_: const_: arc2,
    5_:fixed_: atr1,
    set3_:fixed_: out
],other_bean)
label(to_end)
printNl([1_:fixed_: beg])
callReturn([1_:fixed_: cmd,
      2_:fixed_:{[
          1_:out,
          2_:sheet,
          3_:sall     
      ]}
],descr)
return()
end
поисккомпозициипорейтингу(файлsearch_by_rating.m4scp)
входные параметры:узел, содержащий название альбома;
выходные параметры:обложка альбома.
Пример диалога:
/>
Рисунок 3.2.8 — вопрос композиции свыбранным рейтингом

Алгоритм:
Делаем копию входныхпараметров.
Ищем композиции порейтингу.
Формируемрезультирующее множество.
Исходный текст операции:
//#Операция поискаальбома по его описанию
#include«scp_keynodes.scsy»
#include"../seb/planimetry.scsy"
procedure(search_by_param,
[[
  sheet_type= "/proc/agents/shell/keynode/SCgSheet";
  sheet_title= /«Операция прошла успешно»/;
  atr1= "/proc/keynode/1_";
  atr2= "/proc/keynode/2_";
  ui_information;
  layout;
  «MB_TITLE_QUERY_RESULT»= /«Результат запроса»/;
  «MB_TEXT_METKA»= /«Метка»/;
  «MB_TEXT_ERROR1»= /«Не равны»/;
  «MB_TEXT_ERROR2»= /«А сломалося!»/;
  «Альбомы»;
  «описание*»;
  «типзаписи*»
]],
[{
  sheet,
  shift,
  node,
  node1,
  node_temp,
  node_temp1,
  arc,
  arc1,
  arc2,
  attr_arc,
  selected_els,
  selected_els_copy,
  result_set,
  result_set1,
  result_set2,
  temp_node_with_param,
  test_node,
  node_param,
  result,
  set_albums_copy,
  node_album,
  set_album_param,
  temp_node,
  temp_set_1,
  temp_set_2,
  temp_set_3,
  temp_set_5,
  temp_set_0,
  resultSet1,
  resultSet2,
  resultSet3,
  resultSet4,
  node_out_resSet2,
  node_out_resSet3,
  node_out_resSet4,
  output_set
}],
{[
  1_:in_: selected_els,
  2_:in_: sheet,
  3_:in_: shift
]}
)
genEl([
 1_:assign_: node_: output_set
])
genEl([
 1_:assign_: node_: result_set
])
genEl([
 1_:assign_: node_: result_set1
])
genEl([
 1_:assign_: node_: result_set2
])
//#Копияselected_els_copy входных данных
searchSetStr3([
    1_:fixed_: selected_els,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:assign_: selected_els_copy
])
//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy
searchElStr3([
    1_:fixed_: selected_els_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: temp_node_with_param
])
//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node
eraseEl([
    1_:fixed_: arc
])
//#Делаем копию set_albums_copyвсехальбомов
searchSetStr3([
    1_:fixed_: «Альбомы»,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:assign_: set_albums_copy
])
//#Проверяем описаниекаких альбомов удовлетворяет узел temp_node_with_param
//#Берем один альбом node_albumиз множества альбомов set_albums_copy
label(other_album)
searchElStr3([
    1_:fixed_: set_albums_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: const_: node_album
],,not_other_album)
//#Удаляемдугуarc проведеннуюизset_albums_copy кnode_album
eraseEl([
    1_:fixed_: arc
])
//#Найдем множество set_album_paramвсехописаний альбома node_album
//#---------------1_проходимпервуюпару_------------------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_album,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr3([
    1_:fixed_: «описание*»,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
])
searchElStr3([
    1_:fixed_: resultSet2,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet2
])
searchSetStr5([
    1_:fixed_: node_out_resSet2,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: const_: node_: node,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
    set3_:assign_: resultSet3
])
//#---------------2_проходимтройку_------------------
searchElStr3([
    1_:fixed_: resultSet3,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet3
])
searchSetStr3([
    1_:fixed_: node_out_resSet3,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet4
])
//#Альбомы описываютсяпо трем критериям, проверяем каждый из
//#---------------1_Проверкапо типу записи_--------------
label(other_handler)
searchElStr3([
    1_:fixed_: resultSet4,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet4
],,other_album)
//#Удаляемдугуarc проведеннуюизresultSet4 к node_out_resSet4
eraseEl([
    1_: fixed_: arc
])
//#--------Ищем альбомпо его введенному описанию---------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_out_resSet4,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: temp_node_with_param,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
    set1_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
],,other_handler)
genElStr3([
 1_:fixed_: result_set,
 2_:assign_: const_: pos_: arc,
 3_:fixed_: node_album
],other_album,)
label(not_other_album)
////////////////////////////////////////////////////////////////////////
////
//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy
searchElStr3([
    1_:fixed_: selected_els_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: temp_node_with_param
],,output)
//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node
eraseEl([
    1_:fixed_: arc
])
//#Делаем копию set_albums_copyвсехальбомов
searchSetStr3([
    1_:fixed_: «Альбомы»,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:assign_: set_albums_copy
])
//#Проверяем описаниекаких альбомов удовлетворяет узел temp_node_with_param
//#Берем один альбомnode_album из множества альбомов set_albums_copy
label(other_album1)
searchElStr3([
    1_:fixed_: set_albums_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: const_: node_album
],,not_other_album1)
//#Удаляемдугуarc проведеннуюизset_albums_copy кnode_album
eraseEl([
    1_:fixed_: arc
])
//#Найдем множество set_album_paramвсехописаний альбома node_album
//#---------------1_проходимпервуюпару_------------------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_album,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr3([
    1_:fixed_: «описание*»,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
])
searchElStr3([
    1_:fixed_: resultSet2,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet2
])
searchSetStr5([
    1_:fixed_: node_out_resSet2,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: const_: node_: node,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
    set3_:assign_: resultSet3
])
//#---------------2_проходимтройку_------------------
searchElStr3([
    1_:fixed_: resultSet3,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet3
])
searchSetStr3([
    1_:fixed_: node_out_resSet3,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet4
])
//#Альбомы описываютсяпо трем критериям, проверяем каждый из
//#---------------1_Проверкапо типу записи_--------------
label(other_handler1)
searchElStr3([
    1_:fixed_: resultSet4,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet4
],,other_album1)
//#Удаляемдугуarc проведеннуюизresultSet4 к node_out_resSet4
eraseEl([
    1_: fixed_: arc
])
//#--------Ищем альбомпо его введенному описанию---------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_out_resSet4,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: temp_node_with_param,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
    set1_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
],,other_handler1)
genElStr3([
 1_:fixed_: result_set1,
 2_:assign_: const_: pos_: arc,
 3_:fixed_: node_album
],other_album1,)
////////////////////////////////////////////////////////////////////////
label(not_other_album1)
////////////////////////////////////////////////////////////////////////
//
//#Выделяемодинизэлементовtemp_node_with_param множестваselected_els_copy
searchElStr3([
    1_:fixed_: selected_els_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: temp_node_with_param
],,output)
//#Удаляемдугуarc проведеннуюизselected_els_copy кtemp_node
eraseEl([
    1_:fixed_: arc
])
//#Делаем копию set_albums_copyвсехальбомов
searchSetStr3([
    1_:fixed_: «Альбомы»,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:assign_: set_albums_copy
])
//#Проверяем описаниекаких альбомов удовлетворяет узел temp_node_with_param
//#Берем один альбомnode_album из множества альбомов set_albums_copy
label(other_album2)
searchElStr3([
    1_:fixed_: set_albums_copy,
    2_:assign_: arc_: pos_: const_: arc,
    3_:assign_: node_: const_: node_album
],,not_other_album2)
//#Удаляемдугуarc проведеннуюизset_albums_copy кnode_album
eraseEl([
    1_:fixed_: arc
])
//#Найдем множество set_album_paramвсехописаний альбома node_album
//#---------------1_проходимпервуюпару_------------------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_album,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr3([
    1_:fixed_: «описание*»,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
])
searchElStr3([
    1_:fixed_: resultSet2,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet2
])
searchSetStr5([
    1_:fixed_: node_out_resSet2,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: const_: node_: node,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
    set3_:assign_: resultSet3
])
//#---------------2_проходимтройку_------------------
searchElStr3([
    1_:fixed_: resultSet3,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet3
])
searchSetStr3([
    1_:fixed_: node_out_resSet3,
    2_:assign_: pos_: arc_: const_: arc,
    3_:assign_: node,
    set3_:assign_: resultSet4
])
//#Альбомы описываютсяпо трем критериям, проверяем каждый из
//#---------------1_Проверкапо типу записи_--------------
label(other_handler2)
searchElStr3([
    1_:fixed_: resultSet4,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node_out_resSet4
],,other_album2)
//#Удаляемдугуarc проведеннуюизresultSet4 к node_out_resSet4
eraseEl([
    1_: fixed_: arc
])
//#--------Ищем альбомпо его введенному описанию---------
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: node_out_resSet4,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr1,
    set1_:assign_: resultSet1
])
searchSetStr5([
    1_:assign_: const_: node_: node,
    2_:assign_: pos_: arc_: const_: arc,
    3_:fixed_: temp_node_with_param,
    4_:assign_: pos_: arc_: const_: arc1,
    5_:fixed_:atr2,
    set1_:assign_: resultSet2
])
selectYStr3([
    1_:fixed_: resultSet1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: resultSet2
],,other_handler2)
genElStr3([
 1_:fixed_: result_set2,
 2_:assign_: const_: pos_: arc,
 3_:fixed_: node_album
],other_album2,)
////////////////////////////////////////////////////////////////////////
label(not_other_album2)
//////////////////////////
label(output)
////////////////////////////////////////////////////////////////////////
searchSetStr3([
    1_:fixed_: result_set,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:fixed_: output_set
])
//#Проверим является лимножество result_set1 пустым
searchElStr3([
    1_:fixed_: result_set1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node
],,out)
selectYStr3([
    1_:fixed_: result_set1,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: output_set
])
//#Проверим является лимножество result_set2 пустым
searchElStr3([
    1_:fixed_: result_set2,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node
],,out)
selectYStr3([
    1_:fixed_: result_set2,
    2_:assign_: const_: pos_: arc,
    3_:assign_: node_: node,
    set3_:fixed_: output_set
])
////////////////////////////////////////////////////////////////////////
label(out)
ui_sheet_create([
    1_:assign_: sheet,
   2_:fixed_: sheet_type,
   3_:fixed_: sheet_title,
   4_:fixed_: layout
])
ui_output([1_:fixed_: sheet, 2_: fixed_: output_set])
return()
end
поиск композиции порейтингу (файл type_rec.m4scp)
входные параметры:узел, содержащий название альбома;
выходные параметры: типальбома.
Пример диалога:

/>
Рисунок 3.2.9 — вопрос тип выбранногоальбома
Алгоритм:
Делаем копию входныхпараметров.
Ищем тип записиальбома.
Формируемрезультирующее множество.
Исходный текстоперации:
//#Операция получениятипа записи альбома
#include«scp_keynodes.scsy»
#include"../seb/planimetry.scsy"
procedure(type_rec,
[[
  sheet_type= "/proc/agents/shell/keynode/SCgSheet";
  sheet_title= /«Операция прошла успешно»/;
  atr1= "/proc/keynode/1_";
  atr2= "/proc/keynode/2_";
  ui_information;
  layout;
  «MB_TITLE_QUERY_RESULT»= /«Результат запроса»/;
  «MB_TEXT_METKA»= /«Метка»/;
  sall= "/etc/im_keynode/get_type";
  cmd= "/operation/ui_io_exec_command_par/exec_command_par";
  beg= /"...!!type_of_track!!..\n"/;
  «описание*»;
  «типзаписи*»;
  «Исполнители»
]],
[{
  sheet,
  shift,
  node,
  node1,
  node2,
  node3,
  node4,
  node5,
  performer,
  arc,
  arc1,
  arc2,
  arc3,
  selected_els,
  selected_els_copy,
  set,
  set1,
  set2,
  set3,
  set4,
  result_set,
  output_set,
  out,
  descr
}],
{[
  1_:in_: selected_els,
  2_:in_: sheet,
  3_:in_: shift
]}
)
//#Копияselected_els_copy входных данных
searchSetStr3([
    1_:fixed_: selected_els,
    2_:assign_: const_: pos_: arc_: arc,
    3_:assign_: node_: const_: node,
    set3_:assign_: selected_els_copy
])
label(other_copy)
//#Выделяемодинизэлементовperformer множестваselected_els_copy
searchElStr3([
    1_:fixed_: selected_els_copy,
    2_:assign_: const_: arc,
    3_:assign_: const_: performer
])
//#Удаляемдугуarc проведеннуюизselected_els_copy кperformer
eraseEl([
    1_:fixed_: arc
])
//#Проходим первуюпятерку пары
searchSetStr5([
 1_:assign_: const_: node1,
 2_:assign_: const_: arc1,
 3_:fixed_: performer,
    4_:assign_: const_: arc2,
    5_:fixed_: atr1,
 set1_:assign_: set
],,other_copy,other_copy)
//#Под отношениемописание*
searchSetStr3([
    1_: fixed_:«описание*»,
    2_:assign_: const_: arc,
    3_:assign_: const_: node,
    set3_:assign_: set1
])
//#Находим пересечениемножеств set и set1
selectYStr3([
 1_:fixed_: set1,
 2_:assign_: const_: arc3,
 3_:assign_: node_: node2,
 set3_:fixed_: set
 ],,other_copy,other_copy)
searchElStr3([
    1_:fixed_: set,
    2_:assign_: const_: arc,
    3_:assign_: const_: node3
])
//#Проходим вторуюпятерку пары
searchSetStr5([
 1_:fixed_: node3,
 2_:assign_: const_: arc1,
 3_:assign_: node4,
    4_:assign_: const_: arc2,
    5_:fixed_: atr2,
 set3_:assign_: set2
],,other_copy,other_copy)
searchElStr3([
    1_:fixed_: set2,
    2_:assign_: const_: arc,
    3_:assign_: const_: node1
])
//#Проходимтройку
searchSetStr3([
    1_:fixed_: node1,
    2_:assign_: const_: arc,
    3_:assign_: const_: node,
    set3_:assign_: set
])
label(other_node)
searchElStr3([
    1_:fixed_: set,
    2_:assign_: const_: arc,
    3_:assign_: const_: node5
])
//#Удаляемдугуarc
eraseEl([
    1_:fixed_: arc
])
//#Проходим первуюпятерку второй пары
searchSetStr5([
 1_:assign_: const_: node1,
 2_:assign_: const_: arc1,
 3_:fixed_: node5,
    4_:assign_: const_: arc2,
    5_:fixed_: atr1,
 set1_:assign_: set3
],,other_node,other_node)
//#Под отношением типзаписи*
searchSetStr3([
    1_:fixed_: «тип записи*»,
    2_:assign_: const_: arc,
    3_:assign_: const_: node,
    set3_:assign_: set4
])
//#Находим пересечениемножеств set3 и set4
selectYStr3([
 1_:fixed_: set4,
 2_:assign_: const_: arc3,
 3_:assign_: node_: node2,
 set3_:fixed_: set3
 ],,other_node,other_node)
searchElStr3([
    1_:fixed_: set3,
    2_:assign_: const_: arc,
    3_:assign_: const_: node3
])
//#Проходим вторую пятеркувторой пары
searchSetStr5([
 1_:fixed_: node3,
 2_:assign_: const_: arc1,
 3_:assign_: const_: node5,
    4_:assign_: const_: arc2,
    5_:fixed_: atr2,
 set3_:assign_: out
])
printNl([1_:fixed_: beg])
callReturn([1_:fixed_: cmd,
      2_:fixed_:{[
           1_:out,
          2_:sheet,
          3_:sall     
      ]}
],descr)
return()
end
3.3 Верификация иотладка программ специфицированных операций
Отладка производилась спомощью Notepad++, SRS Studio и сообщений в командной строке. В процессеотладки текущей версии системы был выявлен следующий ряд ошибок:
1. Добавление в файлmenu.scsy нового пункта меню: SRS Studio запускалась, но меню было не доступно.
Типовые ошибки:
·  стоялилишние запятые в тексте программы;
·  нехватало запятых;
·  нехватало закрывающих list_next скобок.
2. Добавлениеnsm-комманд в файл event.scsx: при попытке нажать на пункт меню,соответствующий nsm-комманде выводилось сообщение «Ошибка! Описание данногособытия не найдено!»
Ошибка: в файлеevent.scsx указан неправильный id или ссылка на операцию.
Типовые ошибки,допущенные в процессе написания SCP-программы:
·  необъявлены используемые переменные;
·  поставленылишние запятые;
·  непроставлены необходимые запятые;
·  проставленылишние пробелы (при копировании операторов из Руководства по SCP v0.7);
·  проставленыатрибуты fixed_ вместо assign_ и наоборот.
В результате такихошибок при выборе соответствующего пункта меню ничего не происходило.
 
3.4  Спецификация разработанных операцийи библиотеки программ, сертификация разработанных ip-компонентов
В процессе разработкибыл реализовано более 20 различных scp-операций поиска. Выделить среди нихкакой-либо ip-компонент, на данный момент, не представляется возможным, т.к.тема проекта довольно специализированная и интеграции с другими системами непризводилось.

4. Пользовательскийинтерфейс проектируемой интеллектуальной справочной системы
4.1Задачно-ориентированная спецификация пользовательского интерфейса проектируемойинтеллектуальной системы
4.1.1  Декомпозицияпользовательского интерфейса
Пользовательскийинтерфейс данной интеллектуальной справочной системы можно разделить на рядподсистем в зависимости от задачи, на которую они ориентированы:
Подсистема диалога спользователем (windows-окна, scs-окна, диалоговые окна, элементы управления);
Подсистема трансляции сязыка SC на естественный язык;
Подсистема обработкидействий пользователя;
Подсистема хранения данныхдля отображения на экране.
4.1.2 Списокиспользуемых ip-компонентов пользовательского интерфейса
Для разработки даннойинтеллектуальной справочной системы были использованы следующие ip-компоненты:
Окна scs-интерфейса
диалоговые scs-окна
Окно раздела справочнойинформации SRS
это srs-окно,
класс sheet
класс shell
атомарные системныеинтерфейсные команды:
main_menu
update_menu
reduce_menu
load_folder
load_scg
save_scg
build_srs
erase_set
open_gwf
change_colour
reduction
increase
select_all
modify_scg_el_content
modify_scg_el_type
modify_scg_el_name
erase_scg_countur
erase_scg_el
paste
copy
gen_srswindow
child_command
 
4.2 Проектирование интерфейсныхподсистем
Интерфейсная подсистемаявляется интеллектуальной системой, построенной по семантическим технологиям.Поэтому для каждой интерфейсной подсистемы проектируется своя база знаний имашина обработки знаний.
База знанийпользовательского интерфейса интеллектуальной справочной системы по МП включаетв себя ключевые узлы интерфейсных команд (файл em_keynode), описаниеобработчиков интерфейсных команд(event.scsy), дерево событий(event.scsy).
Машина обработка знанийпользовательского интерфейса включает в себя следующие классы интерфейсныхопераций:
• рецепторныеоперации(пользователь-память)
• системные эффекторныеоперации(память-память)
• пользовательскиеэффекторные операции (память-пользователь)
Примером рецепторнойоперации является функция обработки нажатия кнопки, она осуществляет генерациюмножества выходных параметров:
voidpluginView::OnBnClickedButton2()
{
  CComboBox*combo = new CComboBox();
  combo= (CComboBox*)GetDlgItem(IDC_COMBO1);
  CStringstr;
  intindex = combo->GetCurSel();
  combo->GetLBText(index,str);
  m_pSheet->sendMyEv(«323322222222222221»,str);//получитькомпозициистакимрейтингом
}
Примером системныхэффекторных операций является операция ui_io_exec_command, которая генерируетрезультирующую sc-конструкцию интерфейсной операции для последующей её обработки:
///////////////////////////////////////////////////////////////////////////////
// 
//
#include«scp_keynodes.scsy»
#include"../seb/planimetry.scsy"
#include«im_keynodes.scsy»
procedure(exec_command,
[[
  «mainwindow»= "/etc/im_keynode/main window";
  ch_comm= "/etc/im_keynode/child_command";
  $errors_found= /«Неверно заданы аргументы.»/;
 sheet_type= "/proc/agents/shell/keynode/SCgSheet";
  layout=c= /«logical»/;
  p_sheet_title=c= /«Результаты верификации»/;
  1_,2_;
]],
[{
  notfound,main_wnd,show_set,comm,p2,s,cmd,
  arc,a,arc2,
  resultall,
 command,
 segment,scg_el,wnd,sheet,set_scg_el
}],
{[
 1_:in_: set_scg_el,
 2_:in_: sheet,
 3_:in_: cmd
]}
)
genEl([
 1_:assign_: node_:const_:resultall
 ])
searchElStr3([1_:fixed_: «main window»,
 2_:assign_: a,
 3_:assign_: main_wnd],,notfound)
sys_get_location([1_:fixed_: main_wnd, 2_: assign_: segment])
sys_set_default_segment([1_:fixed_: segment])
genEl([
 1_:assign_: node_:const_:command
 ])
genElStr3([
 1_:fixed_: ch_comm,
 2_:assign_: arc_:const_: pos_: arc,
 3_:fixed_: command
 ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_:const_: pos_: a,
 3_:fixed_: ch_comm
 ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_:const_: pos_: a,
 3_:fixed_: command
 ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_:const_: pos_: a,
 3_:fixed_: arc
 ])
///////////////////////////////////////////////
// создание параметровкоманды
//
//первыйпараметр
genElStr5([1_:fixed_: command,
   2_:assign_: const_: actual_: pos_: temporary_: arc,
   3_:fixed_: sheet,
   4_:assign_: const_: actual_: pos_: temporary_: arc2,
   5_:fixed_: 1_
   ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_:const_: pos_: a,
 3_:fixed_: sheet
 ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_:const_: pos_: a,
 3_:fixed_: 1_
 ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_:const_: pos_: a,
 3_:fixed_: arc
 ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_:const_: pos_: a,
 3_:fixed_: arc2
 ])
// генерация узласвязки второго параметра команды 
genElStr5([1_:fixed_: command,
   2_:assign_: const_: actual_: pos_: temporary_: arc,
   3_:assign_: const_: node_: p2,
   4_:assign_: const_: actual_: pos_: temporary_: arc2,
   5_:fixed_: 2_
   ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_: const_: pos_: a,
 3_:fixed_: p2
 ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_: const_: pos_: a,
 3_:fixed_: 2_
 ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_: const_: pos_: a,
 3_:fixed_: arc
 ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_: const_: pos_: a,
 3_:fixed_: arc2
 ])
// генерация второгопараметра
genElStr5([1_: fixed_:p2,
   2_:assign_: const_: actual_: pos_: temporary_: arc,
   3_:assign_: const_: node_: s,
   4_:assign_: const_: actual_: pos_: temporary_: arc2,
   5_:fixed_: 1_
   ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_: const_: pos_: a,
 3_:fixed_: s
 ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_: const_: pos_: a,
 3_:fixed_: arc
 ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_: const_: pos_: a,
 3_:fixed_: arc2
 ])
//формируемдочернююкоманду
genElStr5([1_:fixed_: cmd,
   2_:assign_: const_: actual_: pos_: temporary_: arc,
   3_:assign_: const_: node_: comm,
   4_:assign_: const_: actual_: pos_: temporary_: arc2,
   5_:fixed_: s
   ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_: const_: pos_: a,
 3_:fixed_: comm
 ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_: const_: pos_: a,
 3_:fixed_: arc
 ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_: const_: pos_: a,
 3_:fixed_: arc2
 ])
genElStr3([
 1_:fixed_: s,
 2_:assign_: arc_: const_: pos_: arc,
 3_:fixed_: comm
 ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_: const_: pos_: a,
 3_:fixed_: arc
 ])
genElStr3([
 1_:fixed_: s,
 2_:assign_: arc_: const_: pos_: arc,
 3_:fixed_: cmd
 ])
genElStr3([
 1_:fixed_: resultall,
 2_:assign_: arc_: const_: pos_: a,
 3_:fixed_: arc
 ])
   
varAssign([1_:assign_:wnd,2_:fixed_:main_wnd],ok_msg,ok_msg)
// если произошлаошибочная ситуация
label(err_msg)
genElStr3([1_:fixed_:resultall,
   2_:assign_: const_: temporary_: actual_: pos_: a,
   3_:fixed_: $errors_found])
ui_sheet_create([1_: assign_: const_: node_: wnd,
   2_:fixed_: sheet_type,
   3_:fixed_: p_sheet_title,
   4_:fixed_: layout])
printEl([1_:resultall])
//выводрезультата
label(ok_msg)
ui_send([1_:fixed_: wnd, 2_: fixed_: resultall])
eraseEl([1_:fixed_:f_: resultall])
return()
end
Примеромпользовательской эффекторной операции (память-пользователь) является функцияsetAlbumList, которая обрабатывает ключевой узел интерфейсной команды дляотображения идентификаторов выходных параметров в элемент управления:
voidpluginSheet::setAlbumList(sc_addr addr)
{
  CArray albumList;
  albumList.FreeExtra();
  Shell*shell = Shell::getInstance();
  sc_session*s = shell->getSession();
  sc_iterator*it = s->create_iterator(sc_constraint_new(CONSTR_3_f_a_a, addr, 0, 0),true);
  for(;!it->is_over(); it->next())
  {
    sc_addralbum_addr = it->value(2);
    sc_stringstr = s->get_idtf(album_addr);
    albumList.Add(str);
  }
 
  m_pView->UpdateListBox2(albumList);
}

4.3 Верификация иотладка пользовательского интерфейса
Для реализации итестирования базы данных использовался SRS Studio. Для написания кода операцийиспользовал Notepad++, интерфейс реализован по средствам библиотек MFC на языкепрограммирования С++, верификация и тестирование с помощью SRSStudio, Microsoft Visual Studio .NET 2003 илогаpm вкоманднойстроке.
 
4.4 Спецификацияразработанного пользовательского интерфейса, сертификация разработанныхip-компонентов

5. Интеграция разработаннойсистемы с другими системами
Интеллектуальнаясправочная система может быть интегрирована с другими система, работающими вданной предметной области.
Кроме этого могут бытьзаимствованы операции и ip-компоненты для качественного улучшения системы.
Интеграция позволитрасширить как базу знаний, так и перечень реализуемых операций, что сделаетсистему еще более востребованной для конечного пользователя.
Но вместе с темнеобходимо оценить затраты необходимые для интеграции (приведение базы знаний кодинаковым ключевым элементам, использование одинаковых конструкций, соответствующаяреализация определенных операций), и на основе анализа выбрать наилучшуюстратегию.
С целью облегченияпроцесса интеграции необходимо разрабатывать ip-компоненты всех подсистеминтеллектуальной системы (базы знаний, машины обработки знания ипользовательского интерфейса), которые не зависят от реализации конкретной базызнаний.

6. Направлениядальнейшего развития прототипа интеллектуальной справочной системы и путипромышленного изготовления спроектированной интеллектуальной системы
Для полноценногофункционирования справочной системы и достижения главной цели – способностьсистемы отвечать на самые нетривиальные вопросы и привлекать широкие массыпользователей, нужно:
Дальнейшие развитиебазы знаний, добавление новых предметных узлов и ключевых элементов. Кромеэтого база должна пополняться и расширяться новыми знаниями, которые будутгенерироваться при работе операций.
Развитие машиныобработки заключается в увеличении количества классов задач, которые будетрешать данная интеллектуальная справочная система.
Пользовательскийинтерфейс прикладной системы должен давать возможность работать как синформацией, представленной на языках, являющихся подмножествами языка SC, таки на естественном языке.
В первую очередьнеобходимо уделить большое внимание естественно-языковому интерфейсу, так какSCg-конструкции, которые система генерирует на данный момент, являются слишкомгромоздкими и не удобными для восприятия. Ответ на формальном языке представляетсобой дополнительный барьер для понимания информации и делает систему непригодной для пользователей, не знакомых с теорией множеств и языком SC.
Пользовательскийинтерфейс должен давать возможность пользователю сосредоточиться на постановкезадачи, а не на способе её достижения. Время и усилия, которые необходимыпользователю для достижения цели, должны сводиться к минимуму.
Следует уделитьвнимание «дружелюбности» интерфейса. Необходимо стремиться к тому, чтобы дажене опытному пользователю было понятно, как работать с системой. Время, котороенеобходимо для освоения навыков работы со средой интеллектуальной справочнойсистемы должно сводиться к минимуму.

7. Вклад в развитиесемантических технологий проектирования интеллектуальных систем
7.1 Список выявленныхошибок среды проектирования интеллектуальных систем
После закрытия всехокон SRS-Studio, в системе остаётся незавершенный процесс, который не даётзапуститься собранной системе или ещё одной копии SRS-Studio.
При загрузкеsc-элементов в память не загружаются дуги.
 
7.2 Список предложений посовершенствованию среды проектирования интеллектуальных систем
Доработка руководствапользователя по операциям на языке SCP.
Разработкаинструментария для написания scp-программ (минимум отладчика).
Написание новыхscp-функций (например, переход по паре).
Исправление указанныхошибок.
Создание ip-компонентовбазы знаний, машины обработки знаний, пользовательского интерфейса.
Отладка текущегоинструментария для уменьшения используемых ресурсов.
 
7.3 Список предложений посовершенствованию семантических технологий проектирования интеллектуальныхсистем
Необходима разработкаинструментария качественно нового уровня (предложения по развитию представленыв разделе 7.3.), так как работа с инструментарием на данном этапе затрудняетиспользование данной технологии.
Изучение в рамкахучебного процесса студентами теоретических основ, необходимых для использованияи внедрения данной технологии (теория множеств, модели представления знаний,язык программирования scp и др.)
Так же важным этапом вразвитии технологии является создание ip-компонентов, задача которых упроститьи ускорить процесс разработка за счёт повторного использования каких-либоэлементов интеллектуальной системы. Важным является создание ip-компонентоввсех подсистем: базы знаний, машины обработки знаний, пользовательскогоинтерфейса.
 
7.4 Создание и использованиеip-компонентов
Созданная БЗ, наборопераций и отдельные элементы пользовательского интерфейса могут бытьиспользованы в интеллектуальных справочных системах смежных областей, вкачестве ip-компонентов. Что позволит ускорить их разработку, расширитьфункционал. Таким образом с бесконечным числом интеграций с другимиинтеллектуальными справочными системами, получится система, которая будетхранить бесконечное количество информации, отвечать на любые поставленныенетривиальные вопросы, а общение между пользователем и системой будетпроисходить посредством дружелюбного пользовательского интерфейса.

Библиографическийуказатель
1.  Режимдоступа: www.skilfully.org/18.08.2008/1. — Дата доступа: 21.12.2008.
2.  Режимдоступа: www.encyclopedia.ru/news/enc/detail/2321/. – Дата доступа:21.12.2008.
3.  Справочно-информационныйпортал Википедия. — Режим доступа: ru.wikipedia.org/wiki/Семантическая_паутина.
- Дата доступа: 20.12.2008.
4.  TheSemantic Web. Scientific American, 17 мая 2001, русский перевод: СемантическаяСеть.
5.  Справочно-информационныйпортал Википедия. — Режим доступа: ru.wikipedia.org/wiki/Семантическая_сеть.
- Дата доступа: 21.12.2008.
6.  http://www.trizland.ru/trizba.php?id=186.– Дата доступа: 21.12.2008.
7.  Руководстворазработчика семантической справочной системы, Минск, 2008.
8.  Руководствопо программированию на языке SCP, Минск, 2005.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.