Социология права никласа лумана - Готово. Палыгин 3 лаб. Списки и бинарные деревья
Скачать 367.58 Kb.
|
Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждения высшего образования «Комсомольский-на-Амуре государственный университет» Факультет компьютерных технологий Кафедра «ПУРИС» ЛАБОРАТОРНАЯ РАБОТА №3 по дисциплине «Логическое программирование» Списки и бинарные деревья Студенты группы 9ВТб-1 Палыгин А.Д. Преподаватель Е.Б. Абарникова 2023 СодержаниеЛист задания Тема: «Списки и бинарные деревья» Цель: изучить основные операции со списками и бинарными деревьями Задание: написать программу для выполнения операций со списками и бинарными деревьями: 1 сортировка списка; 2 удаление элемента списка. Описание программыСоздать приложение, которое будет при вводе с клавиатуры числе, будет создавать из них список. Данный список может быть отсортирован, а так же в нем может быть удален какой либо из элементов. Описание предикатов, которые используются в программе: task_win_eh : EHANDLER - предикат открытия окнаadding(SLIST,STRING,SLIST) - предикат добавления числа в списокаргументы:1 аргумент - текущий список2 аргумент - введенное число3 аргумент - полученный списокprint(SLIST,WINDOW) - предикат вывода списка1 аргумент - список2 аргумент - указатель на окноdelete(INTEGER,SLIST,SLIST) - предикат удаления числа1 аргумент - позиция числа2 аргумент - список3 аргумент - получившийся списокsort(SLIST,SLIST) - предикат сортировки1 аргумент - сортировка текущего2 аргумент - получившийся в результате сортировки списокТекст программыТекст программы состоит из одного файла кода «lab4.pro». Код файла приведен в листинге 1. Листинг 1. /***************************************************************************** Copyright (c) My Company Project: LAB3 FileName: LAB3.PRO Purpose: No description Written by: Visual Prolog Comments: ******************************************************************************/ include "lab3.inc" include "lab3.con" include "hlptopic.con" %BEGIN_WIN Task Window /*************************************************************************** Event handling for Task Window ***************************************************************************/ domains sp1=STRING* predicates task_win_eh : EHANDLER adding(SLIST,STRING,SLIST) print(SLIST,WINDOW) delete(INTEGER,INTEGER,SLIST,SLIST) zapoln(SLIST) poradok(STRING,STRING) change(SLIST,SLIST) sort(SLIST,SLIST) list_union(SLIST,SLIST,SLIST) constants %BEGIN Task Window, CreateParms, 12:47:57-18.1.2023, Code automatically updated! task_win_Flags = [wsf_SizeBorder,wsf_TitleBar,wsf_Close,wsf_Maximize,wsf_Minimize,wsf_ClipSiblings] task_win_Menu = res_menu(idr_task_menu) task_win_Title = "Операции со списками" task_win_Help = contents %END Task Window, CreateParms clauses %Zapolnenie spyska zapoln([]). %Adding new element in spysok adding(L,X,[X|L]). %Printing spysok in listbox print([],H). print([X|L],H):-lbox_Add(H,X),print(L,H). %deleting elemeent delete(NM,NM,[X|L],L). delete(NM,NT,[Y|L],[Y|L1]):-N=NT+1,delete(NM,N,L,L1). %Sravnenie poradok(X,Y):-X>Y. %Make change change([X,Y|L],[Y,X|L]):-poradok(X,Y). change([Z|L],[Z|L1]):-change(L,L1). %Sort by puzirek sort(L,L1):-change(L,L2),!,sort(L2,L1). sort(L,L). %List union list_union(L1,[],L1). list_union([],L2,L2). list_union([X|L1],L2,[X|L3]):-list_union(L1,L2,L3). %BEGIN Task Window, e_Create task_win_eh(_Win,e_Create(_),0):-!, %BEGIN Task Window, InitControls, 12:47:57-18.1.2023, Code automatically updated! win_CreateControl(wc_Edit,rct(140,85,225,110),"",_Win,[wsf_Group,wsf_TabStop,wsf_AutoHScroll,wsf_AlignLeft],idc_edit), win_CreateControl(wc_Text,rct(10,50,194,70),"Добавить элемент в список",_Win,[wsf_AlignLeft],idct_static_text), win_CreateControl(wc_PushButton,rct(235,85,320,110),"Добавить",_Win,[wsf_Group,wsf_TabStop],idc_add), win_CreateControl(wc_Text,rct(5,135,182,155),"Удалить элемент из списка",_Win,[wsf_AlignLeft],idct_static_text1), win_CreateControl(wc_Edit,rct(140,170,180,195),"0",_Win,[wsf_Group,wsf_TabStop,wsf_AutoHScroll,wsf_AlignLeft],idc_edit1), win_CreateControl(wc_PushButton,rct(235,170,320,195),"Удалить",_Win,[wsf_Group,wsf_TabStop],idc_del), win_CreateControl(wc_Text,rct(10,90,135,115),"Введите элемент",_Win,[wsf_AlignLeft],idct_static_text2), win_CreateControl(wc_Text,rct(10,175,111,200),"Укажите номер",_Win,[wsf_AlignLeft],idct_static_text3), win_CreateControl(wc_LBox,rct(330,85,445,195),"",_Win,[wsf_Group,wsf_TabStop,wsf_VScroll,wsf_NoIntegralHeight],id_lbox), win_CreateControl(wc_PushButton,rct(450,125,550,155),"Сортировать",_Win,[wsf_Group,wsf_TabStop],idc_sort), %END Task Window, InitControls %BEGIN Task Window, ToolbarCreate, 12:47:57-18.1.2023, Code automatically updated! %END Task Window, ToolbarCreate ifdef use_message msg_Create(100), enddef !. %END Task Window, e_Create %MARK Task Window, new events %BEGIN Task Window, id_help_about task_win_eh(_Win,e_Menu(id_help_about,_ShiftCtlAlt),0):-!, vpi_ShowHelp("help.hlp"), !. %END Task Window, id_help_about /******************************************************************************************** Union of list ********************************************************************************************/ %END Task Window, idc_un _CtlInfo /******************************************************************************************** Procedures for Third List ********************************************************************************************/ /******************************************************************************************** Procedures for Scond List ********************************************************************************************/ /*******************************MENU*********************************************************/ %BEGIN Task Window, id_file_exit task_win_eh(_Win,e_Menu(id_file_exit,_ShiftCtlAlt),0):-!, Win_Destroy(_Win), !. %END Task Window, id_file_exit /******************************************************************************************** Procedures for First List ********************************************************************************************/ %BEGIN Task Window, idc_add _CtlInfo task_win_eh(_Win,e_Control(idc_add,_CtrlType,_CtrlWin,_CtlInfo),0):- HEA=Win_GetCtlHandle(_Win,idc_edit), HLB=Win_GetCtlHandle(_Win,id_lbox), NEWEL=Win_GetText(HEA), NEWEL<>"", SPYS=lbox_GetAll(HLB), adding(SPYS,NEWEL,LIST), lbox_Clear(HLB), print(LIST,HLB), !. task_win_eh(_Win,e_Control(idc_add,_CtrlType,_CtrlWin,_CtlInfo),0):- dlg_error("Введите элемент!"),!. %END Task Window, idc_add _CtlInfo %BEGIN Task Window, idc_del _CtlInfo task_win_eh(_Win,e_Control(idc_del,_CtrlType,_CtrlWin,_CtlInfo),0):- HWND=Win_GetCtlHandle(_Win,idc_edit1), HLB=Win_GetCtlHandle(_Win,id_lbox), TEXT=Win_GetText(HWND), TEXT<>"", str_int(TEXT,DELEL), SPYS=lbox_GetAll(HLB), delete(DELEL,0,SPYS,LIST), lbox_Clear(HLB), print(LIST,HLB), !. task_win_eh(_Win,e_Control(idc_del,_CtrlType,_CtrlWin,_CtlInfo),0):- dlg_error("Неверный номер элемнта!"),!. %END Task Window, idc_del _CtlInfo %BEGIN Task Window, idc_sort _CtlInfo task_win_eh(_Win,e_Control(idc_sort,_CtrlType,_CtrlWin,_CtlInfo),0):- HLB=Win_GetCtlHandle(_Win,id_lbox), SPYS=lbox_GetAll(HLB), sort(SPYS,LIST), lbox_Clear(HLB), print(LIST,HLB), !. task_win_eh(_Win,e_Control(idc_sort,_CtrlType,_CtrlWin,_CtlInfo),0):-!, dlg_error("Не удалось отсортировать!"),!. %END Task Window, idc_sort _CtlInfo /******************************************Other Procedures**********************************/ %BEGIN Task Window, e_Size task_win_eh(_Win,e_Size(_Width,_Height),0):-!, ifdef use_tbar toolbar_Resize(_Win), enddef ifdef use_message msg_Resize(_Win), enddef !. %END Task Window, e_Size %END_WIN Task Window /*************************************************************************** Invoking on-line Help ***************************************************************************/ project_ShowHelpContext(HelpTopic):- vpi_ShowHelpContext("help.hlp",HelpTopic). /*************************************************************************** Main Goal ***************************************************************************/ goal ifdef use_mdi vpi_SetAttrVal(attr_win_mdi,b_true), enddef ifdef ws_win ifdef use_3dctrl vpi_SetAttrVal(attr_win_3dcontrols,b_true), enddef enddef pi_Init(task_win_Flags,task_win_eh,task_win_Menu,"lab3",task_win_Title). Программа и методика испытаний Проведем комплексное модульное тестирование разработанного программного обеспечения. Таблица 1 – Первый тест-пакет
Таблица 2 – Тест-кейс №1
Таблица 3 – Тест-отчет №1 после тестирования
Таблица 4 – Тест-кейс №2
Таблица 5 – Тест-отчет №2 после тестирования
Таблица 6 – Тест-кейс №3
Таблица 7 – Тест-отчет №3 после тестирования
Таблица 8 – Тест-кейс №4
Таблица 9 – Тест-отчет №4 после тестирования
Таблица 10 – Тест-кейс №4
Таблица 11 – Тест-отчет №4 после тестирования
Таблица 12 – Тест-кейс №4
Таблица 13 – Тест-отчет №4 после тестирования
Список использованных источниковProlog Development Center A/S Visual Prolog Version 5.x Visual Development Environment: документация / Prolog Development Center A/S – Broendby, Copenhagen, Denmark, 2001. – 207 с. Абарникова Е.Б., Жаворонков А.С., Фарафонтов А.В., Марчак К.М., Гатаулин А.В., Шалагинова У.И. Обучающий курс по функциональному и логическому программированию Братко И. Программирование на языке Пролог для искусственного интеллекта/ И. Братко; пер. с англ. А.И. Лупенко; под ред. А.М. Степанова - М.: Мир, 1990 – 560 с. Приложение АРисунок 1 – Окно работы программы Рисунок 2 – Ввод чисел в программу Рисунок 3 – Результат по нажатию кнопки - "Сортировка" Рисунок 4 - Удаление элемента Рисунок 5 - Результат удаления Рисунок 6 - Сообщение об ошибке, при удалении элемента, которого нет в списке Рисунок 7 - Сообщение об ошибке, при добавлении пустого элемента |