Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу географический справочник
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Evgesha1989 Evgesha1989 вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2009
По умолчанию 03.12.2009, 15:25

нужно сделать так, чтобы при вводе КОНТИНЕНТА выводились все страны этого континента! вроде как предикат написать, только что-то совсем идей нет!

Код:
DOMAINS
kontinent, strana=String
file=f

DATABASE
geografi(kontinent,strana)

PREDICATES
kont_stran(kontinent,strana)
stran_kont(kontinent,strana)
m(char)
menu
start
print_all

CLAUSES
kont_stran(Kontinent,Strana):-
    geografi(Kontinent,Strana),!.
kont_stran(_,"Net informacii o nazvanii strani").
stran_kont(Kontinent,Strana):-
    geografi(Kontinent,Strana).
stran_kont("Net informacii o nazvanii kontinenta",_).

print_all:-
    geografi(Kontinent,Strana),
    write(Kontinent, "-",Strana),nl,
    fail.
print_all.

menu:-
    clearwindow,
    write("1-получение страны по названию континента"),nl,
    write("2-получение континента по названию страны"),nl,
    write("3-добавление новой записи"),nl,
    write("4-изменение названия страны"),nl,
    write("5-удаление записи из справочника "),nl,
    write("6-вывести географический справочник"),nl,
    write("0-выйти"),nl,
    readchar©,
m©.

m('1'):-
    clearwindow,
    write("введите континент"),nl,
    readln(Kontinent),
    stran_stolic(Kontinent,Strana),
    write("Название страны:",Strana),
    readchar(_),
    menu.
m('2'):-
    clearwindow,
    write("Введите название страны"),nl,
    readln(Strana),
    stolic_stran(Kontinent,Strana),
    write("Название континента:",Kontinent),
    readchar(_),
    menu.
m('3'):-
    clearwindow,
    write("введите название континента"),nl,
    readln(Kontinent),
    write("Введите страну:"),nl,
    readln(Strana),
    assert(geografi(Kontinent,Strana)),
    menu.
m('4'):-
    clearwindow,
    write("Введите континент"),nl,
    readln(Kontinent),
    write("Введите новое название страны:"),nl,
    readln(Strana),
    retract(geografi(Kontinent,_)),
    assert(geografi(Kontinent,Strana)),
    menu.
m('5'):-
    clearwindow,
    write("Укажите страну, которую нужно удалить"),nl,
    readln(Strana),
    retract(geografi(_,Strana)),
    menu.
m('6'):-
    clearwindow,
    print_all,
    readchar(_),
    menu.



m('0'):-
    clearwindow,
    save("geograf_spravka.ddb"),
    retractall(_).
m(_):-
    menu.
    
start:-
    existfile("geograf_spravka.ddb"),!,
    consult("geograf_spravka.ddb"),
    menu.
start:-
    openwrite(f,"geograf_spravka.ddb"),
    closefile(f),
    menu.
GOAL
Start
Ответить с цитированием
  (#2 (permalink)) Старый
aag aag вне форума
А.А.Г.
 
Аватар для aag
 
Сообщений: 3,369
Сказал(а) спасибо: 0
Поблагодарили 81 раз(а) в 81 сообщениях
Регистрация: 29.11.2008
Адрес: Адмиралтейская)))
По умолчанию 03.12.2009, 16:08

Цитата:
нужно сделать так, чтобы при вводе КОНТИНЕНТА выводились все страны этого континента! вроде как предикат написать, только что-то совсем идей нет!
что нибудь такое:
Код:
findall(Str,geografi(КОНТИНЕНТ,Str),List)
и в List соберёт все страны заданного КОНТИНЕНТа. А дальше там сортировать или ещё чего по желанию...
Ответить с цитированием
  (#3 (permalink)) Старый
Evgesha1989 Evgesha1989 вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2009
По умолчанию 03.12.2009, 18:23

нууу... это не совсем то! надо чтоб у предиката был 1 параметр, типа kont(kontinent). и при выводе цели нажимая на 1 вводим название континента и получаем весь список!
Ответить с цитированием
  (#4 (permalink)) Старый
aag aag вне форума
А.А.Г.
 
Аватар для aag
 
Сообщений: 3,369
Сказал(а) спасибо: 0
Поблагодарили 81 раз(а) в 81 сообщениях
Регистрация: 29.11.2008
Адрес: Адмиралтейская)))
По умолчанию 03.12.2009, 18:32

Цитата:
нууу... это не совсем то! надо чтоб у предиката был 1 параметр, типа kont(kontinent). и при выводе цели нажимая на 1 вводим название континента и получаем весь список!
Код:
findall(Str,geografi(КОНТИНЕНТ,Str),List)
у этой штуки ровно один вход:КОНТИНЕНТ, и один выход: List тот самый список, который надо получить...
Ответить с цитированием
  (#5 (permalink)) Старый
Evgesha1989 Evgesha1989 вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2009
По умолчанию 03.12.2009, 18:40

хм... ну тогда наверное совсем глупый вопрос...) можно фрагмент проги куда эту самую штуку надо вставить)
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
aag aag вне форума
А.А.Г.
 
Аватар для aag
 
