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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2013, 12:28   #1
NexuS100
Новичок
Джуниор
 
Регистрация: 24.01.2013
Сообщений: 1
Лампочка ЧАТ БОТ

Вот у меня есть чат-бот(вопрос - ответ)
У меня возникли 2 вопроса:

1. Что дописать что бы, когда я задаю вопрос боту, и он не знает на него ответа, он говорит "не знаю"
2. Что дописать, что бы, когда я говорю "пока", был конец программы(процедуры).


Код Pascal
Код:
Program chat;
uses crt;
var s:string;
i:integer;
begin
clrscr;
for i:=1 to 10 do
begin
readln(s);
if s='привет' then
writeln('привет');
if s='как тебя зовут' then
writeln('Егор');
if s='Пока' then
writeln('Пока');
 end;
readln;
end.

Последний раз редактировалось Stilet; 25.01.2013 в 17:38.
NexuS100 вне форума Ответить с цитированием
Старый 24.01.2013, 13:03   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
1. Что дописать что бы, когда я задаю вопрос боту, и он не знает на него ответа, он говорит "не знаю"
прописать все if...then через else и в конце дописать else WriteLn(''Не знаю');

Цитата:
2. Что дописать, что бы, когда я говорю "пока", был конец программы(процедуры).
Код:
if s='Пока' then begin
  writeln('Пока');
  break;
end;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 24.01.2013, 13:15   #3
winhttp
Пользователь
 
Регистрация: 29.07.2012
Сообщений: 98
По умолчанию

Правильней наверное не писать столько условий, а через case сделать:
Код:
case s of
 'привет' : writeln('привет');
 'как тебя зовут'  : writeln('Егор');
 'Пока' : 
begin
writeln('Пока');
break;
end;
end;
как то так
winhttp вне форума Ответить с цитированием
Старый 24.01.2013, 13:27   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
const
  Q:array[0..2,0..1] of string=(('привет','привет'),
                                ('как тебя зовут','Егор'),
                                ('Пока','Пока'));
var
  Online,Ans:boolean;
  s:string;
  i:integer;
begin
  Online:=true;
  while Online do
  begin
    readln(s);
    Ans:=false;
    for i:=low(Q) to High(Q) do
    begin
      if s=Q[i,0] then
      begin
        writeln(Q[i,1]);
        Ans:=true;
        if i=2 then
          Online:=false;
        break;
      end;
    end;
    if not Ans then
      writeln('не знаю');
  end;
  readln;
end.
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 24.01.2013, 13:33   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

winhttp, кстати,
Цитата:
Сообщение от winhttp
case s of
'привет'
так в Паскале (Delphi) нельзя.
получите ошибку: "[Error] xxxxxxx: Ordinal type required" - оператор CASE допустим только для перечисляемых типов данных
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.01.2013, 13:42   #6
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

NexuS100, с называнием темы "ЧАТ БОТ" вы сильно погорячились..а так..если хотите что бы больше ответов было и вопросов...можно создать бд вопрос|ответ и делать к ней запрос..после анализа текста..)
Кольша вне форума Ответить с цитированием
Старый 25.01.2013, 17:02   #7
brunis
 
Регистрация: 17.07.2012
Сообщений: 8
По умолчанию

Цитата:
for i:=low(Q) to High(Q) do
Как работает такой цикл?? Вернее процедуры которые в нём находятся. Разьясните пожалуйсто кто может
brunis вне форума Ответить с цитированием
Старый 25.01.2013, 19:30   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Разьясните пожалуйсто кто может
Вам великая справка поможет
Poma][a вне форума Ответить с цитированием
Старый 25.01.2013, 21:10   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
for i:=low(Q) to High(Q) do
Инструкции Low и High возвращают первый и последний индекс массива. Соответственно для Q:array[0..2,0..1] это будет ноль и двойка
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чат бот bukvoed278 PHP 1 29.12.2011 23:00
Бот Vovchik123 C# (си шарп) 3 20.06.2011 16:30
БОТ beygul Помощь студентам 6 12.01.2011 21:55