program KouchiKeisan; {$APPTYPE CONSOLE} uses SysUtils; function Shisoku(X,Y : Real; Enzanshi : Char) : Real; {X Enzanshi Y を計算する} begin case Enzanshi of '-','=' : Shisoku := X-Y; '*',':' : Shisoku := X*Y; '/','?' : Shisoku := X/Y; else Shisoku := X+Y; end; end; {Shisoku} function ShikiToAtai(Shiki : String) : Real; var Memory : array [1..100] of Real; // 途中の値を記憶する Last : Integer; // 記憶している最後の場所 Nth : Integer; // Shiki の Nth 番目の文字を実行中 I : Integer; // Memory の内容を書くとき使う begin Last := 0; for Nth := 1 to Length(Shiki) do begin case Shiki[Nth] of '0'..'9' : begin Inc(Last); Memory[Last] := Ord(Shiki[Nth])-Ord('0'); end; else if Last <= 1 then WriteLn('Error') else begin Dec(Last); Memory[Last] := Shisoku(Memory[Last],Memory[Last+1],Shiki[Nth]); end; end; Write(Shiki[Nth]); for I := 1 to Last do Write(Memory[I]:8:3); WriteLn; end; if Last > 1 then WriteLn('Error'); ShikiToAtai := Memory[1]; end; var Shiki : String; Atai : Real; begin WriteLn('後置記法の式を入れてください'); WriteLn('ただし定数は1桁の数,演算子は +-*/ とします'); WriteLn(' 例 123--45*-678*-9/*'); WriteLn('0 を入れると終わります'); repeat WriteLn; Write('? '); ReadLn(Shiki); WriteLn; Atai := ShikiToAtai(Shiki); WriteLn; WriteLn(Shiki, ' = ', Atai:0:3); until Shiki = '0'; end.