Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 19

Логическая задача на Прологе, о просмотре семьей телевизора.()

15.12.2011, 21:54. Показов 3980. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Условие задачи: Семья, состоящая из отца, матери и трех дочерей - Ани, Веры и Cветы, - купила телевизор. Каждому, конечно, хотелось посмотреть передачу в первый вечер.
- Нам нужно распределить обязанности, чтобы не остаться без ужина, - сказал папа.
- Правильно, - поддержала мама. - Но только когда ты будешь смотреть передачу, я тоже сяду у телевизора.
- Хорошо, - согласился папа. - Кому из нас повезло, так это Свете и Вере, - улыбнулся папа.
- По крайней мере, одна из них получит удовольствие.
- А нам с тобой, Анечка, придется смотреть передачу только по очереди, - сказала мама.
- Я согласна, - ответила Аня. - Только ты нам разреши с Верой вместе работать на кухне или вместе быть у телевизора.
- Пожалуй, Свету одну нельзя оставлять, - сказал папа. - Если она пожелает смотреть передачу, то придется и мне с Верой посидеть с ней.
Все предложения были приняты. Кто смотрел передачу в первый вечер?
вот я тут кое что сделала
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
domains
    s=symbol
predicates
    nondeterm name(s)
    nondeterm razn(s,s)
    nondeterm prav(s,s)
    %nondeterm prav2(s,s)
    %nondeterm prav3(s,s)
    %nondeterm prav4(s,s)
    %nondeterm prav5(s,s)
    nondeterm otvet(s,s)
clauses
%name("Папа").name("Мама").name("Аня").name("Вера").name("Света").
name("Телевизор").name("Ужин").
razn(X,Y):- name(X),name(Y),X<>Y.
 
prav(X,Y):- razn(X,Y),X="Папа",X="Мама",Y<>"Папа",Y<>"Мама".
%prav(X,Y):- razn(X,Y),Y="Папа",X="Мама",X<>"Папа",Y="Мама".
%prav(X,Y):- razn(X,Y),Y="Папа",Y="Мама",X<>"Папа",X<>"Мама".
 
prav(X,Y):- razn(X,Y),X="Света",X="Вера",Y<>"Света",Y<>"Вера".
prav(X,Y):- razn(X,Y),Y="Света",X="Вера",X<>"Света",Y<>"Вера".
prav(X,Y):- razn(X,Y),X="Света",Y="Вера",Y<>"Света",X<>"Вера".
 
prav(X,Y):- razn(X,Y),X="Аня",Y="Мама",Y<>"Аня",X<>"Мама".
prav(X,Y):- razn(X,Y),X="Мама",Y="Аня",Y<>"Мама",X<>"Аня".
 
prav(X,Y):- razn(X,Y),X="Вера",X="Аня",Y<>"Вера",Y<>"Аня".
prav(X,Y):-razn(X,Y),Y="Вера",Y="Аня",X<>"Вера",X<>"Аня".
 
