Обратная польская запись
Помогите пожалуйста составить программу на PASCAL для перевода арифметических выражений в обратную польскую запись. Уже все облазила,но именно на Pascal нигде нету(((
|
Вот один из вариантов решения,но она не идет. Подскажите,в чем ошибка.
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. |
Программа выдает ошибку в строчке
while (p<=length(si))and(si[p] in [' ',#9]) do inc(p) на месте do пишет,что type mismatch. Что нужно сделать? Подскажите. |
переменной p поменять тип
|
А вообще-то странно - у меня транслируется и не ругается. И запускается. И даже что-то выдает. (Я только в самом конце пустой ReadLn пририсовал, чтобы остановилась).
А что касается типа переменной р - можно, конечно, попробовать изменить на Byte (формат возврата функции Length) но чуднО это... |
Спасибо большое! Сейчас попробую все. Может это Pascal брыкается.
|
Паскаль выдает ошибку 39 в [' ',#9]). Что делать не знаю,подскажите пож-а,может паскаль другой скачать(скажите где и какой лучше). Уже 2 паскаля скачивала,на них все равно не идет. Очень срочно.
|
Попробуйте в проблемной строке выражение в скобках после and заменить на
(si[p]=' ') (между кавычками - один пробел). Т.е. строка будет такой: while (p<=length(si))and(si[p]=' ') do inc(p) Должно пойти. P.S. Я тут поисследовал проблему, и кажется установил, почему у меня программа идет, а у Катухи - нет. Дело в том, что я пользуюсь DOS-Паскалями (ну или уж Delphi), и надо же - именно девятый символ под DOS и WINDOWS выдает разное! Остальные - одно и то же. Под DOS выдается несколько пробелов, а под WINDOWS - символ "○". |
Убрала запятую,теперь выдает ошибку 26 вот здесь: else a:=' ';
|
Цитата:
|
Часовой пояс GMT +4, время: 19:26. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.