IPB
ЛогинПароль:

> трудная задачка
сообщение
Сообщение #1


Гость






Самая трудная задача, которую вы решили :yes: (а может и нет :no: )?

Сообщение отредактировано: Vika -
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Ну если задачи, то самая сложная - написание реляционной базы данных на Прологе.
В ФМШ была типа курсовой.
Очень сложно было понять как ее устроить ... вот она, золото мое:
Обратите внимание, что сложнейщая база реализуется очень просто на Прологе.. заметьсте, тут почти все правила на диалоги отведены!!!!
На паскале такакя база была бы раз в 10 больше!


Код
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                          ПРОГРАММА КЛУБ                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
retractall(_X):-ВЫП(_X),retract(_X),fail.
retractall(_).
член(Иванов,15,уплачено).
член(Иванов,33,не_уплачено).
член(Хромов,40,не_уплачено).
взнос(_Возраст,рублей(1)):-_Возраст<18.
взнос(_Возраст,рублей(2)):-_Возраст>=18.
пополнить_состав(_Член):-assert(_Член).
выдать_сведения(член(_Фамилия,_Возраст,_Данные_об_уплате)):-
   член(_Фамилия,_Возраст,_Данные_об_уплате),
   взнос(_Возраст,_Сумма),
   ВЫВОД(член(_Фамилия,_Возраст,_Сумма,_Данные_об_уплате)),ПС,
   ЛОЖЬ.
выдать_сведения(_).
сократить_состав(_Член):-retractall(_Член).
запись_об_уплате(член(_Фамилия,_Возраст)):-
   retract(член(_Фамилия,_Возраст,не_уплачено)),
   assert(член(_Фамилия,_Возраст,уплачено)).
установить_счетчик(_Имя,_Начало):-
   retractall(счетчик(_Имя,_)),
   assert(счетчик(_Имя,_Начало)).
увеличить_счетчик(_Имя,_Прирост):-
   retract(счетчик(_Имя,_Значение)),
   _Новое_значение ЕСТЬ _Значение+_Прирост,
   assert(счетчик(_Имя,_Новое_значение)).
сбросить_счетчик(_Имя,_Значение):-
   retract(счетчик(_Имя,_Значение)).
подсчет_членов(член(_Фамилия,_Возраст,_Данные_об_уплате),_):-
   установить_счетчик(число_членов,0),
   член(_Фамилия,_Возраст,_Данные_об_уплате),
   увеличить_счетчик(число_членов,1),
   ЛОЖЬ.
подсчет_членов(_,_Счетчик):-
   сбросить_счетчик(число_членов,_Счетчик).
цикл.
цикл:-цикл.

меню_клуб:-цикл,ОЧИСТИТЬ,ПС,ПС,
     ВЫВОД('              МЕНЮ'),ПС,
     ВЫВОД('1. Сведения о членах клуба.'),ПС,
     ВЫВОД('2. Посчитать количество членов.'),ПС,
     ВЫВОД('3. Добавить запись о члене клуба.'),ПС,
     ВЫВОД('4. Удалить запись члена клуба.'),ПС,
     ВЫВОД('5. Ввод сведений об уплате'),ПС,
     ВЫВОД('6. Удаление неплатильщиков'),ПС,
     ВЫВОД('0. ВЫХОД'),ПС,ПС,
     ВЫВОД('Введите номер пункта меню'),
     ВВОДЦЕЛ(_A),
     обр(_A).
обр(_A):-_A=0,!.
обр(_A):-пункт_меню(_A),ЛОЖЬ.
пункт_меню(1):-ОЧИСТИТЬ,ПС,ВЫВОД('Состав клуба:'),
         ПС,выдать_сведения(_),ПС,ПС,ВЫВОД('Нажмите ввод для возврата в меню'),ВВОДСИМВ(_).
пункт_меню(2):-ОЧИСТИТЬ,ПС,подсчет_членов(член(_,_,_),_Число),
         ВЫВОД('Количество членов клуба = '),
         ВЫВОД(_Число),ПС,ПС,ВЫВОД('Нажмите ввод для возврата в меню'),ВВОДСИМВ(_).
пункт_меню(3):-ОЧИСТИТЬ,ПС,ВЫВОД('Введите данные нового члена клуба'),ПС,
         ВЫВОД('Фамилия'),readatom(_Фамилия),
         ВЫВОД('Возраст'),read(_Возраст),
         ВЫВОД('Отметка об уплате взноса'),readatom(_Данные_об_уплате),
         пополнить_состав(член(_Фамилия,_Возраст,_Данные_об_уплате)),ПС,ПС,
         ВЫВОД('Нажмите ввод для возврата в меню'),ВВОДСИМВ(_).
пункт_меню(4):-ОЧИСТИТЬ,ВЫВОД('удаление записи членства'),ПС,ПС,
         выдать_сведения(_),
         ВЫВОД('Введите фамилию'),ВВОДСИМВ(_Фамилия),
         ВЫВОД('Введите возраст'),ВВОДЦЕЛ(_Возраст),
         retract(член(_Фамилия,_Возраст,_)),ПС,ПС,ВЫВОД('Нажмите ввод для возврата в меню'),ВВОДСИМВ(_).
пункт_меню(5):-ОЧИСТИТЬ,ВЫВОД('Ввод сведений об уплате'),ПС,
         выдать_сведения(_),ПС,ПС,
         ВЫВОД('Введите фамилию'),ВВОДСИМВ(_Фамилия),
         ВЫВОД('Возраст'),ВВОДЦЕЛ(_Возраст),
         retract(член(_Фамилия,_Возраст,_)),
         ВЫВОД('Данные_об_уплате'),ВВОДСИМВ(_Данные_об_уплате),
         assert(член(_Фамилия,_Возраст,_Данные_об_уплате)),!.
пункт_меню(6):-ОЧИСТИТЬ,ВЫВОД('Удаление неплатильщиков'),ПС,
         retractall(член(_,_,не_уплачено)),ПС,ВЫВОД('Неплатильщики удалены!'),ПС,ПС,
         ВЫВОД('Нажмите ввод для возврата в меню'),ВВОДСИМВ(_).
                 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%            

%школьник(_фамилия,_математика,_физика,_информатика).


меню_классный_журнал:-цикл,ОЧИСТИТЬ,ПС,ПС,
     ВЫВОД('         МЕНЮ: КЛАССНЫЙ ЖКРНАЛ'),ПС,
     ВЫВОД('1. Сведения о сдачи экзаменов за первое полугодие.'),ПС,
     ВЫВОД('2. Добавить\изменить сведения о сдачи экзаменов.'),ПС,
     ВЫВОД('3. Отчислить неуспевающих.'),ПС,
     ВЫВОД('4. Отчислить ученика'),ПС,
     ВЫВОД('5. Отчислить всех'),ПС,
     ВЫВОД('6. Добавить нового ученика'),ПС,
     ВЫВОД('7. Изменить сведения о сдачи для всех'),ПС,
     ВЫВОД('0. ВЫХОД'),ПС,ПС,
     ВЫВОД('Введите номер пункта меню'),
     ВВОДЦЕЛ(_Х),
     обработать_к(_Х).
обработать_к(0):-!.
обработать_к(_Х):-пункт_к(_Х),ЛОЖЬ.
сведения_о_сдачи(школьник(_фамилия,_мат,_физ,_инф)):-
     школьник(_фамилия,_мат,_физ,_инф),ВЫВОД(_фамилия),ПРОБЕЛЫ(1),
     ВЫВОД('МАТЕМАТИКА: '),ВЫВОД(_мат),ПРОБЕЛЫ(1),
     ВЫВОД(' ФИЗИКА: '),ВЫВОД(_физ),ПРОБЕЛЫ(1),
     ВЫВОД(' ИНФОРМАТИКА: '),ВЫВОД(_инф),ПС,ЛОЖЬ.
сведения_о_сдачи(_).

сдача_мат(школьник(_фам,_м,_ф,_и)):-retract(школьник(_фам,не_сдал,_,_)),assert(школьник(_фам,сдал,_,_)).
сдача_физ(школьник(_фам,_м,_ф,_и)):-retract(школьник(_фам,_,не_сдал,_)),assert(школьник(_фам,_,сдал,_)).
сдача_инф(школьник(_фам,_м,_ф,_и)):-retract(школьник(_фам,_,_,не_сдал)),assert(школьник(_фам,_,_,сдал)).
сдача_д(школьник(_фам,_м,_ф,_и)):-сдача_мат(школьник(_фам,_м,_ф,_и)),сдача_физ(школьник(_фам,_м,_ф,_и)),сдача_инф(школьник(_фам,_м,_ф,_и)).

отчисление_неусп(школьник(_фам,_м,_ф,_и)):-_м=не_сдал;(_ф=не_сдал);(_и=не_сдал),удалить(школьник(_фам,_м,_ф,_и)).

отчислить(школьник(_ф,_,_,_)):-школьник(_ф,_,_,_),retract(школьник(_ф,_,_,_)).

отчислить_всех(_ч):-retractall(школьник(_,_,_,_)).      

добавить(школьник(_фамилия,_м,_ф,_и)):-assert(школьник(_фамилия,_м,_ф,_и)).



удалить(_Ч):-retract(_Ч).


