![]() |
|
|
![]()
|
|
| lais |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 18.2.2011 Репутация: нет Всего: нет |
Привет всем, предоставляю вашему вниманию решенную задачу на прологе, текст задачи
В конструкторском бюро работает от 10 до 15 инженеров, каждый характеризуется персональными данными: фамилия, имя, должность (инженер, старший инженер, конструктор), учёная степень (без степени, кандидат наук, доктор наук). Конструкторы первые 6 месяцев года работают в институте, остальное время в бюро. Старшие инженеры в институте работают только в зимнее календарное время, остальное время в бюро. Инженеры в бюро работают только зимнее и летнее календарное время, остальное время в институте. Оплата в институте составляет: 250 ед. для инженера, 300 ед. для старшего инженера и 500 ед. для конструктора. В бюро оплата меньше на 15% для инженеров всех должностей кроме докторов наук. Создать программу, которая будет отвечать на следующие вопросы: 1. По указанному номеру месяца вывести список сотрудников с персональными данными и местом работы. 2. Вывести список докторов или кандидатов наук, которые работают в должности инженера. 3. Для заданного сотрудника и заданного месяца определить его оплату. Вот как выглядит программа написанная на visual Prolog, она эффективнее работает чем на Strawberry domains famil,dolzn,stepen=symbol predicates сотрудник(famil,dolzn,stepen) место_работы(symbol,dolzn,integer) кто_где_когда(integer) время(symbol,integer) степ_инженер(famil) справ(dolzn,integer) коэф(symbol,stepen,real) оплата(famil,integer,real) clauses сотрудник("Бонин Дмитрий","Инженер","Кандидат"). сотрудник("Вялков Владимир","Конструктор","Без степени"). сотрудник("Ежова Юлия","Старший инженер","Доктор"). сотрудник("Корягин Андрей","Инженер","Без степени"). сотрудник("Царькова Галина","Конструктор","Доктор"). сотрудник("Баранов Вячеслав","Старший инженер","Доктор"). сотрудник("Волкова Ирина","Старший инженер","Кандидат"). сотрудник("Битюрин Алексей","Инженер","Без степени"). сотрудник("Долинская Елена","Конструктор","Кандидат"). сотрудник("Серегин Антон","Конструктор","Кандидат"). сотрудник("Емелин Павел","Инженер","Доктор"). сотрудник("Антонова Ольга","Старший инженер","Без степени"). сотрудник("Самойлов Виктор","Инженер","Кандидат"). сотрудник("Прохорова Людмила","Конструктор","Кандидат"). время("Зима",Мес):-Мес=12;Мес=1;Мес=2. время("Лето",Мес):-Мес>=6,Мес<=8. время("Весна",Мес):-Мес>2,Мес<6. время("Осень",Мес):-Мес>8,Мес<12. место_работы("Институт","Конструктор",Мес):-Мес>=1,Мес<=6,!. место_работы("Бюро","Конструктор",_). место_работы("Институт","Старший инженер",Мес):-время("Зима",Мес),!. место_работы("Бюро","Старший инженер",_). место_работы("Бюро","Инженер",Мес):-время("Зима",Мес). место_работы("Бюро","Инженер",Мес):-время("Лето",Мес),!. место_работы("Институт","Инженер",_). справ(Долж,250):-Долж="Инженер",!. справ(Долж,300):-Долж="Старший инженер",!. справ(Долж,500):-Долж="Конструктор". коэф(_,Степень,1):-Степень="Доктор",!. коэф(Место,_,1):-Место="Институт",!. коэф(_,_,0.85). оплата(Кто,Мес,Оплата):-сотрудник(Кто,Долж,Степень),место_работы(Место,Долж,Мес),коэф(Место,Степень,Коэф),справ(Долж,Зарп),Оплата=Коэф*Зарп. кто_где_когда(Мес):-сотрудник(Фам,Должн,Степ),место_работы(Где,Должн,Мес),write(Фам," "),write(Должн," "),write(Степ," "),write(Где),nl,fail. степ_инженер(Кто):-сотрудник(Кто,"Инженер",Долж),Долж="Кандидат". степ_инженер(Кто):-сотрудник(Кто,"Инженер",Долж),Долж="Доктор". goal %write("Введите номер месяца:"),nl,readint(Мес),кто_где_когда(Мес). %степ_инженер(Кто). write("Введите номер месяца:"),nl,readint(Мес),оплата(Кто,Мес,Оплата). А вот она же, только на Strawberry-это абсолютно другая программа так как их писали 2 разных человека /* ---udalit' pri proverke #1 ?-read(M,"# Mec9tsa",t),rabontiki(A,B,C,D),mesto(C,M,R),write([R,A,B,C,D]),nl,false. */ /* ---udalit' pri proverke #2 ?-rabontiki(A,B,C,D),C="engineer", (D="kandidat nauk";D="doctor nauk"),write([A,B,C,D]),nl,false. */ /* ---udalit' pri proverke #3 ?-read(F,"FaMiliya",s),read(I,"Name",s),read(M,"# Mec9tsa",t),rabontiki(A,B,C,D),A=F,B=I,mesto(C,M,R ),zarplata(C,X), ((R="institut",write(X)); ((R="byro",D="doctor nauk",write(X)); (T is X-X/100*15, write(T)))). zarplata("engineer",250). zarplata("star engineer",300). zarplata("konstruktor",500). */ mesto(C,M,R):-((C="konstruktor",M>6,M=<12); (C="star engineer",M>2,M<12); ( C="engineer", ((M>=6,M=<8);(M=12;M=1;M=2)))->R is "byro" else R is "institut"). ?-read(F,"FaMiliya",s), read(M,"# Mec9tsa",t),rabontiki(A,B,C,D),A=F,mesto(C,M,R),za rplata(C,X), ((R="institut",write(X)); ((R="byro",D="doctor nauk",write(X)); (T is X-X/100*15, write(T)))). zarplata("engineer",250). zarplata("star engineer",300). zarplata("konstruktor",500). rabontiki("Petrov","Ivan","engineer","net"). rabontiki("Sidorov","Petr","engineer","kandidat nauk"). rabontiki("Willson","Sam","engineer","doctor nauk"). rabontiki("Ivanova","Olga","engineer","net"). rabontiki("Kuzmin","Alexander","star engineer","net"). rabontiki("Forman","Eric","star engineer","kandidat nauk"). rabontiki("Korneva","Svetlana","star engineer","kandidat nauk"). rabontiki("Titov","German","star engineer","doctor nauk"). rabontiki("Smirnov","Alexei","konstruktor","kandid at nauk"). rabontiki("Medvedev","Mixa","konstruktor","doctor nauk"). rabontiki("Surkov","Dima","konstruktor","net"). rabontiki("Kulagov","Pasha","konstruktor","doctor nauk"). |
|||
|
||||
![]()
|
| Правила форума Prolog | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Prolog | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |