1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- MODULE Numeral;
- IMPORT In, Out;
- PROCEDURE Digit(c: CHAR; P: INTEGER): INTEGER;
- VAR d: INTEGER;
- BEGIN
- IF ('0' <= c) & (c <= '9') THEN d := ORD(c) - ORD('0')
- ELSIF ('a' <= c) & (c <= 'z') THEN d := ORD(c) - ORD('a') + 10
- ELSIF ('A' <= c) & (c <= 'Z') THEN d := ORD(c) - ORD('A') + 10
- ELSE d := -1
- END;
- IF d >= P THEN d := -1 END
- RETURN d END Digit;
- PROCEDURE Convert(s: ARRAY OF CHAR; P: INTEGER; VAR err: INTEGER): INTEGER;
- VAR d, x, i: INTEGER;
- BEGIN
- err := -1;
- x := 0;
- i := 0;
- WHILE (err = -1) & (s[i] # 0X) DO
- d := Digit(s[i], P);
- IF d = -1 THEN err := i ELSE x := x * P + d END;
- INC(i)
- END
- RETURN x END Convert;
- PROCEDURE Do;
- VAR P, n, err: INTEGER;
- s: ARRAY 50 OF CHAR;
- BEGIN
- Out.String('Введите P: '); In.Int(P);
- Out.String('Введите число в '); Out.Int(P, 0);
- Out.String('-ичной системе счисления: '); In.Line(s);
- n := Convert(s, P, err);
- IF err = -1 THEN
- Out.String('Число в десятичной системе: '); Out.Int(n, 0)
- ELSE
- Out.String('Введённое число имет неверный знак в ');
- Out.Int(err + 1, 0); Out.String('-м слева разряде.')
- END;
- Out.Ln
- END Do;
- BEGIN
- Do
- END Numeral.
|