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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2009, 19:28   #1
pizhon1
Пользователь
 
Регистрация: 17.09.2009
Сообщений: 10
По умолчанию языки и грамматика не хватает одного условия в программе

Вообщем программа должна выдавать YES если текст например такого вида z=c*b если не такого вида(вместо z может быть x или y,и любая комбинация -+*с буквами a,b,c)то должен выдавать ошибку,но вот у меня если я введу =с*b или c*b или *b или b ошибку не выдаёт надо где то условие поставить не могу понять где?
Код:
type AutoState=(AH,AK,AP,AT,AR,AuS,AE);
var i:byte;InputSt:string;
function ErrorCode(InputSt:string):byte;
var i:byte;Istate:AutoState;
begin
i:=length(InputSt);
Istate:=AH;
repeat
case Istate of
AH:if InputSt[i] in ['a,b,c'] then begin IState:=AK;
dec(i) end else Istate:=AE;
AK:if InputSt[i] in ['+,-,*'] then begin IState:=AP;
dec(i) end else Istate:=AE;
AP:if InputSt[i] in [a,b,c] then begin IState:=AT;
dec(i) end else Istate:=AE;
AT:if InputSt[i] in ['='] then begin IState:=AR;
dec(i) end else Istate:=AE;
AR:if InputSt[i] in ['x,y,z'] then begin IState:=AuS;
dec(i) end else Istate:=AE;
end;
AuS:if i<>1 then IState:=AE else i:=0;
end;
until(i=0) or (IState=AE);
ErrorCode:=i;
end;
begin
readln(InputSt);
If ErrorCode(InputSt)<>0 then writeln('Error at pos',ErrorCode(InputSt)) else writeln('YES');
readln;
end.
end.
Замечание модератора: Используйте тег [CODE]

Последний раз редактировалось Rembo; 22.10.2009 в 18:56.
pizhon1 вне форума Ответить с цитированием
Старый 22.10.2009, 14:36   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

У тебя не предусмотрены пробелы? То есть z = a + b даст ошибку?
Я бы разбил выражение на z и a+b через pos по знаку равно. Тогда твоя логика существенно упростилась, а скорость работы бы изменилась незначительно.
Низкоуровневое посимовльное сканирование оно конечно элегантно и быстро, но понятности не добавляет и время на отладку уйдет больше, чем разбитие выражений на более осмысленные блоки.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не хватает условия в программе pizhon1 Общие вопросы Delphi 6 23.10.2009 09:35
не хватает памяти Dimarik Общие вопросы C/C++ 5 17.09.2009 00:16
Не хватает практики на C++ Rembo Свободное общение 11 04.08.2008 18:36
Excel-перенос иформации с одного листа в другой согласно условия ЛюдмилаЗ Microsoft Office Excel 2 28.05.2008 12:38