Сообщений: 3,369
Сказал(а) спасибо: 0
Поблагодарили 81 раз(а) в 81 сообщениях
Регистрация: 29.11.2008
Адрес: Адмиралтейская)))
По умолчанию 03.12.2009, 18:43

Цитата:
хм... ну тогда наверное совсем глупый вопрос...) можно фрагмент проги куда эту самую штуку надо вставить)
Код:
....readln(Kontinent), findall(X,geografi(Kontinent,X),List), write(List)....
Вы попробуйте ручками с findall() на вашей базе поиграться...
Ответить с цитированием
  (#7 (permalink)) Старый
Evgesha1989 Evgesha1989 вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2009
По умолчанию 03.12.2009, 19:21

что-то не находит он мне весь список...((
Ответить с цитированием
  (#8 (permalink)) Старый
aag aag вне форума
А.А.Г.
 
Аватар для aag
 
Сообщений: 3,369
Сказал(а) спасибо: 0
Поблагодарили 81 раз(а) в 81 сообщениях
Регистрация: 29.11.2008
Адрес: Адмиралтейская)))
По умолчанию 03.12.2009, 20:11

Цитата:
что-то не находит он мне весь список...((
Давайте Вашу базу...
Ответить с цитированием
  (#9 (permalink)) Старый
Evgesha1989 Evgesha1989 вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2009
По умолчанию 04.12.2009, 16:45

ну так это и есть моя база...
Ответить с цитированием
  (#10 (permalink)) Старый
aag aag вне форума
А.А.Г.
 
Аватар для aag
 
Сообщений: 3,369
Сказал(а) спасибо: 0
Поблагодарили 81 раз(а) в 81 сообщениях
Регистрация: 29.11.2008
Адрес: Адмиралтейская)))
По умолчанию 04.12.2009, 21:52

Цитата:
ну так это и есть моя база...
Хорошо, я, наверное, не совсем точно выразился: давайте факты Вашей базы, которые, судя по проге, залегают в файле geograf_spravka.ddb...
Ответить с цитированием
  (#11 (permalink)) Старый
Evgesha1989 Evgesha1989 вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2009
По умолчанию 05.12.2009, 19:40

ну это просто типо как название базы! в ней нет фактов никаких. заполнение ведется просто вводом инфы при нажатии тройки когда цель выводим!
Ответить с цитированием
  (#12 (permalink)) Старый
aag aag вне форума
А.А.Г.
 
Аватар для aag
 
Сообщений: 3,369
Сказал(а) спасибо: 0
Поблагодарили 81 раз(а) в 81 сообщениях
Регистрация: 29.11.2008
Адрес: Адмиралтейская)))
По умолчанию 05.12.2009, 22:34

Цитата:
ну это просто типо как название базы! в ней нет фактов никаких. заполнение ведется просто вводом инфы при нажатии тройки когда цель выводим!
Дык понажимайте свою "тройку", а потом пошепчемся о findall() :roll:
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
Evgesha1989 Evgesha1989 вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2009
По умолчанию 06.12.2009, 13:14

хм... ну в общем это выглядит так:

Код:
"введите континент"
Евразия
"введите страну"
Россия
"введите континент"
Евразия
"введите страну"
Германия
"введите континент"
Евразия
"введите страну"
Франция
"введите континент"
Евразия
"введите страну"
Китай
ну и т.д. Соответственно 3 нажимаем каждый раз при вводе страны!
Ответить с цитированием
  (#14 (permalink)) Старый
aag aag вне форума
А.А.Г.
 
Аватар для aag
 
Сообщений: 3,369
Сказал(а) спасибо: 0
Поблагодарили 81 раз(а) в 81 сообщениях
Регистрация: 29.11.2008
Адрес: Адмиралтейская)))
По умолчанию 06.12.2009, 22:24

Другими словами: набейте ручками в отдельном файле geografi(Kontinent,Strana). Получатся факты безотносительные к нажиманию тройки. Затем на этих фактах методом проб и ошибок ознакомтесь с предикатом findall()...
Ответить с цитированием
  (#15 (permalink)) Старый
Evgesha1989 Evgesha1989 вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2009
По умолчанию 07.12.2009, 18:57

хм... ну ввела я в отдельном файле факты... все равно не ищет! точнее находит до первого совпадения!
Ответить с цитированием
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись: справочник покупателя!!! glebochek Pascal 0 01.04.2012 14:05
Как создать телефонный справочник volkodaw Pascal 0 30.05.2011 15:39
Написать программу, реализующую географический справочник gem Prolog 0 18.04.2011 15:05
Русский справочник по Lisp где найти igsavenko Lisp 2 28.01.2010 22:11
Двоичный справочник GSR Prolog 1 28.05.2007 17:05
географический справочник mel Prolog 2 24.04.2007 21:54
Телефонный справочник Slimy Prolog 1 28.11.2006 22:12
Где скачать справочник по WinAPI для C++ Desolator Visual C++ 3 07.05.2006 12:44
Справочник по внутренним константам PowerCat Visual Basic 3 10.02.2006 21:34
Где взять подробный справочник по WIN API imported_TIK WinAPI 6 14.10.2005 01:56
Справочник РНР Sergey24 PHP 1 08.01.2003 14:10
Справочник по командам процессора ortho Assembler 2 22.07.2002 16:29



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов