Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C/С++] Программа "Робот для общения", нужно сдать до конца мая 
:(
    Опции темы
Sibi
Дата 5.5.2009, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Уважаемые программисты. Дали нам в институте такое задание, как указано в теме. Лабораторных ни одной не было. Поэтому я в панике. Прошла начальный курс С++, но ума не приложу как это написать.
Требования такие:
1) Не должно быть ни одного вопроса, который бот оставил бы без ответа.
2)бот не должен ругаться
3)бот сам должен здороваться и задавать вопросы
4) бот должен поддержать беседу на 3 темы (любых).
Может, кто-нибудь сталкивался с таким, я могу изменить готовую прога или дописать. Главное понять принцип написания. Помогите, пожалуйста!!! smile 
PM MAIL   Вверх
neic
Дата 5.5.2009, 19:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: 5
Всего: 7



1) Запихнуть последний заданый вопрос в глобальную переменную (ну или каким-то макаром запомнить)
2) Ну если ты не научишь бота ругаться, то он и не будет
3) При запуске выдавать приветствие. Ждать пока собесеседник ответит и смотреть в глобальную переменную на последний заданный вопрос, там будет пусто, значит задаём любой вопрос.
4) Предусмотреть сценарии разговора.

С чего нужно начать:
Нужно определить, как бот будет обрабатывать сообщение посланные собеседником (кстати как будут предаваться сообщения? На локальном компе или через какой-то проткол?).

Лично я вижу такую реализацию:
При посылке сообщения собеседником, смотреть сначала 100% совпадающее слово (фразу), а если это слово (фраза) не найдена, то резать сообщение на слова (союзы и предлоги наверное нужно будет выкидывать) и фразу, которая больше всего содержит эти слова, нужно будет выбрать.

Также нужно будет предусмотреть синонимы.

Я лишь описал ход моих мыслей, C не знаю так что с кодингом не могу помочь.

П.с. естественно нужно хранить базу со словами (фразами), а также синонимы (или похожие фразы)
PM MAIL WWW ICQ Skype   Вверх
Sibi
Дата 5.5.2009, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Спасибо. Сообщения будут просто вводиться на экране запущенного exe-файла. А как нужно проверять совпадения слов? И как в программе предусмотреть базу?
PM MAIL   Вверх
neic
Дата 5.5.2009, 23:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: 5
Всего: 7



Цитата(Sibi @  5.5.2009,  20:24 Найти цитируемый пост)
А как нужно проверять совпадения слов?


Цитата(neic @  5.5.2009,  19:45 Найти цитируемый пост)
Лично я вижу такую реализацию:
При посылке сообщения собеседником, смотреть сначала 100% совпадающее слово (фразу), а если это слово (фраза) не найдена, то резать сообщение на слова (союзы и предлоги наверное нужно будет выкидывать) и фразу, которая больше всего содержит эти слова, нужно будет выбрать.




Цитата(Sibi @  5.5.2009,  20:24 Найти цитируемый пост)
И как в программе предусмотреть базу? 

Ну тут есть 3 варианта:
1) Вшить ответы в программу
2) Создать текстовой файл
3) Создать БД (SQL)

Из всего перечисленного 2ой пункт наверное самое оптимальное.
PM MAIL WWW ICQ Skype   Вверх
Dmi3ev
Дата 6.5.2009, 00:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 5
Всего: 41



Цитата

2) Создать текстовой файл
3) Создать БД (SQL)

Да именно так, советую юзать БД, удобнее будет, мне кажется...
И начать с того, что создать пустую БД, где будет грубо говоря два поля
вопрос и ответ на него
Если ты при запуске проги вводишь вопрос, а не на него нет ответа, то предложить пользователю ввести ответ на него, так твоя программа будет самообучаться, в следующий раз на этот вопрос она уже ответит...
такая реализация тупая, но, думаю, для того чтобы сдать в инсте хватит и этого...
Можно и с файлом, структуру создать:
Код

struct my_pair
{
char q[256];
char a[256];
};

а потом читать из файла ее в вектор (или еще куда), и записывать в файл, если такой пары вопрос ответ еще нет...
сам выбирай, я бы БД взял... neicу файл по душе... это уже дело твое...


--------------------

PM MAIL   Вверх
Sibi
Дата 6.5.2009, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Спасибо. Я не знаю как БД подключать, поэтому создам файл. А вот в проге написать, чтобы она осуществлял поиск по словам в файле? Подскажите, пожалуйста.
PM MAIL   Вверх
zim22
Дата 6.5.2009, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



