Файл: Списки и бинарные деревья.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 04.02.2024

Просмотров: 48

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждения высшего образования

«Комсомольский-на-Амуре государственный университет»


Факультет компьютерных технологий Кафедра «ПУРИС»


ЛАБОРАТОРНАЯ РАБОТА №3

по дисциплине «Логическое программирование» Списки и бинарные деревья
Студенты группы 9ВТб-1 Палыгин А.Д.
Преподаватель Е.Б. Абарникова

2023

Содержание


Лист задания
Тема: «Списки и бинарные деревья»

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

Задание: написать программу для выполнения операций со списками и бинарными деревьями:

1 сортировка списка;

2 удаление элемента списка.
  1. Описание программы



Создать приложение, которое будет при вводе с клавиатуры числе, будет создавать из них список. Данный список может быть отсортирован, а так же в нем может быть удален какой либо из элементов.

Описание предикатов, которые используются в программе:

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 Палыгин А.Д.

Инициализация теста

Выполнение

Описание действий

Ожидаемый результат

  1. выполнение предварительных действий;

  2. Ожидание запуска программы

Программа запустилась


Таблица 3 Тест-отчет №1 после тестирования


Приоритет: 1

TestСasesExceptions

1

Идея: Ввод информации в поля ввода

История изменений

Статус тестирования

Дата создания: 22.11.2022 Палыгин А.Д.

Инициализация теста

Положительный

Выполнение

Описание действий

Ожидаемый результат

Фактический ре- зультат

  1. выполнение предварительных действий, запуск программы


Программа запустилась


Программа запустилась


Таблица 4 Тест-кейс №2

Приоритет: 1

1

Идея: Ввод чисел в форму и проведение запуска сортировки

История изменений

Дата создания: 22.11.2022 Палыгин А.Д.

Инициализация теста


Выполнение

Описание действий

Ожидаемый результат

  1. выполнение предварительных действий;

  2. вводим числа в форму и пробуем провести сортировку

Числа вводятся, сортировка происходит


Таблица 5 Тест-отчет №2 после тестирования

Приоритет: 1

1

Идея: Построчное выведение данных из файла в листбокс с длиной строки 20 символов

История изменений

Статус тестирования

Дата создания: 22.11.2022 Палыгин А.Д.

Инициализация теста

Положительный

Выполнение

Описание действий

Ожидаемый результат

Фактический

результат

1 выполнение предварительных действий;

2 вводим числа в форму и пробуем провести сортировку

Числа вводятся, числа сортируются

Числа вводятся, числа сортируются


Таблица 6 Тест-кейс №3

Приоритет: 1

1

Идея: Удаление элемента из списка

История изменений

Дата создания: 22.11.2022 Палыгин А.Д.

Инициализация теста

Выполнение

Описание действий

Ожидаемый результат

  1. выполнение предварительных действий;

  2. удалить элемент из списка по его номеру

Удаление элемента происходит