Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 27.02.2009, 23:38   #1 (permalink)
ШуриK
Member
 
Аватар для ШуриK
 
Регистрация: 05.02.2009
Сообщений: 2,602
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1165
Unhappy Задача на ПРОЛОГ-Д

Здравствуйте, вот надо сделать задачу на данном языке программирования, если кто-нибудь изучал, помогите решить вопрос о взаимосвязи родственников, имеем:
мама(Оля,Сергей)
папа(Бронислав, Сергей)
брат(Саня,Сергей)
сестра(Наталья,Сергей)
бабушка(Груня,Сергей)

Описание родственников идет от имени Сергея, у его есть папа,мама, брат, сестра, бабушка. А как установить правило, что они все родственники, т.е. нужно задать вопрос кто является мамой у сестры Натальи, ну и получить ответ Оля. Вариант с описанием всех родственников не катит, т.к. "это слишком просто"
ШуриK вне форума   Ответить с цитированием

Старый 27.02.2009, 23:38
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Возможно, данная тема уже решена ранее

Задача по С + +
Задача по С++
Задача

Старый 03.03.2009, 13:31   #2 (permalink)
csbwalker
Member
 
Аватар для csbwalker
 
Регистрация: 03.03.2009
Сообщений: 87
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 187
По умолчанию

Вариант с описанием родственников не катит - имеется ввиду втупую прописать мама(Оля, Наталья) или имеется ввиду что-то другое?
Установить что они родственники - имеется ввиду полный набор? Просто есть набольшая проблема - бабушка она чья мама? Оли или Бронислава? Или нужно только для младшего поколения?
csbwalker вне форума   Ответить с цитированием
Старый 03.03.2009, 22:36   #3 (permalink)
ШуриK
Member
 
Аватар для ШуриK
 
Регистрация: 05.02.2009
Сообщений: 2,602
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1165
По умолчанию

Фу, я думал никто не поможет. Вариант, что прописать типа:
мама(Оля,Сергей)
мама(Оля,Саня)
мама(Оля,Наталья)
папа(Бронислав, Сергей)
папа(Бронислав, Саня)
папа(Бронислав, Наталья)
брат(Саня,Сергей)
брат(Сергей,Саня)
и т.п.
Не катит, т.к. больно просто, надо установить связь между всеми родственниками, что Саня Сергей и Наталья они друг другу братья и сестры, и что Оля и Бронислав являются тоже ссответсвенно мамой и папой Наталье и Сане, а бабушку выкинуть вобще можно. Связь родственников типа:

мама(Оля,Сергей):-брат(Саня,Сергей)

И чтоб потом можно было задать вопрос кто является мамой или папой Сани и Натальи. Вот. Связь я не знаю как установить, т.к. нам сказали делайте лабы и все. Перепробывал все варианты.
ШуриK вне форума   Ответить с цитированием
Старый 04.03.2009, 12:37   #4 (permalink)
csbwalker
Member
 
Аватар для csbwalker
 
Регистрация: 03.03.2009
Сообщений: 87
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 187
По умолчанию

Тут нужно использовать переменные (начинаются с заглавных букв или с символа подчеркивания).
Для определения кто чья мама подойдёт такое описание:
мама(X, Y) :- брат(Y, Z), мама(X, Z).
мама(X, Y) :- сестра(Y, Z), мама(X, Z).

Что по русски звучит "X - мама Y при условии, что Y - брат Z, а X - мама Z"
И то же самое для сестры.

Где-то через час будет минутка - напишу целиком код программы для определения кто чей мама\папа и сестра\брат.
csbwalker вне форума   Ответить с цитированием
Старый 04.03.2009, 14:01   #5 (permalink)
csbwalker
Member
 
Аватар для csbwalker
 
Регистрация: 03.03.2009
Сообщений: 87
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 187
По умолчанию

В общем вот что получилось:

мама(X, Y) :- брат(Y, Сергей), мама(X, Сергей).
мама(X, Y) :- сестра(Y, Сергей), мама(X, Сергей).
папа(X, Y) :- брат(Y, Сергей), папа(X, Сергей).
папа(X, Y) :- сестра(Y, Сергей), папа(X, Сергей).

сестра(X, Y) :- НЕ(РАВНО(Y, Сергей)), сестра(X, Сергей), брат(Y, Сергей).
сестра(X, Y) :- НЕ(РАВНО(Y, Сергей)), сестра(X, Сергей), сестра(Y, Сергей).
брат(X, Y) :- НЕ(РАВНО(Y, Сергей)), брат(X, Сергей), брат(Y, Сергей).
брат(X, Y) :- НЕ(РАВНО(Y, Сергей)), брат(X, Сергей), сестра(Y, Сергей).

