Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
задачи код.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
204.79 Кб
Скачать

Завдання 1

Створитиавтоматизовану СПР, за допомогоюякоїнеобхідновирішитинаступну задачу.

На одній вулиці стоять 4 будинки. В кожному з них живуть 4 мешканці: Семен, Микола, Артур та Роман. Кожен з них володіє однією із наступних професій: Лікар, Художник, Єгер та Тренер. Визначити, в якому будинку проживає кожен з мешканців і хто якою професією володіє.

Відомінаступніфакти:

1) Художник живепоряд з тренером

2) Лікарживепоряд з художником

3) Єгерживелівіше за лікаря

4) Тренер живе не поряд з Єгерєм

5) Художник живезправавід Семена

6) Роман не є тренером

7) Семен живепоряд з Миколою

8) Артур живе не поряд з Романом

houses([

house(first, _, _ ),

house(second, _, _ ),

house(third, _, _ ),

house(forth, _, _ )

]).

left_of(A, B, [A, B | _]).

left_of(A, B, [_ | Y]) :- left_of(A, B, Y).

right_of(A, B, [B, A | _]).

right_of(A, B, [_ | Y]) :- right_of(A, B, Y).

next_to(A, B, [A, B | _]).

next_to(A, B, [B, A | _]).

next_to(A, B, [_ | Y]) :- next_to(A, B, Y).

mymember(X, [X|_]).

mymember(X, [_|Y]) :- mymember(X, Y).

not_in(_,[]).

not_in(X,[X|_]):-!,fail.

not_in(X,[_|A]):-not_in(X,A).

not_trainer(H):-mymember(house(_,roman,hunter),H).

not_trainer(H):-mymember(house(_,roman,doctor),H).

not_trainer(H):-mymember(house(_,roman,painter),H).

not_trainer(H):-mymember(house(_,roman,trainer),H),!,fail.

print_houses([]).

print_houses([A|B]) :-

write(A), nl,

print_houses(B).

false(X):-X,!,fail.

false(_).

solve(H):-houses(H),

next_to(house(_,_,painter),

house(_,_,trainer),H),

next_to(house(_,_,doctor),

house(_,_,painter),H),

left_of(house(_,_,hunter),

house(_,_,doctor),H),

false(next_to(house(_,_,trainer),

house(_,_,hunter),H)),

right_of(house(_,_,painter),

house(_,semen,_),H),

next_to(house(_,semen,_),

house(_,nikolay,_),H),

false(next_to(house(_,artur,_),

house(_,roman,_),H

)),

not_trainer(H),

mymember(house(_,roman,_), H),

mymember(house(_,artur,_), H),

mymember(house(_,semen,_), H),

mymember(house(_,nikolay,_), H),

print_houses(H).

:-solve(_).

Завдання 2

Створитиавтоматизовану СПР, за допомогоюякоїнеобхідновирішитинаступну задачу.

У приміщенні банку в одну лінію розміщено 4 робочі місця. Працівників, які займають ці місця, зовуть наступним чином: Світлана, Анжела, Маріанна та Денис. Кожен з них обіймає певну посаду: Директор відділення, Операціоніст, Кредитний менеджер та Депозитний менеджер. Визначити, на якому робочому місці знаходиться кожен із робітників та яку посаду обіймає, якщо про них відомі наступні факти:

Відомінаступніфакти:

1) Світланазнаходитьсяпоряд Анжелою

2) Денис не є Депозитним менеджером

3) Кредитний менеджер знаходитьсялівіше за Директора відділення

4) Депозитний менеджер розміщений не поряд з Кредитним менеджером

5)Директор відділеннязнаходитьсяпоряд з Операціоністом

6)ОпераціоністрозміщенийзправавідСвітлани

7) Операціоністрозміщенийпоряд з Депозитним менеджером

8)Маріанназнаходитьсяне поряд з Денисом

робочие_места([

робочее_место(first, _, _ ),

робочее_место(second, _, _ ),

робочее_место(third, _, _ ),

робочее_место(forth, _, _ )

]).

left_of(A, B, [A, B | _]).

left_of(A, B, [_ | Y]) :- left_of(A, B, Y).

right_of(A, B, [B, A | _]).

right_of(A, B, [_ | Y]) :- right_of(A, B, Y).

Продовження лістингу 1.1– Код програми

next_to(A, B, [A, B | _]).

next_to(A, B, [B, A | _]).

next_to(A, B, [_ | Y]) :- next_to(A, B, Y).

mymember(X, [X|_]).

mymember(X, [_|Y]) :- mymember(X, Y).

not_in(_,[]).

not_in(X,[X|_]):-!,fail.

not_in(X,[_|A]):-not_in(X,A).

not_депозитный_менеджер(H):-mymember(робочее_место(_,денис,директор_отделения),H).

not_депозитный_менеджер(H):-mymember(робочее_место(_,денис,операционист),H).

not_депозитный_менеджер(H):-mymember(робочее_место(_,денис,кредитный_менеджер),H).

not_депозитный_менеджер(H):-mymember(робочее_место(_,денис, депозитный_менеджер),H),!,fail.

print_робочие_места([]).

print_робочие_места([A|B]) :-

write(A), nl,

print_робочие_места(B).

false(X):-X,!,fail.

false(_).

solve(H):-робочие_места(H), next_to(робочее_место(_,светлана,_),

робочее_место(_,анжела, _),H),

next_to(робочее_место(_,_, директор_отделения),

робочее_место(_,_ , операционист),H),

left_of(робочее_место(_,_, кредитный_менеджер),

робочее_место(_,_, директор_отделения),H),

false(next_to(робочее_место(_,денис,_),

робочее_место(_,_,депозитный_менеджер),H)),

false(next_to(робочее_место(_,мариана,_),

робочее_место(_,денис, _),H)), right_of(робочее_место(_,_, операционист),

робочее_место(_, светлана, _),H),

next_to(робочее_место(_,_, операционист),

робочее_место(_,_, депозитный_менеджер),H),

false(next_to(робочее_место(_,_, депозитный_менеджер), робочее_место(_,_, кредитный_менеджер),H )),

not_депозитный_менеджер(H),

mymember(робочее_место(_,светлана,_), H),

mymember(робочее_место(_,анжела,_), H),

mymember(робочее_место(_,мариана,_), H)

mymember(робочее_место(_,денис,_), H), print_робочие_места(H).

:-solve(_).