| 1 | PROGRAM ARITHMETIK(INPUT, OUTPUT); |
| 2 | VAR W: REAL; |
| 3 | |
| 4 | FUNCTION ZIFFER(Z: CHAR): BOOLEAN; |
| 5 | BEGIN ZIFFER := ("0"<=Z) AND (Z<="9") END; |
| 6 | |
| 7 | FUNCTION AUSDRUCK: REAL; |
| 8 | VAR Z: CHAR; |
| 9 | FUNCTION FAKTOR: REAL; |
| 10 | VAR W: INTEGER; |
| 11 | BEGIN |
| 12 | READ(Z); WRITE(Z); |
| 13 | IF ZIFFER(Z) |
| 14 | THEN BEGIN W := 0; |
| 15 | REPEAT W := 10*W + ORD(Z) - ORD("0"); |
| 16 | READ(Z); WRITE(Z) |
| 17 | UNTIL NOT (ZIFFER(Z)); |
| 18 | FAKTOR := W |
| 19 | END |
| 20 | ELSE IF Z = "(" |
| 21 | THEN BEGIN FAKTOR := AUSDRUCK; |
| 22 | READ(Z); WRITE(Z) |
| 23 | END |
| 24 | END; |
| 25 | |
| 26 | FUNCTION TERM: REAL; |
| 27 | VAR W: REAL; |
| 28 | BEGIN W := FAKTOR; |
| 29 | WHILE (Z="*") OR (Z="/") DO |
| 30 | IF Z = "*" THEN W := W*FAKTOR |
| 31 | ELSE W := W/FAKTOR; |
| 32 | TERM := W |
| 33 | END; |
| 34 | |
| 35 | BEGIN |
| 36 | W := TERM; |
| 37 | WHILE (Z="+") OR (Z="-") DO |
| 38 | IF Z = "+" THEN W := W + TERM |
| 39 | ELSE W := W - TERM; |
| 40 | AUSDRUCK := W |
| 41 | END; |
| 42 | |
| 43 | BEGIN |
| 44 | REPEAT WRITE(" ");WRITELN(AUSDRUCK:7:3); |
| 45 | READLN |
| 46 | UNTIL EOF |
| 47 | END. |