Цитата(Sibi @  6.5.2009,  12:44 Найти цитируемый пост)
 А вот в проге написать, чтобы она осуществлял поиск по словам в файле?

Sibi, почитайте какую-нибудь книжечку по С++. 



--------------------
PM MAIL   Вверх
neic
Дата 6.5.2009, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: 5
Всего: 7



Dmi3ev, у меня было 2 критерия выбора в пользу текстового файла:
1) легкость в освоении (не нужно знать про БД)
2) лёгкая расширяемость за счёт других пользователей, т.е. я захотел создал одну базу объединил эту базу с базой другого чела и т.д.

PM MAIL WWW ICQ Skype   Вверх
neic
Дата 6.5.2009, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: 5
Всего: 7



Sibi, можно просто в файле сделать так

Код

вопрос<тут разделитель>ответ


Например:
Это ты?::Да, это я.

:: - разделитель
PM MAIL WWW ICQ Skype   Вверх
Dmi3ev
Дата 7.5.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 5
Всего: 41



Цитата

Dmi3ev, у меня было 2 критерия выбора в пользу текстового файла:
1) легкость в освоении (не нужно знать про БД)
2) лёгкая расширяемость за счёт других пользователей, т.е. я захотел создал одну базу объединил эту базу с базой другого чела и т.д.

neic, у меня никаких возражений...



--------------------

PM MAIL   Вверх
Dmi3ev
Дата 7.5.2009, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 5
Всего: 41



+ еще хочу поговорить про реализацию.
Так вот, файл так файл, тогда бери *.ini файл, а для разработки бери C++ Builder, потому как при использовании такой связки можно быть полным нубом в программировании... А задание выполнишь за 10 секунд, не больше... Удобно!
1) Создаешь проект, кидаешь на форму два эдита и кнопку (5 секунд думаю хватит)
2) В событие OnClick кнопки пишешь следующий код (Думаю секунды 3 хватит чтобы это сделать):
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        TIniFile *mif=new TIniFile("D:\\myDB.ini");
        Edit2->Text=mif->ReadString("Questions", Edit1->Text, "I don't know!");
}

Все готово! Остается еще 2 секунды до того, как пройдет 10 секунды с создания проекта, они нужны чтобы вставить вот этот хидер:
Код

#include <IniFiles.hpp>

Ах да, сам файл myDB.ini должен выглядеть так:
Код

[Questions]
Hi="Hi"
What is your name?="My name is Dmi3ev"

Проще некуда...

Добавлено через 1 минуту и 43 секунды
В случае, если вопрос не найден будет выдаваться фраза по умолчанию
Цитата

I don't know!



--------------------

PM MAIL   Вверх
Sibi
Дата 7.5.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



neic, спасибо! Попробую.

Добавлено через 4 минуты и 40 секунд

Dmi3ev, ух ты, спасибо! Я правда C++ Builder никогда не пользовалась, но надо начинать.
PM MAIL   Вверх
Dmi3ev
Дата 7.5.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 5
Всего: 41



Цитата

Dmi3ev, ух ты, спасибо! Я правда C++ Builder никогда не пользовалась, но надо начинать. 

Для тебя в данном случае C++ Builder лучший выход, потому как разобраться в двух строках проще, чем в тоннах кода... Тем более, что их надо еще родить  smile 
Единственное, можно продумать о добавлении новой пары вопрос-ответ в файл (это не сложно, а можно и ручками дописывать, структуру файла я тебе показал, по аналогии думаю сможешь написать вопросов и ответов сколько тебе надо)  smile 
и + еще можно добавить 1 строку, так будет более правильно:
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        TIniFile *mif=new TIniFile("D:\\myDB.ini");
        Edit2->Text=mif->ReadString("Questions", Edit1->Text, "I don't know!");
        mif->Free();
}

Удачи...


--------------------

PM MAIL   Вверх
Sibi
Дата 20.5.2009, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Dmi3ev, помоги еще раз, пожалуйста. Програмка работает, но не читает из файла вопросы, на любой отвечает "не знаю".  Что делать?
PM MAIL   Вверх
Dmi3ev
Дата 20.5.2009, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 5
Всего: 41



Sibi, как не читает?

Добавлено через 33 секунды
у меня этот код работает на ура, покажи свой... че ты без кода просишь че-то


--------------------

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.