prav(X,Y):-razn(X,Y), X="Света", X="Папа", X="Вера",Y<>"Света", Y<>"Папа", Y<>"Вера".
%prav(X,Y):-razn(X,Y), Y="Света",X<>"Света",X="Папа", X="Вера".
%prav(X,Y):-razn(X,Y), Y="Света",X<>"Света", X<>"Папа", X<>"Вера".
 
 
otvet(X,Y):-prav(X,Y).%,prav2(X,Y),prav3(X,Y),prav4(X,Y),prav5(X,Y).
goal
otvet(X,Y).
а он no Solution говорит.. почему ничего не найдено?логично же все вроде..=( помогите пожалуйста.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.12.2011, 21:54
Ответы с готовыми решениями:

Определить, кто выиграл этап гонки "Формула 1"
Привет, помогите пожалуйста. Нам дали задание в прологе, который мы в глаза не видели, но это как бы не их проблемы. Побывав на множестве...

Логическая задача на Турбо Прологе, мысли иссякли
Необходимо решить задачу на Турбо Прологе. Вот задание: Трое друзей спорили, как распределятся места среди трех команд. - Первым...

Логическая задача на прологе про 4х братьев. помогите!
нужно решить такую задачку: Четыре брата собрались на дискотеку. Когда они выходили из дома каждый ошибся и случайно взял не свои шляпу и...

10
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
15.12.2011, 22:36
У Вас во всех правилах prav есть моменты типа
X="Папа",X="Мама"
Ну и естественно, что нету такого Х, который сразу бы и Папе и Маме был равен.
0
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 19
15.12.2011, 22:45  [ТС]
а, вот оно как!
а вот если так сделать?
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
domains
    s=symbol
predicates
    nondeterm name(s)
    nondeterm razn(s,s,s,s,s)
    nondeterm prav1(s,s,s,s,s)
    nondeterm prav2(s,s,s,s,s)
    nondeterm prav3(s,s,s,s,s)
    nondeterm prav4(s,s,s,s,s)
    nondeterm prav5(s,s,s,s,s)
    nondeterm otvet(s,s,s,s,s)
clauses
name("Папа").name("Мама").name("Аня").name("Вера").name("Света").
%name("Телевизор").name("Ужин").
%razn(X,Y):- name(X),name(Y),X<>Y.
razn(X1,X2,X3,X4,X5):- name(X1),name(X2),name(X3),name(X4),name(X5),
                    X1<>X2,X1<>X3,X1<>X4,X1<>X5,X2<>X3,X2<>X4,X2<>X5,X3<>X4,X3<>X5,X4<>X5.
prav1(X1,X2,X3,X4,X5):- razn(X1,X2,X3,X4,X5),X1="Телевизор",X2="Телевизор".
prav1(X1,X2,X3,X4,X5):- razn(X1,X2,X3,X4,X5),X1<>"Телевизор",X2="Телевизор".
prav1(X1,X2,X3,X4,X5):- razn(X1,X2,X3,X4,X5),X1<>"Телевизор",X2<>"Телевизор".
%prav(X,Y):- razn(X,Y),Y="Папа",X="Мама",X<>"Папа",Y="Мама".
%prav(X,Y):- razn(X,Y),Y="Папа",Y="Мама",X<>"Папа",X<>"Мама".
 
prav2(X1,X2,X3,X4,X5):- razn(X1,X2,X3,X4,X5),X4="Телевизор",X5="Телевизор".
prav2(X1,X2,X3,X4,X5):- razn(X1,X2,X3,X4,X5),X4="Телевизор",X5<>"Телевизор".
prav2(X1,X2,X3,X4,X5):- razn(X1,X2,X3,X4,X5),X4<>"Телевизор",X5="Телевизор".
%prav(X,Y):- razn(X,Y),Y="Света",X="Вера",X<>"Света",Y<>"Вера".
%prav(X,Y):- razn(X,Y),X="Света",Y="Вера",Y<>"Света",X<>"Вера".
 
prav3(X1,X2,X3,X4,X5):- razn(X1,X2,X3,X4,X5),X3="Телевизор",X2<>"Телевизор".
prav3(X1,X2,X3,X4,X5):- razn(X1,X2,X3,X4,X5),X3<>"Телевизор",X2="Телевизор".
%prav(X,Y):- razn(X,Y),X="Мама",Y="Аня",Y<>"Мама",X<>"Аня".
 
prav4(X1,X2,X3,X4,X5):- razn(X1,X2,X3,X4,X5),X4="Телевизор",X3="Телевизор".
prav4(X1,X2,X3,X4,X5):- razn(X1,X2,X3,X4,X5),X4<>"Телевизор",X3<>"Телевизор".
%prav(X,Y):-razn(X,Y),Y="Вера",Y="Аня",X<>"Вера",X<>"Аня".
 
prav5(X1,X2,X3,X4,X5):- razn(X1,X2,X3,X4,X5),X5="Телевизор", X1="Телевизор", X4="Телевизор".
prav5(X1,X2,X3,X4,X5):- razn(X1,X2,X3,X4,X5),X5<>"Телевизор", X1="Телевизор", X4="Телевизор".
prav5(X1,X2,X3,X4,X5):- razn(X1,X2,X3,X4,X5),X5<>"Телевизор", X1<>"Телевизор", X4<>"Телевизор".
%prav(X,Y):-razn(X,Y), Y="Света",X<>"Света",X="Папа", X="Вера".
%prav(X,Y):-razn(X,Y), Y="Света",X<>"Света", X<>"Папа", X<>"Вера".
 
 
otvet(X1,X2,X3,X4,X5):-prav1(X1,X2,X3,X4,X5),prav2(X1,X2,X3,X4,X5),
                       prav3(X1,X2,X3,X4,X5),prav4(X1,X2,X3,X4,X5),prav5(X1,X2,X3,X4,X5).
goal
otvet(Папа,Мама,Аня,Вера,Света).
правда тут тоже no Solution.=(не понимаю..
0
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
15.12.2011, 23:16
Вы сравниваете X1="Телевизор", а Х1 не может быть телевизору равен, т.к он из
name("Папа").name("Мама").name("Аня").na me("Вера").name("Света").
0
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
15.12.2011, 23:56
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
domains
    p=sveta;anya;vera;papa;mama
    pl=p*
predicates
    tv(p,pl)
    nondeterm watch(pl)
    member(p,pl)
    nondeterm select(pl,pl)
    nondeterm lucky(pl)
clauses
    select([],[]):-!.
    select([H|T],R):-select(T,Rn),R=Rn;select(T,Rn),R=[H|Rn].
    
    member(X,[X|_]):-!.
    member(X,[_|T]):-member(X,T).
    
    lucky(TV):-member(sveta,TV);member(vera,TV);member(sveta,TV),member(vera,TV).
    
    tv(mama,TV):-member(papa,TV),not(member(anya,TV)),!,member(mama,TV).
    tv(mama,TV):-not(member(mama,TV)).
    
    tv(anya,TV):-member(vera,TV),not(member(anya,TV)),!,member(anya,TV).
    tv(anya,TV):-not(member(anya,TV)).
    
    tv(sveta,TV):-member(papa,TV),member(vera,TV),member(sveta,TV),!.
    tv(sveta,TV):-not(member(sveta,TV)).
    
    watch(TV):-
        select([sveta,anya,vera,papa,mama],TV),
        tv(mama,TV),tv(anya,TV),tv(sveta,TV),not(TV=[]).
goal 
    watch(X).
0
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 19
16.12.2011, 00:28  [ТС]
а как можно сделать, чтобы все таки телик посмотрел кто нибудь?

Добавлено через 15 минут
а там должно аня и вера получится..=(((((
0
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
16.12.2011, 00:53
из-за копи-паста опечатка сори и еще кое-что пропустил

Добавлено через 10 минут
да натупил по полной сори
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
domains
    p=sveta;anya;vera;papa;mama
    pl=p*
predicates
    tv(p,pl)
    nondeterm watch(pl)
    member(p,pl)
    nondeterm select(pl,pl)
    nondeterm lucky(pl)
clauses
    select([],[]):-!.
    select([H|T],R):-select(T,Rn),R=Rn;select(T,Rn),R=[H|Rn].
    
    member(X,[X|_]):-!.
    member(X,[_|T]):-member(X,T).
    
    lucky(TV):-member(sveta,TV);member(vera,TV);member(sveta,TV),member(vera,TV).
    
    tv(mama,TV):-member(papa,TV),not(member(anya,TV)),!,member(mama,TV).
    tv(mama,TV):-not(member(mama,TV)),!.
    
    tv(papa,TV):-member(papa,TV),!,member(mama,TV).
        tv(papa,TV):-not(member(papa,TV)),!.
        
    tv(anya,TV):-member(vera,TV),not(member(mama,TV)),!,member(anya,TV).
    tv(anya,TV):-not(member(anya,TV)),!.
    
    tv(vera,TV):-member(anya,TV),!,member(vera,TV).
    tv(vera,TV):-not(member(vera,TV)),!.
    
    tv(sveta,TV):-member(papa,TV),member(vera,TV),member(sveta,TV),!.
    tv(sveta,TV):-not(member(sveta,TV)),!.
    
    watch(TV):-
        select([sveta,anya,vera,papa,mama],TV),
        tv(mama,TV),tv(papa,TV),tv(anya,TV),tv(vera,TV),tv(sveta,TV),lucky(TV).
goal 
    watch(X).
0
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 19
16.12.2011, 00:57  [ТС]
freest,извините. а можно узнать что надо поправить, чтобы из вот этого -
X=[papa,mama]
X=[vera,papa,mama]
X=[anya,vera]
X=[anya,vera,papa]
X=[sveta,vera,papa,mama]
X=[sveta,anya,vera,papa]
6 Solutions
осталось только X=[anya,vera]?

Добавлено через 1 минуту
ааа. спасибо большое!я постараюсь это понять.
0
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
16.12.2011, 00:58
так и осталось только то, что надо
0
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 19
16.12.2011, 01:08  [ТС]
еще один маленький вопросик. можно ли как нибудь так усовершенствовать то , что я в первом посте написала, или это безнадежный бред?
0
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
16.12.2011, 01:44
не понял о чем вы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2011, 01:44
Помогаю со студенческими работами здесь

Maxtor seagate m3 portable вытащили из телевизора при просмотре
Ребенок вытащил жесткий диск из телевизора при открытом файловом менеджере с жестким диском. Теперь жд не отображается ни в телевизоре, ни...

задача с деревьями на прологе
Помогите пожалуйста решить задачу с деревьями на прологе: Определить число вхождений элемента Е в дерево Т

Интересная задача про детей на экскурсии в Прологе
Доброго времени суток, нужна ваша помощь в реализации интересной задачи. разработать программу с помощью Пролога для решения...

Определить, какого числа не существует в последовательности
Дано последовательность с N чисел, которая имеет разные числа от 0 до N. Определить, какого числа не существует в последовательности.

Логическая задача
157-0 362-1 448-2 786-3 688-? надо понять логику задачи и решить её(если не трудно решение тоже сюда запишите)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru