|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
17.12.2008, 18:36 | #1 (permalink) |
Member
Регистрация: 17.12.2008
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Обратная польская запись
|
17.12.2008, 18:36 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Темы которые подобны вашей уже были на нашем форуме Запись видеоролика Запись на CD |
23.12.2008, 20:56 | #2 (permalink) |
Member
Регистрация: 17.12.2008
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Вот один из вариантов решения,но она не идет. Подскажите,в чем ошибка.
const oper1=['+','-']; oper2=['*','/']; symbol=['a'..'z','A'..'Z','0'..'9','.']; var sym :char; so,si :string; p :word; procedure getsym; begin while (p<=length(si))and(si[p] in [' ',#9]) do inc(p); if p>length(si) then sym:=#0 else begin sym:=si[p];inc(p) end; end; procedure expression;forward; procedure get_var; begin so:=so+' '; while sym in symbol do begin so:=so+sym;getsym end end; procedure term; var a:char; begin if sym='(' then begin getsym;expression;getsym end else get_var; while sym in oper2 do begin a:=sym;getsym;term;so:=so+a end end; procedure expression; var a:char; begin if sym='+' then getsym else if sym='-' then begin a:='-';getsym end else a:=' '; term; if a='-' then so:=so+' (-)'; while sym in oper1 do begin a:=sym;getsym;term;so:=so+a end end; begin si:='-1.2-(-1*3.14+1/(a/b+cab*9))';so:='';p:=1; getsym;expression;writeln(si);writeln(so); end. |
25.12.2008, 14:45 | #3 (permalink) |
Member
Регистрация: 17.12.2008
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Программа выдает ошибку в строчке
while (p<=length(si))and(si[p] in [' ',#9]) do inc(p) на месте do пишет,что type mismatch. Что нужно сделать? Подскажите. |
25.12.2008, 16:36 | #5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
А вообще-то странно - у меня транслируется и не ругается. И запускается. И даже что-то выдает. (Я только в самом конце пустой ReadLn пририсовал, чтобы остановилась).
А что касается типа переменной р - можно, конечно, попробовать изменить на Byte (формат возврата функции Length) но чуднО это... |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
26.12.2008, 20:45 | #7 (permalink) |
Member
Регистрация: 17.12.2008
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Паскаль выдает ошибку 39 в [' ',#9]). Что делать не знаю,подскажите пож-а,может паскаль другой скачать(скажите где и какой лучше). Уже 2 паскаля скачивала,на них все равно не идет. Очень срочно.
|
26.12.2008, 22:03 | #8 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Попробуйте в проблемной строке выражение в скобках после and заменить на
(si[p]=' ') (между кавычками - один пробел). Т.е. строка будет такой: while (p<=length(si))and(si[p]=' ') do inc(p) Должно пойти. P.S. Я тут поисследовал проблему, и кажется установил, почему у меня программа идет, а у Катухи - нет. Дело в том, что я пользуюсь DOS-Паскалями (ну или уж Delphi), и надо же - именно девятый символ под DOS и WINDOWS выдает разное! Остальные - одно и то же. Под DOS выдается несколько пробелов, а под WINDOWS - символ "○". |
26.12.2008, 22:10 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|