мама(Оля,Сергей).
папа(Бронислав, Сергей).
брат(Саня,Сергей).
сестра(Наталья,Сергей).
НО! Есть тут одна непонятка - написал прогу я исходя из того что ты в первом посте указал что всё описывается именно от имени Сергея.
Соответственно всё работает при таком раскладе нормально, но если ты попробуешь сообщить ему факт где будет указан не Сергей - будет косяк.
Сделал я это из расчета что бы не усложнять излишне прогу раз такие условия.
Если это не так - пиши, чего-нить придумаем!

Последний раз редактировалось csbwalker; 04.03.2009 в 14:34
csbwalker вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 04.03.2009, 15:37   #6 (permalink)
ШуриK
Member
 
Аватар для ШуриK
 
Регистрация: 05.02.2009
Сообщений: 2,602
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1165
По умолчанию

Не, все гуд, даже если что-то не прокатит скажу чтоб объяснял тогда как пральна. Огромнейшее тебе СПАСИБО, никто вобще просто не знает как это сделать, выручил!
ШуриK вне форума   Ответить с цитированием
Старый 27.11.2009, 04:32   #7 (permalink)
marina_khv
Новичок
 
Регистрация: 27.11.2009
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

птица(x,y)<-взмах(x,y),птица(x,y);
взмах(x,y)<-вниз(x,y,1),вниз(x,y,0),вверх(x,y,1),вверх(x,y,0);
вниз(x,y,c)<-сдв(x,y,z,t,u,v),ЛИНИЯ(z,y,u,y,1);
вверх(x,y)<-сдв(x,y,z,t,u,v),ЛИНИЯ(x,y,z,t,1),ЛИНИЯ(x,y,u,v,1) ;
сдв(x,y,z,t,u,v)<-сдп(x,y,z,t),сдл(x,y,u,v);
сдп(x,y,z,t)<-СЛОЖЕНИЕ(x,5,z),СЛОЖЕНИЕ(t,5,y);
сдл(x,y,z,t)<-СЛОЖЕНИЕ(z,5,x),СЛОЖЕНИЕ(t,5,y);
дом(x,y)<-крыша(x,y,r,f), этаж(x,y,f);
этаж(x,y,f)<-СЛОЖЕНИЕ(y,20,z),квадр(x,y,f,z);
крыша(x,y,r,f)<-СЛОЖЕНИЕ(r,10,y),СЛОЖЕНИЕ(x,20,f),треуг(x,y,r,f);
треуг(x,y,z,t)<-ЛИНИЯ(x,y,t,y,1),ДЕЛЕНИЕ2(x,t,f),угол(x,y,z,t,f);
угол(x,y,z,t,f)<-ЛИНИЯ(x,y,f,z,1),ЛИНИЯ(f,z,t,y,1);
ДЕЛЕНИЕ2(x,t,f)<-СЛОЖЕНИЕ(x,t,r),ДЕЛЕНИЕ(r,2,f);
квадр(x,y,z,t)<-ЛИНИЯ(x,y,x,t,1),ЛИНИЯ(x,y,z,y,1),ч2(x,y,z,t);
ч2(x,y,z,t)<-ЛИНИЯ(x,t,z,t,1),ЛИНИЯ(z,y,z,t,1);
птица(x,y)<-взмах(x,y),птица(x,y);
взмах(x,y)<-вниз(x,y,1),вниз(x,y,0),вверх(x,y,1),вверх(x,y,0);
вниз(x,y,c)<-сдв(x,y,z,t,u,v),ЛИНИЯ(z,y,u,y,1);
вверх(x,y)<-сдв(x,y,z,t,u,v),ЛИНИЯ(x,y,z,t,1),ЛИНИЯ(x,y,u,v,1) ;
сдв(x,y,z,t,u,v)<-сдп(x,y,z,t),сдл(x,y,u,v);
сдп(x,y,z,t)<-СЛОЖЕНИЕ(x,5,z),СЛОЖЕНИЕ(t,5,y);
сдл(x,y,z,t)<-СЛОЖЕНИЕ(z,5,x),СЛОЖЕНИЕ(t,5,y);

?дом(70,110),птица(120,50);

как это решать правильно на прологе -д ? ответ напишите на эл.почту
marina_khv вне форума   Ответить с цитированием
Старый 27.11.2009, 04:33   #8 (permalink)
marina_khv
Новичок
 
Регистрация: 27.11.2009
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

zaj-07@mail.ru
marina_khv вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 01:49.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.