30511-1 (Система Посредник), страница 2

2016-07-31СтудИзба

Описание файла

Документ из архива "Система Посредник", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "30511-1"

Текст 2 страницы из документа "30511-1"

В данном курсовом проекте классифицирующая сеть используется для определения региональной принадлежности производителя строительных материалов. Благодаря этому при заключении договоров покупателю не обязательно задавать конкретного производителя, а можно задать только регеон расположения тех производителей, продукция которых покупателю кажется наиболее предпочтительной.

В системе “Посредник” имеется так же возможность получения информации о принадлежности какого-либо производителя региону путём просмотра связей в классифицирующей сети, а так же имеются режимы корректировки и дополнения этой сети.

Графическое представление классифицирующей сети показано на рис.3.

Програмно классифицирующая сеть реализована в виде стандартных баз данных Пролога (database) и выглядит следующим образом:

sup(Ki,Kj)

где Ki и Kj – класс и его подкласс соответственно.

Классифицирующая сеть находится в файле web.dat.

5. Критерии выбора наиболее предпочтительного варианта договора

В данном курсовом проекте наиболее предпочтительный договор выбирается в пользу посредника. Выгода посредника состоит в получении наибольшей прибыли в кратчайшие сроки. Доход посредника обычно составляет некоторый комиссионный процент от заключённой сделки, поэтому наиболее выгодны контракты, в которых произведение количества товара, необходимое покупателю на цену этого товара, назначенную продавцом, будет максимальным. Это и будет первым критерием выбора наиболее предпочтительного договора. Вторым критерием, как было сказано выше, будет являться кратчайший срок поставки.

В начале программа выбирает предпочтительные договоры по первому критерию. Если таких договоров получится несколько, то программа выбирает из них тот, у которого срок поставки меньше (т.е. реализуется второй критерий).

Например, пусть имеется три возможных договора для фирмы “АТС-50”, которой требуется партия кабеля АВВГ российского производителя объёмом 1000 единиц по цене 2$ за единицу в сроки не более 18 дней:

Фирма

Товар

Производитель

Мин. партия.

Кол-во

Цена

Сроки

4

Стройсервис

Кабель АВВГ

Иркутсккабель

900

9000

1

11

6

Всё для дома

Кабель АВВГ

ММЗ

900

9000

1

12

12

Ункомтех

Кабель АВВГ

Иркутсккабель

700

1200

0.9

8

При применении первого критерия выбираются фирмы “Стройсервис” и “Всё для дома”, поскольку цена, по которой они предлагают товар, больше, чем у фирмы “Уникомтех” и следовательно доход посредника будет больше. На втором этапе из этих двух фирм выбирается “Стройсервис”, поскольку у неё меньше срок поставки.

6. логическая модель представления знаний на языке многосортного исчисления предикатов и на языке Пролог

Логическая модель – это описание предметной области на каком-либо логическом языке. Одним из таких логических языков является многосортное исчисление предикатов. При представлении логических моделей на этом языке классы сущностей предметной области интерпретируются, как имена сортов.

Для примера введём следующие имена сортов: Договор, Поставщик, Покупатель, Продукция, Производитель, Количество, Цена, Срок, Тип_Произв, а так же следующие функции и предикаты:

пост:Договор Поставщик, покуп:Договор Покупатель,

прод:Договор Продукция, произв:Договор Производитель,

кол:Договор Количество, цена: Договор Цена, срок:Договор Срок

тип_произв: Производитель Тип_Произв

российский: Тип_Произв, европейский: Тип_Произв

:Количество Количество T

:Количество Количество T

Выражения 1-4 сотавляют сигнатуру и имеют следующий смысл:

Задаёт несколько функций, например прод (продукция), которые будучи применимы к объекту е сорта Договор, дают например продукцию прод(е), участвующую в операции е.

Задаёт функцию, значениями которой служат типы производителя.

Задаёт константы, принадлежащие сорту Тип_Произв.

Задаёт двухместные предикаты на объектах сорта Количество.

Сигнатура – это множество функций вида f: A1 A2 An B, где A1, A2,…,An – аргументы, B – значение функции. Множества аргументов и значений функций образуют соответственно сорта A и B. В частном случае, если B=T, причём T={1,0} – особый сорт, то сигнатура имеет вид P: A1 A2 An T, причём P называют предикатом.

Сигнатура задает структурные связи между понятиями предметной области, представленными предикатами и функциями. Логические связи между этими понятиями задаются формулами, которые записываются в сигнатуре. Структурные и логические связи выражают некоторое знание о предметной области. Таким образом, сигнатура формально представляет одну часть знания о предметной области, а формулы, записанные в этой сигнатуре, представляют другую часть знания.

Графическое представление сигнатуры показано на рис.4, а модельной структуры – на рис.5.

Рис.4. Графическое представление сигнатуры

Логическая модель в Прологе представляется в виде предикатов и баз данных database. Например:

database – договор

дог(Поставщик, Покупатель)

Функцию пост (поставщик) можно реализовать так

пост (N):– дог(Покупатель,Поставщик), N=Поставщик.

Функцию можно представить следующим образом:

(Количество1,Количество2):–Количество1<= Количество2.

7. Организация диалога с пользователем

При загрузке система “Посредник” выводит главное меню, в котором представлены все режимы работы программы. Каждый режим выбирается посредством нажатия цифровой клавиши. Система меню представлена многоуровневой иерархической структурой, т.е. у многих режимов есть свои подменю.

В программе реализованы обычные для такого типа программ режимы просмотра данных, их коррекции и удаления, наряду с обычным имеется интерактивный режим работы.

Если в базы данных были внесены какие-либо изменения, то при выходе из программы система выведет запрос о необходимости сохранения изменений, сопровождаемый звуковым сигналом.

Схема организации диалога представлена на рис.6.

заключение

При написании курсового проекта были использованы разнообразные модели представления знаний, изучаемые инженерией знаний. Система “Посредник” программно реализована на языке Пролог в среде Turbo Prolog 2.0.

Приложение

Текст программы “посредник”

/*==========================================================*/

/* Курсовой проект по дисциплине "Инженерия знаний" */

/* Система "Посредник" */

/* Автор: Данченков А.В., гр. ИИ-1-95 */

/*==========================================================*/

code=8850

domains

Фирма,Товар,Произв,Str=string

Int,N,Парт,Кол_во,Сроки=integer

Цена=real

/* Основные и служебные базы данных */

database - поставщик

поставщик(integer,Фирма,Товар,Произв,Парт,Кол_во,Цена,Сроки)

database - покупатель

покупатель(N,Фирма,Товар,Произв,Парт,Цена,Сроки)

database - sup

sup(Str,Str)

database - contract

contract(integer,integer)

database - best

best(integer,integer,integer,integer)

database - best2

best2(integer,integer,integer,integer)

database - flag

flag(Int)

predicates

start

view(Int)

autoload

working(Int)

main_menu

correct(Int)

interact(integer)

warning(integer)

form_best(integer,integer,integer,integer)

form_best2(integer)

f_b2(integer,integer,integer,integer)

fb1(integer,integer,integer,integer)

fb2(integer,integer,integer,integer)

del(Int)

del_sup(string)

ins_sup(string)

view_sup(string)

sve

save_bd

ask

error

io_error

ok

repeat

checkcontr(integer)

all_contract

print_contract

cmp_name(string,string)

find_web(Str,Str)

prn(integer,string)

goal

start.

clauses

/* Основная процедура */

start:-

makewindow(1,26,94,"СИСТЕМА ПОСРЕДНИК",0,0,25,80),

clearwindow,

autoload,

main_menu.

/* Процедура автоматической загрузки баз данных */

autoload:-

retractall(_,поставщик),

existfile("kurs1.dat"),

consult("kurs1.dat",поставщик),

