Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
Внизунарный минус Найти похожие ветки
← →
sat © (2007-03-23 00:31) [0]у меня есть программа которая вычисляет выражения в обратной польской записи(+,-,*,/). Подскажите как мне переделать прогу чтобы появился и унарный минус. Прога стандартная
var
Stack : TStack;
s ,z ,y : string;
i , a, b: integer;
begin
Stack := TStack.Create;
with stack do begin
s:=Edit1.Text;
z:="";
y:="";
i:=1;
while length(s)<>0 do
begin
if not (s[i] in znaki) then
begin
while s[i]<>" " do
begin
z:=z+s[i];
inc(i);
end;
delete(s,1,i);
Push(Pointer(StrToInt(z)));
i:=1;
y:=z;
z:="";
end
else
begin
pointer(a):=pop;
pointer(b):=pop;
case s[i] of
"+": begin
Push(Pointer(a+b));
end;
"-": begin
Push(Pointer(b-a));
end;
"*": begin
Push(Pointer(b*a));
end;
"/": begin
Push(Pointer( round(b/a) ));
end;
end;
delete(s,1,2);
end;
end;
pointer(a):=pop;
Edit2.Text:=FloatToStr(a);
end;
← →
sat © (2007-03-23 00:32) [1]да и еще описано
const znaki = ["+","-","*","/"];
← →
Германн © (2007-03-23 01:34) [2]Открыл тут свой старый архив от сентября 97-го, где я работал с обратной польской записью и понял, что уже голова не варит :(
← →
MBo © (2007-03-23 06:51) [3]Или использовать специальный символ для унарного минуса, или сделать операцию бинарной (-a => 0 - a)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c