120 lines
2.8 KiB
Plaintext
120 lines
2.8 KiB
Plaintext
|
(* AS OF 03/12/82 *)
|
|||
|
(* This program ia a sample PASCAL MT+86 program. It makes your *)
|
|||
|
(* computed function as a pocket calculator. To use this program *)
|
|||
|
(* simply compile it, link it with TRANCEND.R86, FPREALS.R86 and *)
|
|||
|
(* PASLIB. The compiler control command is: *)
|
|||
|
(* MT+86 CALC *)
|
|||
|
(* The linker command is: *)
|
|||
|
(* LINKMT CALC,TRANCEND,FPREALS,PASLIB/S *)
|
|||
|
(* To execute enter: *)
|
|||
|
(* CALC *)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
PROGRAM CALCULATE;
|
|||
|
|
|||
|
CONST
|
|||
|
RCONST = -2.5;
|
|||
|
RCONST1= 65535.5;
|
|||
|
|
|||
|
VAR R1,R2,TEMP:REAL;
|
|||
|
X : ARRAY [1..2] OF REAL;
|
|||
|
CH1,OP:CHAR;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
FUNCTION SUBREAL(R1,R2:REAL) : REAL;
|
|||
|
|
|||
|
BEGIN
|
|||
|
SUBREAL := R1 - R2
|
|||
|
END;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
PROCEDURE ADDREAL(VAR R1:REAL; R2:REAL);
|
|||
|
BEGIN
|
|||
|
R1 := R1 + R2
|
|||
|
END;
|
|||
|
|
|||
|
PROCEDURE TF(B:BOOLEAN);
|
|||
|
BEGIN
|
|||
|
IF B THEN
|
|||
|
WRITELN('TRUE')
|
|||
|
ELSE
|
|||
|
WRITELN('FALSE')
|
|||
|
END;
|
|||
|
|
|||
|
PROCEDURE CALC;
|
|||
|
BEGIN
|
|||
|
CASE OP OF
|
|||
|
'S': WRITELN(SIN(R1));
|
|||
|
'C': WRITELN(COS(R1));
|
|||
|
'A': WRITELN(ARCTAN(R1));
|
|||
|
'L': WRITELN(LN(R1));
|
|||
|
'E': WRITELN(EXP(R1));
|
|||
|
'+': BEGIN ADDREAL(X[1],X[2]); WRITELN(X[1]:10:4) END;
|
|||
|
'-': WRITELN(SUBREAL(X[1],X[2]):10:2);
|
|||
|
'*': WRITELN(R1 * R2);
|
|||
|
'/': WRITELN(R1 / R2);
|
|||
|
'M': WRITELN(-R1);
|
|||
|
'=': TF(R1 = R2);
|
|||
|
'N': TF(R1 <> R2);
|
|||
|
'$': WRITELN(SQRT(R1):10:3,SQRT(R2):10:3);
|
|||
|
'<': TF(R1 < R2);
|
|||
|
'>': TF(R1 > R2);
|
|||
|
'Z': TF(R1 <= R2);
|
|||
|
'G': TF(R1 >=R2);
|
|||
|
'1': WRITELN(SQR(R1),' ',SQR(R2));
|
|||
|
'2': WRITELN(R1 + 1);
|
|||
|
'3': WRITELN(1+R1);
|
|||
|
'4': WRITELN(TRUNC(R1));
|
|||
|
'5': WRITELN(ROUND(R1));
|
|||
|
'6': WRITELN(RCONST);
|
|||
|
'7': WRITELN(RCONST1);
|
|||
|
'8': BEGIN R1 := -2.234; X[1] := 3.456; WRITELN(R1,' ',X[1]); END;
|
|||
|
|
|||
|
END;
|
|||
|
END; (* CALCULATOR *)
|
|||
|
|
|||
|
PROCEDURE MENU;
|
|||
|
BEGIN
|
|||
|
WRITE('S:SIN ');
|
|||
|
WRITE('C:COS ');
|
|||
|
WRITE('A:ARCTAN ');
|
|||
|
WRITE('L:LN ');
|
|||
|
WRITE('E:EXP ');
|
|||
|
WRITE('1:SQR ');
|
|||
|
WRITELN('$:SQRT ');
|
|||
|
WRITELN('+, -, *, / ARITHMETIC OPERATORS');
|
|||
|
WRITELN('M:NEGATE');
|
|||
|
WRITE('= : EQUAL ');
|
|||
|
WRITELN('N : NOT EQUAL');
|
|||
|
WRITE('<:LESS THAN ');
|
|||
|
WRITELN('>:GREATER THAN ');
|
|||
|
WRITELN('Z:LESS THAN OR EQUAL TO');
|
|||
|
WRITELN('G:GREATER THAN OR EQUAL TO');
|
|||
|
WRITE('4:TRUNC ');
|
|||
|
WRITELN('5:ROUND');
|
|||
|
END;
|
|||
|
|
|||
|
BEGIN (* MAIN PROGRAM *)
|
|||
|
REPEAT
|
|||
|
WRITE('ENTER FIRST OPERAND? ');
|
|||
|
READ(R1);
|
|||
|
X[1] := R1;
|
|||
|
WRITELN('R1=',R1); WRITELN;
|
|||
|
WRITE('ENTER SECOND OPERAND? ');
|
|||
|
READ(R2);
|
|||
|
X[2] := R2;
|
|||
|
WRITELN('R2=',R2); WRITELN;
|
|||
|
WRITELN('ENTER OPERATOR:');
|
|||
|
MENU;
|
|||
|
WRITE('? ');
|
|||
|
READ(OP);
|
|||
|
WRITELN;
|
|||
|
CALC;
|
|||
|
WRITELN('Type <ESCAPE> to stop. Any other characer to repeat.');
|
|||
|
READ(CH1);
|
|||
|
UNTIL CH1 = CHR(27)
|
|||
|
END.
|
|||
|
|