retractall(_,покупатель),

existfile("kurs2.dat"),

consult("kurs2.dat",покупатель),

retractall(_,sup),

existfile("web.dat"),

consult("web.dat",sup),

cursor(21,30),

write("*Базы загружены*").

autoload:-

makewindow(2,74,79,"ОШИБКА",6,18,8,40),

cursor(2,10),

write("Нет базы на диске"),

sound(70,294),

removewindow,

!.

/* Главное меню */

main_menu:-

repeat,

cursor(7,0),

write(" 0 - О системе... "),nl,

write(" 1 - Корректировка данных"),nl,

write(" 2 - Уничтожение записей"),nl,

write(" 3 - Просмотр баз данных"),nl,

write(" 4 - Заключение договоров"),nl,

write(" 5 - Интерактивный режим"),nl,

write(" 6 - Выход из программы"),nl,

write(" =>"),

readint(C),

clearwindow,

working(C),

clearwindow,

C = 6,

retractall(_),

removewindow.

/* Вывод данных о создателе программы */

working(0):-

makewindow(3,27,30,"О системе...",0,0,25,80),

nl,nl,

write(" Инфоpмационно-спpавочная система"),

nl,nl,

write(" Посредник "),

nl,nl,nl,nl,

write(" Программа составлена в среде "),

nl,

write(" TURBO-PROLOG v.2.0."),

nl,nl,nl,

write(" автоp: Данченков А.В."),

nl,nl,

write(" МИРЭА, гp.ИИ-1-95 (С) 1997 г. "),

nl,

sound(5,220),

cursor(22,26),

write("Нажмите на любую клавишу"),

readchar(_),

removewindow,!.

/*Процедура вывода меню корректировки данных*/

working(1):-

makewindow(4,26,48,"Коppектировка данных",0,0,25,80),

sound(5,220),

repeat,

nl,

nl,

cursor(9,0),

write(" 1 - Изменение данных по поставщикам"),nl,

write(" 2 - Изменение данных по покупателям"),nl,

write(" 3 - Добавление данных по поставщикам"),nl,

write(" 4 - Добавление данных по покупателям"),nl,

write(" 5 - Выход в главное меню" ),nl,

write(" =>"),

readint(X),

clearwindow,

X>0,X<=5,

correct(X),

clearwindow,

X=5,!,

removewindow.

/* Процедура вывода меню уничтожения данных*/

working(2):-

makewindow(5,48,107,"Уничтожение записей",0,0,25,80),

sound(5,220),

repeat,

cursor(7,0),

write(" 1 - Удаление из базы данных поставщиков"),nl,

write(" 2 - Удаление из базы данных покупателей"),nl,

write(" 3 - Удаление из классифицирующей сети"),nl,

write(" 4 - Выход"),nl,

write(" => "),

readint(I),

clearwindow,

I>0,I<=4,

del(I),

clearwindow,

I=4,!,

removewindow.

/* Процедура вывода меню просмотра базы данных */

working(3):-

makewindow(6,30,26,"Просмотp баз данных",0,0,25,80),

sound(5,220),

repeat,

nl,

nl,

cursor(7,0),

write(" 1 - Просмотр базы данных по поставщикам"),nl,

write(" 2 - Просмотр базы данных по покупателям"),nl,

write(" 3 - Просмотр связей в классифицирующей сети"),nl,

write(" 4 - Выход в главное меню" ),nl,

write(" =>"),

readint(X),

clearwindow,

X>0,X<=4,

view(X),

clearwindow,

X=4,!,

removewindow.

/* Вызов процедуры, выводящей контракты */

working(4):- retractall(_,best),

retractall(_,best2),

all_contract,!.

/* Процедура вывода меню интерактивного режима */

working(5):-

makewindow(4,26,48,"Заключение договоров в интерактивном режиме",0,0,25,80),

sound(5,220),

repeat,

nl,

nl,

cursor(9,0),

write(" 1 - Поиск поставщика"),nl,

