Показать сообщение отдельно
Старый 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.
Катуха вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070