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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2011, 22:02   #1
MetR
Пользователь
 
Регистрация: 26.12.2008
Сообщений: 50
По умолчанию Принадлежит ли слово языку?

мне нужно проверить принадлежит ли слово данному языку, я тут примерно полфункции написал и решил проверить на слове 000001, по идее результат должен быть истиным, но функция все время выдает ложь, помогите найти ошибку пожалуйста
Код:
function tform1.FirstWord(Fword:string):boolean;
var
cep:string;
i:integer;
begin
i:=1;
if length(fword)=3 then
   if fword='001' then begin result:=true;exit; end
   else begin result:=false; exit; end;
if length(fword) mod 3 <> 0 then begin result:=false; exit; end
   else
   begin
   cep:=fword[i]+fword[i+1]+fword[i+2];
   if (cep<>'000') or (cep<>'001') then begin result:=false; exit; end;
   if cep='000' then
     begin
        repeat
          i:=i+3;
          cep:=fword[i]+fword[i+1]+fword[i+2];
          if (i+3>length(fword)) and (cep<>'001') then begin result:=false; exit; end;
          if (cep<>'000') and (cep<>'001') then begin result:=false; exit; end;
        until cep='001';
        if i+3>length(fword) then begin result:=true; exit; end;
        repeat
        i:=i+3;
        cep:=fword[i]+fword[i+1]+fword[i+2];
        if cep<>'010' then begin result:=false; exit; end;
        until i+3>length(fword);
     end
   else begin result:=false; exit; end;
   end;
end;
MetR вне форума Ответить с цитированием
Старый 12.03.2011, 08:28   #2
Justen
 
Регистрация: 07.03.2011
Сообщений: 3
По умолчанию

Ошибки умом не нашел, но простенькое тестирование с высвечиванием сообщений показало:

...
if length(fword) mod 3 <> 0 then begin result:=false; exit; end
else
begin
cep:=fword[i]+fword[i+1]+fword[i+2];
showmessage ('"' + cep + '"'); //проверял, что заложено в cep
if (cep<>'000') or (cep<>'001') then begin result:=false; exit; end;
showmessage ('2'); //проверял, доходил ли до сюда программа
...
первое сообщение показывается "000", второе сообщение - не показывается, значит - проблема между первым сообщением и вторым.
И ведь действительно: cep='000', значит cep<>'001', присваивается значение false и функция завершается.
Если написать
if (cep<>'000') and (cep<>'001') then begin result:=false; exit; end;
То в итоге функция выдает True на значение 000001

Последний раз редактировалось Justen; 12.03.2011 в 10:31. Причина: добавил решение
Justen вне форума Ответить с цитированием
Старый 12.03.2011, 08:47   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

ОМГ, что за страшенный код...

выдает фолс, потому что Вы в куче месте задаете result := false , и понять почему именно на этом слове так получаетя, малореально из-за "виртуозности" алгоритма.

Вы лучше скажите, что Вы конкретно хотите ? вот задайте пример какой-то, опишите что есть на входе и какие критерии должны отрабатывать, а то просто "принадлежит ли слово языку" это явно не алгоритмическая задача
phomm вне форума Ответить с цитированием
Старый 12.03.2011, 11:33   #4
MetR
Пользователь
 
Регистрация: 26.12.2008
Сообщений: 50
По умолчанию

Код:
if cep='000' then
     begin
        repeat
          i:=i+3;
          cep:=fword[i]+fword[i+1]+fword[i+2];
          if (i+3>length(fword)) and (cep<>'001') then begin result:=false; exit; end;
          if cep<>'000' then begin result:=false; exit; end;
        until cep='001';
ошибка тут была)
исправил на
Код:
if (cep<>'000') and (cep<>'001') then begin result:=false; exit; end;
Justen
спасибо, тут тоже исправил

phomm
дан язык: (000)*001(010)*
на вход подается несколько слов, нужно проверить принадлежат ли они данному языку, за одно обращение обрабатывается одно слово
ну например 000001010,00,01000
MetR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
языку си задание НА КУРСОВУЮ! kest_wolf Помощь студентам 1 08.02.2011 20:17
Обучение языку SlideSide Помощь студентам 2 07.01.2011 23:27
Информация по языку С Nempak Фриланс 2 07.01.2011 21:50
задача по языку си lider219 Помощь студентам 1 18.09.2010 02:19
Задания по языку Pascal Corpse Паскаль, Turbo Pascal, PascalABC.NET 5 04.05.2008 19:43