write(" 2 - Поиск покупателя"),nl,

write(" 3 - Выход"),nl,

write(" =>"),

readint(X),

clearwindow,

X>0,X<=3,

interact(X),

clearwindow,

X=3,!,

removewindow.

/* Процедура выхода из программы */

working(6):-flag(1),retract(flag(1)),save_bd,!.

working(6).

working(_):-

makewindow(16,74,79,"ОШИБКА ВВОДА",6,18,8,40),

nl,

write(" Введите число от 0 до 6,"),nl,

write(" соответствующее выбранному пункту"),nl,nl,nl,

write(" Нажмите на любую клавишу"),

sound(20,494),

sound(30,392),

readchar(_),

removewindow.

/* Процедуры просмотра баз данных */

view(1):-

makewindow(16,31,26,"Просмотp базы данных по поставщикам",0,0,25,80),

write("|=================================================================|"),nl,

write("| ПОСТАВЩИКИ |"),nl,

write("|=================================================================|"),nl,

write("| | | | | Мин . | | | |"),nl,

write("|No| Фирма | Товар |Производитель| партия | Кол-во |Цена|Д|"),nl,

write("|=================================================================|"),nl,

поставщик(N,Firm,Tov,Proizv,Min,Kol,Price,Srok),

cursor(Z,_),

cursor(Z,1),write(N),

cursor(Z,3),write("¦",Firm),

cursor(Z,16),write("¦",Tov),

cursor(Z,36),write("¦",Proizv),

cursor(Z,50),write("¦",Min),

cursor(Z,59),write("¦",Kol),

cursor(Z,68),write("¦",Price),

cursor(Z,73),write("¦",Srok),

cursor(Z,0),write("¦"),

cursor(Z,76),write("¦"),

nl,

fail.

view(1):-

write("|==================================================================|"),

nl,

cursor(22,26),

write("Нажмите на любую клавишу"),

readchar(_),

removewindow.

view(2):-

makewindow(16,31,26,"Просмотp базы данных по покупателям",0,0,25,80),

write("|=================================================================|"),nl,

write("| ПОКУПАТЕЛИ |"),nl,

write("|=================================================================|"),nl,

write("| | | | | Требуемая | | |"),nl,

write("|No| Фирма | Товар |Производитель| партия |Цена |Д|"),nl,

write("|=================================================================|"),nl,

покупатель(N,Firm,Tov,Proizv,Part,Price,Srok),

cursor(Z,_),

cursor(Z,1),write(N),

cursor(Z,4),write("¦",Firm),

cursor(Z,20),write("¦",Tov),

cursor(Z,42),write("¦",Proizv),

cursor(Z,57),write("¦",Part),

cursor(Z,67),write("¦",Price),

cursor(Z,72),write("¦",Srok),

cursor(Z,0),write("¦"),

cursor(Z,76),write("¦"),

nl,

fail.

view(2):-

write("|==================================================================|"),

nl,

cursor(22,26),

write("Нажмите на любую клавишу"),

readchar(_),

removewindow.

view(3):-

makewindow(16,31,26,"Просмотp связей в классифицирующей сети",0,0,25,80),

nl,nl,

view_sup("производитель"),

cursor(21,26),

write(" Просмотр закончен "),nl,

cursor(22,26),

write("Нажмите на любую клавишу"),

readchar(_),

removewindow,!.

view(_).

/* Процедуры коррекции данных в базах данных */

correct(1):-

makewindow(4,26,48,"Изменение данных о поставщках",0,0,25,80),

nl,

write(" Введите порядковый номер поставщика : "),readint(X),nl,

поставщик(X,Firm,Tov,Proizv,Min,Kol,Price,Srok),

clearwindow,nl,

write(" Порядковый номер поставщика : "),write(X),nl,

write(" Фирма : "),write(Firm),nl,

write(" Товар : "),write(Tov),nl,

write(" Производитель : "),write(Proizv),nl,

