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)
//#----_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 - вопрос композиции с выбранным рейтингом
Алгоритм:
Делаем копию входных параметров.
Ищем композиции по рейтингу.
Формируем результирующее множество.