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 на новый лист.

Пример диалога:


Вопрос6

Рисунок 3.2.1 - вопрос «Поиск альбома по описанию»

Ответ6

Рисунок 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)

входные параметры: узел, содержащий тип записи;

выходные параметры: все альбомы с данным типом записи.

Пример диалога:

Вопрос-7

Рисунок 3.2.3 - вопрос «Поиск альбома по типу записи»

Ответ-7

Рисунок 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)

входные параметры: альбомы для сравнения;

выходные параметры: общие характеристики для сравниваемых альбом.

Пример диалога:


Вопрос-8

Рисунок 3.1.5 - вопрос «Поиск альбома по типу записи»

Ответ-8

Рисунок 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)

//#----_ydalili dugu 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,)

//#-----_povtaryaem vse 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)

//#----_ydalili dugu 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)

//#--------_Naxodim obschie 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 на естественный язык;

Подсистема обработки действий пользователя;

Подсистема хранения данных для отображения на экране.


Информация о работе «Разработки интеллектуальной справочной системы по музыкальным произведениям»
Раздел: Информатика, программирование
Количество знаков с пробелами: 96599
Количество таблиц: 0
Количество изображений: 12

Похожие работы

Скачать
127954
0
0

... учащихся в музыкальной деятельности будет посвящен следующий раздел нашего исследования. Глава II. Теоретические и практические аспекты педагогических условий самореализации учащихся в музыкальной деятельности II.1 Педагогические условия самореализации учащихся в музыкальной деятельности Принимая во внимание факт значимости роли самого субъекта в протекании процессов "само" считаем ...

Скачать
274131
6
3

... : регуляции внимания, динамической организации движения, моторной активности, общего эмоционального фона организации деятельности и т.д. 3. Разработка МОДЕЛИ вариативной системы дошкольного образования в условиях города   3.1 Эффективность типа дошкольных образовательных учреждений Современное общество предъявляет новые требования к системе образования подрастающего поколения и, в том ...

Скачать
121084
0
0

... ". Принятый вскоре Закон РСФСР "О собственности в РСФСР" от 24 декабря 1990 г.4 наряду с повторением в п. 4 ст. 1, в сущности, той же мысли, в ч. 2 п. 4 ст. 2 дополнительно разъяснял, что "объектами интеллектуальной собственности являются произведения науки, литературы, искусства и других видов творческой деятельности в сфере производства, в том числе открытия, изобретения, рационализаторские ...

Скачать
61227
9
2

... : 05.01.06 г. – 15.01.06 г. - 22 - 1.2. Результаты оценки Ниже представлены результаты расчета рыночной стоимости оцениваемых объектов, полученные с применением двух основных методов оценки интеллектуальной собственности: по методу учета чистого дохода. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8300 долл. по методу освобождения от роялти. . . . . . . . . . . . . . . ...

0 комментариев


Наверх