write(" Минимальная партия : "),write(Min),nl,

write(" Колличество на складе : "),write(Kol),nl,

write(" Цена за единицу товара : "),write(Price),nl,

write(" Сроки поставки : "),write(Srok),nl,

nl,nl,nl,

write(" Введите название фирмы : "),readln(Firm1),

write(" Введите название товара : "),readln(Tov1),

write(" Введите производителя : "),readln(Proizv1),

write(" Введите минимальную партию : "),readInt(Min1),

write(" Введите колличество на складе : "),readInt(Kol1),

write(" Введите цену за единицу товара : "),readreal(Price1),

write(" Введите сроки поставки : "),readInt(Srok1),nl,

X1=X,

retract(поставщик(X,Firm,Tov,Proizv,Min,Kol,Price,Srok)),

assertz(поставщик(X1,Firm1,Tov1,Proizv1,Min1,Kol1,Price1,Srok1)),

!,

ins_sup(Proizv1),

assert(flag(1)),

removewindow.

correct(2):-

makewindow(4,26,48,"Изменение данных о покупателях",0,0,25,80),

nl,

write(" Введите порядковый номер покупателя : "),readint(X),nl,

покупатель(X,Firm,Tov,Proizv,Part,Price,Srok),

clearwindow,nl,

write(" Порядковый номер покупателя : "),write(X),nl,

write(" Фирма : "),write(Firm),nl,

write(" Товар : "),write(Tov),nl,

write(" Производитель : "),write(Proizv),nl,

write(" Необходимая партия : "),write(Part),nl,

write(" Цена за единицу товара : "),write(Price),nl,

write(" Сроки поставки : "),write(Srok),nl,

nl,nl,nl,

write(" Введите название фирмы : "),readln(Firm1),

write(" Введите название товара : "),readln(Tov1),

write(" Введите производителя : "),readln(Proizv1),

write(" Введите необходимую партию : "),readInt(Part1),

write(" Введите цену за единицу товара : "),readreal(Price1),

write(" Введите сроки поставки : "),readInt(Srok1),nl,

X1=X,

retract(покупатель(X,Firm,Tov,Proizv,Part,Price,Srok)),

assertz(покупатель(X1,Firm1,Tov1,Proizv1,Part1,Price1,Srok1)),

ins_sup(Proizv1),

!,

assert(flag(1)),

removewindow.

correct(3):-

makewindow(9,26,48,"Добавление данных о поставщиках",0,0,25,80),

repeat,

nl,

write(" Введите порядковый номер поставщика : "),readint(K),nl,

write(" Введите название фирмы : "),readln(F),

write(" Введите название товара : "),readln(T),

write(" Введите производителя : "),readln(P),

write(" Введите минимальную партию : "),readInt(M),

write(" Введите колличество на складе : "),readInt(Kl),

write(" Введите цену за единицу товара : "),readreal(Pr),

write(" Введите сроки поставки : "),readInt(S),nl,

N1=K,

Firm=F,Tov=T,Proizv=P,

Min=M,Kol=Kl,

Price=Pr,Srok=S,

assertz(поставщик(N1,Firm,Tov,Proizv,Min,Kol,Price,Srok)),

ins_sup(Proizv),

ask,!,

assert(flag(1)),

removewindow.

correct(4):-

makewindow(9,26,48,"Добавление данных о покупателях",0,0,25,80),

repeat,

nl,

write(" Введите порядковый номер покупателя : "),readint(K),nl,

write(" Введите название фирмы : "),readln(F),

write(" Введите название товара : "),readln(T),

write(" Введите производителя : "),readln(P),

write(" Введите необходимую партию : "),readInt(M),

write(" Введите цену за единицу товара : "),readreal(Pr),

write(" Введите сроки поставки : "),readInt(S),nl,

N1=K,

Firm=F,Tov=T,Proizv=P,

Part=M,

Price=Pr,Srok=S,

assertz(покупатель(N1,Firm,Tov,Proizv,Part,Price,Srok)),