пункт_к(1):-ОЧИСТИТЬ,ПС,ВЫВОД('Сведения о сдачи экзаменов'),
         ПС,сведения_о_сдачи(_),ПС,ПС,ВЫВОД('нажмите ввод для возврата в меню'),ВВОДСИМВ(_).
пункт_к(2):-ОЧИСТИТЬ,ПС,ВЫВОД('Добавить сведения о сдачи'),ПС,ВЫВОД('Фамилия:'), ВВОДСИМВ(_фам),ПС,
         ВЫВОД('Математика:'),ВВОДСИМВ(_мат),ВЫВОД('Физика'),ВВОДСИМВ(_физ),ВЫВОД('Информатика'),ВВОДСИМВ(_инф),
         удалить(школьник(_фам,_,_,_)),assert(школьник(_фам,_мат,_физ,_инф)),ВЫВОД('Изменения внесены для продолжения нажмите ввод'),ВВОДСИМВ(_С).
         
пункт_к(3):-ОЧИСТИТЬ,ПС,ВЫВОД('Неуспевающие отчисляются...'),ПС,
         отчисление_неусп(_),ВЫВОД('неуспевающий отчислен!, нажмите ввод'),ВВОДСИМВ(_С).
пункт_к(4):-ОЧИСТИТЬ,ВЫВОД('Введите фамилию:'),ВВОДСИМВ(_фам),удалить(школьник(_фам,_,_,_)),
         ВЫВОД('Ученик отчислен,нажмите ввод для возвращения в меню'),ВВОДСИМВ(_В).
пункт_к(5):-ОЧИСТИТЬ,ВЫВОД('Отчисляю...'),ПС,отчислить_всех(_),ВЫВОД(' все отчисленны, нажмите ввод для вывода в меню '),ВВОДСИМВ(_А).  
пункт_к(6):-ВЫВОД('Введите фамилию'),ВВОДСИМВ(_фам),ВЫВОД('Введите сведения о сдачи экзаменов'),ПС,
         ВЫВОД('Математика'),ВВОДСИМВ(_м),ВЫВОД('Физика'),ВВОДСИМВ(_ф),
         ВЫВОД('Информатика'),ВВОДСИМВ(_и),assert(школьник(_фам,_м,_ф,_и)),ВЫВОД('Сведения внесены,нажмите ввод.'),ВВОДСИМВ(_).
пункт_к(7):-ВЫВОД('Введите предмет'),ПС,ВЫВОД('Формат ввода: мат физ инф'),ПС,ВЫВОД('предмет='),ВВОДСИМВ(_предмет),
           ПС,ВЫВОД('введите результат сдачи сдал или не_сдал'),ВВОДСИМВ(_изм),изм_сдач(_предмет,_изм).
удалить(_Х):-retract(_Х).
дабавить(_Х):-assert(_Х).            
изм_сдач(мат,_изм):-удалить(школьник(_фа,_м,_ф,_и)),добавить(школьник(_фа,_м,_ф,_и)),ЛОЖЬ.
пункт_к(_Ф):-ВЫВОД('ТАКОГО ПУНКТА НЕТ!'),ПС,!.

%?-меню_клуб.
?-меню_классный_журнал.                  


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Vika   трудная задачка   20.10.2004 19:28
APAL   Жениться или нет... решил в положительную сторону…   20.10.2004 19:32
Amro   Труднейшая задача :) :)   20.10.2004 19:35
Vika   да, с определение куда податься и кем быть после ш…   20.10.2004 19:35
Amro   Видать ума у них не "палата"!!…   20.10.2004 19:38
Vika   у меня есть свое мнение :(   20.10.2004 19:40
Amro   Значит у тебя строгие или целенаправленные родител…   20.10.2004 19:42
Vika   я вообще хотела идти на экономиста. но мама настоя…   20.10.2004 19:50
Amro   Мне в принципе тоже нравится учится в своём универ…   20.10.2004 20:25
APAL   И вот эта девушка: http://pascal.net.ru/forum/inde…   20.10.2004 20:28
Amro   APAL И не говори, видать не хочет!!!…   20.10.2004 20:30
GoodWind   а я с 6-7 класса знал, что буду программистом, бо…   20.10.2004 20:43
Shadow   а Я решил нет наверное пока -- :no:   20.10.2004 21:11
Altair   есть ли смысл жить, если есть, то зачем... Это са…   20.10.2004 22:30
Werwolf86   не буду говорить....их много   21.10.2004 2:37
Vika   я думала, что будет обсуждение программ , а все ка…   21.10.2004 14:43
Altair   Ну если задачи, то самая сложная - написание реляц…   21.10.2004 15:08


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.05.2024 8:43
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name