Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2015, 15:29   #1
GetBit
Новичок
Джуниор
 
Регистрация: 14.05.2015
Сообщений: 3
По умолчанию Расписание поездов на SWI Prolog(e)

Ребят помогите написать код на SWI Prolog(e) буду очень благодарен
GetBit вне форума Ответить с цитированием
Старый 14.05.2015, 17:32   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Это:
Цитата:
Задание:

Создайте базу данных с расписанием движения поездов:

номер поезда
пункт назначения
время отправления
время прибытия


*Найдите номер и время отправления ближайшего поезда до Москвы. Текущее время вводится с клавиатуры.


Условия:

Начальная база данных должна храниться в файле. В программе должно присутствовать меню с пунктами:

просмотр базы данных
добавление записи
удаление записи
запрос к базе данных по заданию (пункт выше со *)
выход

После завершения работы программы, все выполненные изменения базы должны сохраняться в файле базы данных.
? - задание я нашел в гугле, там же есть решение (на Visual Prolog).
Что именно не получается?
rrrFer вне форума Ответить с цитированием
Старый 14.05.2015, 18:08   #3
GetBit
Новичок
Джуниор
 
Регистрация: 14.05.2015
Сообщений: 3
По умолчанию 1

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Это:

? - задание я нашел в гугле, там же есть решение (на Visual Prolog).
Что именно не получается?

да мне надо на SWI Prolog(e)
GetBit вне форума Ответить с цитированием
Старый 14.05.2015, 19:40   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Переделайте под себя... Когда-то давно делал несколько программ на SWI-Prolog.
Вот одна из них. Расписание поездов не могу найти, давно это было
Код:
/* Запуск программы */
run:-
     retractall(iron/3),
     consult('db.txt'),
     menu.

/* Формирование меню */
menu:-

      repeat,
          write('-----------------------'),nl,nl,
      write('База данных о металлах'),nl,nl,
      write('1–Просмотр базы'),nl,
      write('2–Добавить новый вид металла'),nl,
      write('3-Удалить вид металла'),nl,
      write('4-Сохранить базу в файл'),nl,
      write('5-Поиск металла с минимальной удельной проводимостью'),nl,
      write('6–Выход'),nl,
          write('--------------------------------'),nl,
      write('Выберите пункт меню: (1-6) '),
      read(X),
      X<7,
      process(X),
      X=6,!.

process(1):-view_iron.
process(2):-add_iron,!.
process(3):-remove_iron,!.
process(4):-db_save_iron,!.
process(5):-find_iron,!.
process(6):-retractall(iron/3),!.

/* Чтение файла и просмотр базы данных */
view_iron:-
                iron(Iron,Provod,Price),
                write('Наименование металла: '), write(Iron),nl,
                write('Удельная проводимость металла: '), write(Provod),nl,
                write('Стоимость металла: '), write(Price),nl,
                write('-------------------------------'),nl.

/* Добавление вида металла*/
add_iron:-
        write('Добавить металл:'),nl,nl,
        repeat,
        write('Наименование металла: '),
        read(Iron),
        write('Удельная проводимость металла: '),
        read(Provod),
        write('Стоимость металла: '),
        read(Price),
        assertz(iron(Iron,Provod,Price)),
        quest,!.

quest:-
       write('Ввести еще один вид металла? y/n '),
       read(A),
       answer(A).

answer(_):-fail.
answer(y):-fail.
answer(n).

/* Сохранение динамической БД в файл */
db_save_iron:-
        tell('db.txt'),
        listing(iron),
        told,
        write('Файл базы дынных db.txt сохранен!').

/* Удаление вида металла*/
remove_iron:-
           write('Удаление вида металла'),nl,nl,
           write('Введите вид металла: '),
           read(Iron),
           retract(iron(Iron,_,_)),
           write('Вид удален!'),nl,nl.

/* Поиск металла по условию */
find_iron:-
           findall(Provod,iron(Iron,Provod,Price),Sp),
           min(Sp,Rezult),
           iron(Iron,Provod,Price),
           Provod = Rezult,
           write('Наименование металла: '), write(Iron),nl,
           write('Удельная проводимость металла: '), write(Provod),nl,
           write('Стоимость металла: '), write(Price),nl,
           write('-------------------------------'),nl,
           fail.

/* Поиск минимального элемента */
min([Head|Tail],Rezult):-
                         min(Tail,Rezult),
                         Rezult < Head,!.
min([Head|_],Head).
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 15.05.2015, 22:01   #5
GetBit
Новичок
Джуниор
 
Регистрация: 14.05.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Переделайте под себя... Когда-то давно делал несколько программ на SWI-Prolog.
Вот одна из них. Расписание поездов не могу найти, давно это было
Код:
/* Запуск программы */
run:-
     retractall(iron/3),
     consult('db.txt'),
     menu.

/* Формирование меню */
menu:-

      repeat,
          write('-----------------------'),nl,nl,
      write('База данных о металлах'),nl,nl,
      write('1–Просмотр базы'),nl,
      write('2–Добавить новый вид металла'),nl,
      write('3-Удалить вид металла'),nl,
      write('4-Сохранить базу в файл'),nl,
      write('5-Поиск металла с минимальной удельной проводимостью'),nl,
      write('6–Выход'),nl,
          write('--------------------------------'),nl,
      write('Выберите пункт меню: (1-6) '),
      read(X),
      X<7,
      process(X),
      X=6,!.

process(1):-view_iron.
process(2):-add_iron,!.
process(3):-remove_iron,!.
process(4):-db_save_iron,!.
process(5):-find_iron,!.
process(6):-retractall(iron/3),!.

/* Чтение файла и просмотр базы данных */
view_iron:-
                iron(Iron,Provod,Price),
                write('Наименование металла: '), write(Iron),nl,
                write('Удельная проводимость металла: '), write(Provod),nl,
                write('Стоимость металла: '), write(Price),nl,
                write('-------------------------------'),nl.

/* Добавление вида металла*/
add_iron:-
        write('Добавить металл:'),nl,nl,
        repeat,
        write('Наименование металла: '),
        read(Iron),
        write('Удельная проводимость металла: '),
        read(Provod),
        write('Стоимость металла: '),
        read(Price),
        assertz(iron(Iron,Provod,Price)),
        quest,!.

quest:-
       write('Ввести еще один вид металла? y/n '),
       read(A),
       answer(A).

answer(_):-fail.
answer(y):-fail.
answer(n).

/* Сохранение динамической БД в файл */
db_save_iron:-
        tell('db.txt'),
        listing(iron),
        told,
        write('Файл базы дынных db.txt сохранен!').

/* Удаление вида металла*/
remove_iron:-
           write('Удаление вида металла'),nl,nl,
           write('Введите вид металла: '),
           read(Iron),
           retract(iron(Iron,_,_)),
           write('Вид удален!'),nl,nl.

/* Поиск металла по условию */
find_iron:-
           findall(Provod,iron(Iron,Provod,Price),Sp),
           min(Sp,Rezult),
           iron(Iron,Provod,Price),
           Provod = Rezult,
           write('Наименование металла: '), write(Iron),nl,
           write('Удельная проводимость металла: '), write(Provod),nl,
           write('Стоимость металла: '), write(Price),nl,
           write('-------------------------------'),nl,
           fail.

/* Поиск минимального элемента */
min([Head|Tail],Rezult):-
                         min(Tail,Rezult),
                         Rezult < Head,!.
min([Head|_],Head).


Отпишитесь в скайп мне пожалуйста))я вас добавил))
GetBit вне форума Ответить с цитированием
Старый 17.05.2015, 09:26   #6
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

У меня Skype поменялся
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 26.03.2018, 00:34   #7
nataliii1245
Новичок
Джуниор
 
Регистрация: 26.03.2018
Сообщений: 1
По умолчанию

Доброго времени суток. Столкнулась со следующей проблемой: необходимо выбрать из динамической базы данных объект по нескольким ключевым полям. По одному - реализовала вот так:
Код:
find_telephone_special:-
    readProducer(Producer),readType(Type),readOS(OS),readPrice(Price),
    findall([Producer,Type,OS,Price], telephone(Name,Producer,Type,OS,Price), tmp),
    find_with_param(tmp,Result),
    telephone(Name,Producer,Type,OS,Price),
           write('Модель: '), write(Name),nl,
           write('Производитель: '), write(Producer),nl,
           write('Тип: '), write(Type),nl,
           write('Операционная система: '), write(OS),nl,
           write('Стоимость: '), write(Price),nl
           write('-------------------------------'),nl,
           fail.
min([Head|Tail],Result):- min(Tail,Result), Result < Head,!.
min([Head|_],Head).
По нескольким попыталась, но не могу доделать:
Код:
find_telephone_special:-
    readProducer(Producer),readType(Type),readOS(OS),readPrice(Price),
    findall([Producer,Type,OS,Price], telephone(Name,Producer,Type,OS,Price), tmp),
    telephone(Name,Producer,Type,OS,Price),
           write('Модель: '), write(Name),nl,
           write('Производитель: '), write(Producer),nl,
           write('Тип: '), write(Type),nl,
           write('Операционная система: '), write(OS),nl,
           write('Стоимость: '), write(Price),nl
           write('-------------------------------'),nl,
           fail.

readProducer(Producer):-
    write('Приступим?'), nl,
    write('Введите номер, соответствующий желаемому производителю:'), nl,
    write('1.Apple'), nl,
    write('2.Samsung'), nl,
    write('3.Xiaomi'), nl, nl,
    read(Avalue),
    checkA(Avalue, Producer).

readType(Type):-
    write('Введите номер, соответствующий типу желаемого аппарата:'), nl,
    write('1.Смартфон'), nl,
    write('2.Телефон'), nl,nl,
    read(Bvalue),
    checkB(Bvalue, Type).

readOS(OS):-
    write('Введите номер, соответствующий типу операционной системы:'), nl,
    write('1.iOS'), nl,
    write('2.Android'), nl,
    read(Cvalue),
    checkC(Cvalue, OS).

readPrice(Price):-
    write('Введите номер, соответствующий желаемому цене:'), nl,
    write('1.15000'), nl,
    write('2.40000'), nl,
    write('3.70000'), nl,
    read(Dvalue),
    checkD(Dvalue, Price).

checkA(1, "Apple" ).
checkA(2,  "Samsung" ).
checkA(3, "Xiaomi").

checkB(1, "Смартфон").
checkB(2, "Телефон").

checkC(1, "iOS").
checkC(2, "Android").

checkD(1, 15000).
checkD(2, 40000).
checkD(3, 70000).
Подскажите, пожалуйста, как доделать этот небольшой пример?

Последний раз редактировалось nataliii1245; 26.03.2018 в 00:37.
nataliii1245 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[SWI-Prolog] Создание списков Harbinger Помощь студентам 1 13.04.2015 14:20
swi prolog помогите 2 задачки OrdeR Помощь студентам 1 29.10.2013 06:03
Програмирование в SWI-Prolog Лина_Чер Помощь студентам 0 28.01.2013 20:18
Расписание поездов agent007 ASP.NET 5 11.12.2011 21:33
Расписание движения поездов. KORT БД в Delphi 3 17.09.2007 14:01