ins_sup(Proizv),

ask,!,

assert(flag(1)),

removewindow.

correct(_).

/* Вспомагательные процедуры удаления данных */

del(1):-

makewindow(5,48,107,"Удаление данных о поставщках",0,0,25,80),

nl,

write(" Введите порядковый номер поставщика : "),readint(X),nl,

поставщик(X,Firm,Tov,Proizv,Min,Kol,Price,Srok),

retract(поставщик(X,Firm,Tov,Proizv,Min,Kol,Price,Srok)),

assert(flag(1)),

ok,

!,

removewindow.

del(1):-

error,

removewindow,!.

del(2):-

makewindow(5,48,107,"Удаление данных о покупателях",0,0,25,80),

nl,

write(" Введите порядковый номер покупателя : "),readint(X),nl,

покупатель(X,Firm,Tov,Proizv,Part,Price,Srok),

retract(покупатель(X,Firm,Tov,Proizv,Part,Price,Srok)),

assert(flag(1)),

ok,

!,

removewindow.

del(2):-

error,

removewindow,!.

del(3):- makewindow(5,48,107,"Удаление из классифицирующей сети",0,0,25,80),

nl,

write(" Введите удаляемого производителя/регеон : "),readln(S),nl,

del_sup(S),

assert(flag(1)),

ok,

!,

removewindow.

del(3):-

error,

removewindow,!.

del(_).

/* Процедура запроса на окончание ввода в correct(3) и correct(3) */

ask:-

makewindow(10,43,120,"Вопрос",6,18,8,40),nl,nl,

write(" Продолжить процесс ввода данных? "),nl,nl,

write(" [Д]а/[Н]ет"),

readchar(Ch),

removewindow,

clearwindow,

Ch='Н',!.

/* Вывод запроса о сохранении изменённых баз данных */

save_bd:-

makewindow(17,74,79,"Сохранение изменений",6,18,8,40),nl,

write(" Сохранить произведённые "),nl,

write(" изменения на диске?"),nl,nl,

write(" [Д]а/[Н]ет"),

sound(20,494),

sound(30,392),

readchar(Ch),

removewindow,

clearwindow,

Ch='Д',!,sve.

save_bd.

/* Сохранение данных на диске */

sve:-save("kurs1.dat",поставщик),

save("kurs2.dat",покупатель),

save("web.dat",sup),!.

sve:-io_error,removewindow.

/* Процедуры вывода сообщений об ошибках */

error:-

makewindow(15,74,79,"ОШИБКА",6,18,8,40),

cursor(2,16),

write("ОШИБКА"),nl,nl,

write(" Нажмите на любую клавишу"),

sound(70,294),

readchar(_),

removewindow,

!.

io_error:-

makewindow(16,74,79,"ОШИБКА",6,18,8,40),

cursor(2,7),

write("Ошибка ввода/вывода"),nl,nl,

write(" Нажмите на любую клавишу"),

sound(70,294),

readchar(_),

removewindow.

/* Процедура вывода сообщения об успешном завершении данной операции */

ok:-

makewindow(17,27,90,"ОК",6,18,8,40),

cursor(2,7),

write(" ОПЕРАЦИЯ ВЫПОЛНЕНА"),nl,nl,

write(" Нажмите на любую клавишу"),

readchar(_),

removewindow.

/* Процедура repeat */

repeat.

repeat:- repeat.

/* Процедура обнаружения связей по классифицирующей сети */

cmp_name(Proizv,Proizv).

cmp_name(Proizv,Proizv1):-

find_web(Proizv,Proizv1).

find_web(X,Y):-sup(X,Y).

find_web(X,Y):-sup(X,Z),find_web(Z,Y).

/* Процедура обнаружения всех возможных контрактов */

all_contract:-

покупатель(N,_,Tov,Proizv,Part,Price,Srok),

поставщик(N1,_,Tov,Proizv1,Min1,Kol1,Price1,Srok1),

