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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2013, 20:38   #1
*Надежда*
Пользователь
 
Регистрация: 20.11.2012
Сообщений: 12
Вопрос Экспертная система на С++

Добрый день! У меня такая проблема: нужно написать простенькую экспертную систему на С++ (чтобы пользователю задавались вопросы, были варианты ответов, а в конце выдавался отсортированный результат), а я совсем не представляю что и как делать просто так грустно вышло, что преподаватель ничего абсолютно не объясняет и помочь некому. Так вот, может кто-то сталкивался с этим, есть примеры таких систем, исходники какие-то простые, чтобы понять что к чему? Заранее огромное спасибо, если кто откликнется!
*Надежда* вне форума Ответить с цитированием
Старый 14.09.2013, 21:05   #2
kventin_zhuk
БНТУ ФИТР
Форумчанин
 
Аватар для kventin_zhuk
 
Регистрация: 20.05.2012
Сообщений: 315
По умолчанию

Типо теста, если я так понял? Можно например записать в файл последовательно информацию с вопросами + ответ. Это все дело считывать и выдавать количество правильных ответов.
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты
kventin_zhuk@live.com
kventin_zhuk вне форума Ответить с цитированием
Старый 14.09.2013, 21:20   #3
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Когда я учился у меня весьма погано читали вот этот предмет про экспертные системы. Я ниче не понял. Мы ЭС писали на прологе (писали на прологе CGI и вкручивали это на сайты xD). Я что-то написал. оно работало, дополнялось, но я ниче не помню.

На прологе мы писали наверное потому что ЭС нужна база данных, а на прологе с базами очень удобно работать. Если ты будешь писать на С++, я думаю тебе SQL придеца использовать.

База нужна потому, что ЭС по определению должна улучшаться со временем (если она работает плохо - эксперт добавляет в БД какие-то факты и она работает лучше. Либо ЭС улучшается сама, но это сильно круто и ненадежно {кто попало туда че попало добавляет}).

Был еще такой предмет "теория принятия решений", из него тоже мало что помню, но были там "деревья принятия решений", я думаю что очень примитивную ЭС проще всего бахнуть именно на них. Посмотри что это такое, у тебя будут узлы дерева и дуги.
Узлы соответствуют вопросам, а дуги - возможным ответам на вопрос, соовтетвующий узлу из которого они выходят.

Каждый узел имеет вероятность (или несколько).
Т.е. допустим ЭС должна предсказывать болезни (пусть насморк, ветрянка и геморрой). Первым вопросом может быть "что болит?" каждый ответ дуга(будет вести к узлу, содержащему 3 вероятности для каждой из болезней).
Затем могут быть уточняющие вопросы и т.п.

Можно и без базы обойтись, хранить все в каком нить массиве, но обновлять неудобно будет.
rrrFer вне форума Ответить с цитированием
Старый 14.09.2013, 22:13   #4
Vladiger
Пользователь
 
Регистрация: 31.08.2013
Сообщений: 93
По умолчанию

Эдакий примитивный пример, без всяких баз и файлов. Типа детской игрушки, экзаменационных билетов...

Код:
#include <iostream>

using namespace std;

struct QuestionNode {
	char Title[128];
	char Answer[5][64];
	int AnswerValid;
};

QuestionNode Quest[] = {
	"Название нашей планеты?", // Вопрос 1
	{ "1. Юпитер", "2. Венера", "3. Земля", "4. Марс", "5. Сатурн" }, // Варианты ответов
	3, // Правильный ответ

	"Название столицы Голландии?", // Вопрос 2
	{ "1. Токио", "2. Амстердам", "3. Москва", "4. Пекин", "5. Будапешт" }, // Варианты ответов
	2,

	"Имя великого композитора Чайковского?", // Вопрос 3
	{ "1. Александр", "2. Вольфган", "3. Эдгар", "4. Петр", "5. Иван" }, // Варианты ответов
	4, // Правильный ответ

	"Количество дней в году?", // Вопрос 3
	{ "360", "365", "370", "375", "380" }, // Варианты ответов
	365, // Правильный ответ

	"Дата начала Великой Отечественной войны?", // Вопрос 3
	{ "1. 15 Сентября 1907 г.", "2. 21 Апреля 1912 г.", "3. 22 Июня 1941 г.", "4. 7 Октября 1953 г.", "5. 12 Апреля 1961 г." }, // Варианты ответов
	3 // Правильный ответ
};

int main() {
	int in;
	int AnswerValid = 0;
	setlocale(LC_ALL, "Rus");

	for(int i = 0; i < sizeof(Quest) / sizeof(QuestionNode); i++) {
		system("CLS");
		cout << Quest[i].Title << endl;
		for(int c = 0; c < 5; c++) {
			if (strlen(Quest[i].Answer[c]) > 0) cout << Quest[i].Answer[c] << endl;
		}
		cout << endl;
		cin >> in;
		if (in == Quest[i].AnswerValid) AnswerValid++;
	}
	system("CLS");
	cout << "У вас " << AnswerValid << " правильных ответов." << endl;
	system("PAUSE");
	return 0;
}

Последний раз редактировалось Vladiger; 15.09.2013 в 00:35.
Vladiger вне форума Ответить с цитированием
Старый 15.09.2013, 08:01   #5
*Надежда*
Пользователь
 
Регистрация: 20.11.2012
Сообщений: 12
По умолчанию

Спасибо вам, но это не совсем должен быть тест. Т.е. пользователю задаются вопросы, например с симптомами болезни, а в конце выводятся заболевания отсортированные в соответствии с ответами пользователя. ( ну или пример выбора машины, телефона, вуза и т.д.) Чувствую, что не написать мне это все
*Надежда* вне форума Ответить с цитированием
Старый 15.09.2013, 08:35   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Б. Сойер, Д. Фостер "Программирование экспертных систем на Паскале";
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспертная система Rusica PHP 2 24.09.2012 13:48
экспертная система oleg_pobeda 55 Помощь студентам 0 25.07.2012 22:49
Экспертная система Lazio Фриланс 1 16.05.2012 14:58
Система принятия решения (Экспертная система) daranton Microsoft Office Excel 4 01.05.2010 17:55
Экспертная система TheX3 Помощь студентам 2 01.04.2009 18:20