75 lines
1.8 KiB
Plaintext
75 lines
1.8 KiB
Plaintext
BEGIN
|
|
|
|
BOOLEAN PROCEDURE ISNUMERIC(W); TEXT W;
|
|
BEGIN
|
|
BOOLEAN PROCEDURE MORE;
|
|
MORE := W.MORE;
|
|
CHARACTER PROCEDURE NEXT;
|
|
NEXT := IF MORE THEN W.GETCHAR ELSE CHAR(0);
|
|
CHARACTER PROCEDURE LAST;
|
|
LAST := IF W.LENGTH = 0
|
|
THEN CHAR(0)
|
|
ELSE W.SUB(W.LENGTH,1).GETCHAR;
|
|
CHARACTER CH;
|
|
W.SETPOS(1);
|
|
IF MORE THEN
|
|
BEGIN
|
|
CH := NEXT;
|
|
IF CH = '-' OR CH = '+' THEN CH := NEXT;
|
|
WHILE DIGIT(CH) DO CH := NEXT;
|
|
IF CH = '.' THEN
|
|
BEGIN
|
|
CH := NEXT;
|
|
IF NOT DIGIT(CH) THEN GOTO L;
|
|
WHILE DIGIT(CH) DO CH := NEXT;
|
|
END;
|
|
IF CH = '&' THEN
|
|
BEGIN
|
|
CH := NEXT;
|
|
IF CH = '-' OR CH = '+' THEN CH := NEXT;
|
|
WHILE DIGIT(CH) DO CH := NEXT;
|
|
END;
|
|
END;
|
|
L: ISNUMERIC := (W.LENGTH > 0) AND THEN (NOT MORE) AND THEN DIGIT(LAST);
|
|
END;
|
|
|
|
REAL X;
|
|
TEXT T;
|
|
FOR X := 0, -3.1415, 2.768&+31, 5&10, .5, 5.&10 DO
|
|
BEGIN
|
|
OUTREAL(X, 10, 20);
|
|
OUTIMAGE;
|
|
END;
|
|
|
|
OUTIMAGE;
|
|
|
|
FOR T :- "0", "-3.1415", "2.768&+31", ".5", "5&22" DO
|
|
BEGIN
|
|
OUTTEXT(IF ISNUMERIC(T) THEN " NUMERIC " ELSE "NOT NUMERIC ");
|
|
OUTCHAR('"');
|
|
OUTTEXT(T);
|
|
OUTCHAR('"');
|
|
IF T = "0" THEN OUTCHAR(CHAR(9)); OUTCHAR(CHAR(9));
|
|
COMMENT PROBE ;
|
|
X := T.GETREAL;
|
|
OUTREAL(X, 10, 20);
|
|
OUTIMAGE;
|
|
END;
|
|
|
|
OUTIMAGE;
|
|
|
|
X := 5.&10;
|
|
!X := 5&;
|
|
!X := 5.;
|
|
X := .5;
|
|
FOR T :- "", "5.", "5&", "5&+", "5.&", "5.&-", "5.&10" DO
|
|
BEGIN
|
|
OUTTEXT(IF ISNUMERIC(T) THEN " NUMERIC " ELSE "NOT NUMERIC ");
|
|
OUTCHAR('"');
|
|
OUTTEXT(T);
|
|
OUTCHAR('"');
|
|
OUTIMAGE;
|
|
END;
|
|
|
|
END
|