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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2012, 23:01   #11
Arturko
Пользователь
 
Регистрация: 09.02.2009
Сообщений: 35
По умолчанию

Можете помочь с написанием?
Arturko вне форума Ответить с цитированием
Старый 02.06.2012, 23:04   #12
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Помочь - могу. Но писать за Вас код не буду.
s-andriano вне форума Ответить с цитированием
Старый 02.06.2012, 23:04   #13
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Arturko Посмотреть сообщение
Можете помочь с написанием?
Можем, карандаши точить, бумагу подавать, хвалить, чтобы боевой дух не падал. Пишите и спрашиваете конкретно, что не получается. Иначе только не за просто так.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 05.06.2012, 21:54   #14
Arturko
Пользователь
 
Регистрация: 09.02.2009
Сообщений: 35
По умолчанию

Привет всем.
Добрался наконец-то до этого задания.
Вот что у меня получилось:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var s1,s2:string;
    i,x,b:integer;
begin
  x:=0;
  s1:='if (CEdit1.Text='''') and (Kedit2.Text='''') then begin ShowMessage(''Please enter data'');exit end;';
  s2:=Memo1.Text;
  for i:=1 to Length(s2) do
    begin
      if s1[i]<>s2[i] then x:=1;
    end;
 if x=1 then ShowMessage('Errors exist!') else ShowMessage('No errors.');
end;

end.
Что нужно сделать теперь, это как-то вывести какого рода ошибка произошла. Как это можно сделать?
А лучше бы проверять не на каждый символ, а на отдельные слова, тогда было бы проще, но как проверять на слова, я пока тоже не придумал.
Arturko вне форума Ответить с цитированием
Старый 05.06.2012, 22:11   #15
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Во-первых, так задавать s1 нельзя, т.к. теряются символы апострофы.
Нужно задавать так:
Код:
'if (CEdit1.Text='+chr(x)+chr(x)+') and (Kedit2.Text='+chr(x)+chr(x)+') then'
, где x - код апострофа.

Во-вторых, нужно из строки выбросить все незначащие символы, например, пробелы.
В-третьих, строки можно сравнивать целиком if s1<>memo1.text.
В-четверых, сам memo1.text нужно предварительно очистить от символов.

Кстати, сейчас подумал. Не всегда можно выбрасывать пробелы. Например, x: =1 будет ошибкой, а x := 1 - нет.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 05.06.2012 в 22:36.
BDA на форуме Ответить с цитированием
Старый 05.06.2012, 22:27   #16
temaps
Форумчанин
 
Регистрация: 15.05.2011
Сообщений: 160
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Во-первых, так задавать s1 нельзя, т.к. теряются символы апострофы.
Каким образом? Написаны же два апострофа... Получится как раз апостроф.
temaps вне форума Ответить с цитированием
Старый 05.06.2012, 22:29   #17
Arturko
Пользователь
 
Регистрация: 09.02.2009
Сообщений: 35
По умолчанию

Не получается задать строку с указанием кода апострофа, там получается что непонятно где границы строки, т.е строка должна быть в апострофах, а их там много, я прочитал что нужно дублировать апостроф, что бы он был в строке.
Апострофы вроде не теряются.
Если сравнивать строку просто с Memo1 то почему то всегда говорит что ошибки есть.
Главная задача для меня понять как определить род ошибки: ; expcted, undeclared identifer, и т.д....
Насчёт пробелов вы тоже правы, если в мемо1 сделаю между словами 2 пробела, выдаст ошибку, хотя это не является ошибкой.
Как решить проблему?
Arturko вне форума Ответить с цитированием
Старый 05.06.2012, 22:36   #18
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

temaps, да, вы правы. Не знал, что так можно писать.
Arturko, больше ничего сказать не могу, т.к. для меня это неизведанная проблема.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 05.06.2012, 22:38   #19
Arturko
Пользователь
 
Регистрация: 09.02.2009
Сообщений: 35
По умолчанию

Подождём других, может чего подскажут.
Появилась мысль, что бы проверять по словам, можно искать подстроку в строке, но это опять же не решает проблему, можно поменять местами все слова, и не будет ошибок, но порядок ведь тоже важен.
Arturko вне форума Ответить с цитированием
Старый 05.06.2012, 23:29   #20
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Arturko Посмотреть сообщение
Что нужно сделать теперь, это как-то вывести какого рода ошибка произошла. Как это можно сделать?
Привязать диагностику к номеру позиции, в которой произошло рассогласование.
Цитата:
А лучше бы проверять не на каждый символ, а на отдельные слова, тогда было бы проще, но как проверять на слова, я пока тоже не придумал.
А зачем?
s-andriano вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
синтаксический анализатор(LL) Legato Общие вопросы Delphi 2 25.12.2011 18:29
Синтаксический анализатор Lisёноk Помощь студентам 2 12.12.2011 09:51
Синтаксический анализатор Jeka57 Помощь студентам 1 05.06.2011 22:47
Синтаксический анализатор Ita Фриланс 0 29.03.2011 01:37
Синтаксический анализатор Douglas Помощь студентам 0 28.12.2010 18:01