ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.02.2024
Просмотров: 92
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
task_win_eh : EHANDLER - предикат открытия окна
adding(SLIST,STRING,SLIST) - предикат добавления числа в список
3 аргумент - полученный список
print(SLIST,WINDOW) - предикат вывода списка
2 аргумент - указатель на окно
delete(INTEGER,SLIST,SLIST) - предикат удаления числа
3 аргумент - получившийся список
sort(SLIST,SLIST) - предикат сортировки
1 аргумент - сортировка текущего
2 аргумент - получившийся в результате сортировки список
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждения высшего образования
«Комсомольский-на-Амуре государственный университет»
Факультет компьютерных технологий Кафедра «ПУРИС»
ЛАБОРАТОРНАЯ РАБОТА №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 – Первый тест-пакет
Автор: Палыгин А.Д. | Номер спецификации: 1 | Приоритет: 1 | Автор спецификации: Палыгин А.Д. | Разработчик: Палыгин А.Д. |
Назначение: Корректность разработанного ПО | ||||
Необходимые данные: Проект ПО «Лабораторная работа 3» Предварительные действия: Запустить проект ПО «Лабораторная работа 3» |
Таблица 2 – Тест-кейс №1
Приоритет: 1 | 1 |
Идея: Ввод информации в поля ввода | |
История изменений | |
Дата создания: 22.11.2022 Палыгин А.Д. | Инициализация теста |
Выполнение | |
Описание действий | Ожидаемый результат |
| Программа запустилась |
Таблица 3 – Тест-отчет №1 после тестирования
Приоритет: 1 | TestСasesExceptions | 1 | |
Идея: Ввод информации в поля ввода | |||
История изменений | Статус тестирования | ||
Дата создания: 22.11.2022 Палыгин А.Д. | Инициализация теста | Положительный | |
Выполнение | |||
Описание действий | Ожидаемый результат | Фактический ре- зультат | |
| Программа запустилась | Программа запустилась |
Таблица 4 – Тест-кейс №2
Приоритет: 1 | 1 |
Идея: Ввод чисел в форму и проведение запуска сортировки | |
История изменений | |
Дата создания: 22.11.2022 Палыгин А.Д. | Инициализация теста |
Выполнение | |
Описание действий | Ожидаемый результат |
| Числа вводятся, сортировка происходит |
Таблица 5 – Тест-отчет №2 после тестирования
Приоритет: 1 | 1 | |
Идея: Построчное выведение данных из файла в листбокс с длиной строки 20 символов | ||
История изменений | Статус тестирования | |
Дата создания: 22.11.2022 Палыгин А.Д. | Инициализация теста | Положительный |
Выполнение | ||
Описание действий | Ожидаемый результат | Фактический результат |
1 выполнение предварительных действий; 2 вводим числа в форму и пробуем провести сортировку | Числа вводятся, числа сортируются | Числа вводятся, числа сортируются |
Таблица 6 – Тест-кейс №3
Приоритет: 1 | 1 |
Идея: Удаление элемента из списка | |
История изменений | |
Дата создания: 22.11.2022 Палыгин А.Д. | Инициализация теста |
Выполнение | |
Описание действий | Ожидаемый результат |
| Удаление элемента происходит |