|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.10.2009, 19:12 | #1 |
Пользователь
Регистрация: 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. Последний раз редактировалось pizhon1; 21.10.2009 в 19:24. |
21.10.2009, 22:33 | #2 |
Форумчанин
Регистрация: 23.05.2008
Сообщений: 219
|
В этом коде чорт голову сломает(заключи его хоть в BB коды CODE), и объяснение тоже мягко говоря не очень.
The Revolution is Now!
|
21.10.2009, 22:48 | #3 |
Гуру Разврата
Форумчанин
Регистрация: 29.07.2009
Сообщений: 373
|
Зачем же так заморачиваться, просто делаете проверку так:
if (edit1.text='z=c*b') then begin //что необходимо делать если тексты совпадают end else begin //что необходимо делать когда не совпадают end;
Фредди вернулся))) И Готов Убивать!!!
|
22.10.2009, 01:13 | #4 |
Форумчанин
Регистрация: 02.04.2009
Сообщений: 235
|
Vol666 не думаю что
Код:
Код:
Всё гениальное - просто!
|
22.10.2009, 01:20 | #5 |
Форумчанин
Регистрация: 02.04.2009
Сообщений: 235
|
2pizhon1. Тебе не кажется, что на вот этом этапе:
Код:
Код:
Поясню... Код:
Код:
Тут я понимаю идёт проверка входит ли InputSt[i] в множество ['a,b,c'], если Да, то какое -то выполняется действие. Напомню, что элементы множества, стоит разделять...Как показано на моём образце.
Всё гениальное - просто!
Последний раз редактировалось .Phoenix; 22.10.2009 в 01:29. |
22.10.2009, 01:22 | #6 |
Форумчанин
Регистрация: 19.06.2009
Сообщений: 896
|
Всётаки тема в разделе "Общие вопросы Delphi", если автор адекватен, то он это заметил и не стал бы сюда постить задачу по TP. А операторы типа Read(ln) и Write(ln) есть в консольном проекте. Такчто предположим что это консоль.
Теперь по теме. По моему всё очень просто. Надо в цикле идти по строке. И смотреть чтоб происходило чередование "буква - спецсимвол". А также выставить обязательные условия: 1. 1-ый знак всегда буква. 2. 2-ой знак всегда равно. 3. 3-ий буква. 4. Не буква, любой из + - * /. 5. Буква. Если вид именно с = a * b и пр. то это покатит. PS: я кстати не понял что там за код у автора ))) Мозг сломался, пойду чинить.... Последний раз редактировалось Вавел из ГМТУ; 22.10.2009 в 01:38. |
23.10.2009, 09:35 | #7 |
Пользователь
Регистрация: 17.09.2009
Сообщений: 10
|
спасибо ребята я разобрался...ещё раз приношу свои извинения что не туда написал
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите дописать БД | Лорд_Оледжан | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 30.05.2009 22:14 |
Помогите дописать | ShnapS | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 28.05.2008 21:08 |
Помогите дописать программу. | ShnapS | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 17.05.2008 19:50 |
Помогите дописать | Klyan | Общие вопросы C/C++ | 8 | 22.06.2007 01:55 |