cmp_name(Proizv,Proizv1),

Part>=Min1,Part=Price1,Srok>=Srok1,

assertz(contract(N,N1)),

assert(best(N,0,0,0)),

assert(best2(N,0,0,1000)),

fail.

all_contract:-print_contract.

/* Процедуры вывода на экран всех возможных контрактов */

print_contract:-

makewindow(16,31,26,"Все возможные контракты",0,0,25,80),

nl,nl,

покупатель(N,Firm,_,_,_,_,_),

checkcontr(N),

prn(N,Firm),

fail.

print_contract:-

retractall(_,contract),

removewindow.

prn(N,Firm):-

cursor(1,1),

write("Для фирмы: ",Firm),

nl,

write("|=================================================================|"),nl,

write("| | | | | Мин . | | | |"),nl,

write("|No| Фирма | Товар |Производитель| партия | Кол-во |Цена|Д|"),nl,

write("|=================================================================|"),nl,

contract(N,N1),

поставщик(N1,Firm1,Tov1,Proizv1,Min1,Kol1,Price1,Srok1),

cursor(Z,_),

cursor(Z,1),write(N1),

cursor(Z,3),write("¦",Firm1),

cursor(Z,16),write("¦",Tov1),

cursor(Z,36),write("¦",Proizv1),

cursor(Z,50),write("¦",Min1),

cursor(Z,59),write("¦",Kol1),

cursor(Z,68),write("¦",Price1),

cursor(Z,73),write("¦",Srok1),

cursor(Z,0),write("¦"),

cursor(Z,76),write("¦"),

nl,

покупатель(N,_,_,_,Part,_,_),

retract(contract(N,N1)),

Cs=Part*Price1,

form_best(N,N1,Cs,Srok1),

form_best2(N),

fail.

prn(N,_):-

write("|===================================================================|"),

nl,

best2(N,Np,_,_),

поставщик(Np,Firm,_,_,_,_,_,_),nl,

write("Наиболее предпочтительный"),nl,

write("контракт с фирмой: ",Firm),nl,

cursor(22,26),

write("Нажмите на любую клавишу"),

readchar(_),

clearwindow,!.

/* Проверяет, есть ли контракты */

checkcontr(N):-contract(N,_).

/* Процедура формирования наиболее предпочтительного контракта */

form_best(N,Np,S,Srok):- Na=N,

best(Na,Np1,S1,Srok1),S=S1,

assertz(best(Na,Np,S,Srok)),!.

form_best(N,Np,S,Srok):- Na=N,

best(Na,Np1,S1,Srok1),S>S1,fb1(Na,Np,S,Srok),

assertz(best(Na,Np,S,Srok)),!.

form_best(_,_,_,_).

fb1(N,_,_,_):-

retract(best(N,_,_,_)),fail.

fb1(_,_,_,_).

form_best2(N):-

best(N,Np,S,Srok),f_b2(N,Np,S,Srok),fail.

form_best2(_).

f_b2(N,Np,S,Srok):- Na=N,

best2(Na,Np1,_,Srok1),Srok1>Srok,

fb2(Na,Np,S,Srok),

assertz(best2(Na,Np,S,Srok)),!.

f_b2(_,_,_,_).

fb2(N,_,_,_):- retract(best2(N,_,_,_)),fail.

fb2(_,_,_,_).

/* Процедуры заключения договоров в интерактивном режиме */

interact(1):-

makewindow(9,26,48,"Поиск поставщика",0,0,25,80),

nl,

write(" Введите название фирмы : "),readln(F),

write(" Введите название товара : "),readln(T),

write(" Введите производителя : "),readln(P),

write(" Введите необходимую партию : "),readInt(M),

write(" Введите цену за единицу товара : "),readreal(Pr),

write(" Введите сроки поставки : "),readInt(S),nl,

N=0,

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5167
Авторов
на СтудИзбе
438
Средний доход
с одного платного файла
Обучение Подробнее