File: ARITHM.PS of Tape: Various/Decus/decus-3
(Source file text) 

PROGRAM ARITHMETIK(INPUT, OUTPUT);
    VAR W: REAL;

FUNCTION ZIFFER(Z: CHAR): BOOLEAN;
   BEGIN ZIFFER := ("0"<=Z) AND (Z<="9") END;

FUNCTION AUSDRUCK: REAL;
VAR Z: CHAR;
    FUNCTION FAKTOR: REAL;
    VAR W: INTEGER;
        BEGIN
        READ(Z);   WRITE(Z);
        IF ZIFFER(Z)
           THEN BEGIN W := 0;
                REPEAT W := 10*W + ORD(Z) - ORD("0");
                       READ(Z);   WRITE(Z)
                UNTIL NOT (ZIFFER(Z));
                FAKTOR := W
                END
           ELSE IF Z = "("
                   THEN BEGIN FAKTOR := AUSDRUCK;
                        READ(Z);   WRITE(Z)
                        END
        END;

    FUNCTION TERM: REAL;
        VAR W: REAL;
        BEGIN W := FAKTOR;
        WHILE (Z="*") OR (Z="/") DO
              IF Z = "*" THEN W := W*FAKTOR
                         ELSE W := W/FAKTOR;
        TERM := W
        END;

    BEGIN
    W := TERM;
    WHILE (Z="+") OR (Z="-") DO
          IF Z = "+" THEN W := W + TERM
                     ELSE W := W - TERM;
    AUSDRUCK := W
    END;

BEGIN
REPEAT WRITE(" ");WRITELN(AUSDRUCK:7:3);
       READLN
UNTIL EOF
END.