Browse Source

Numeral.Mod example added

Arthur Yefimov 3 years ago
parent
commit
986cceb83a
1 changed files with 47 additions and 0 deletions
  1. 47 0
      Programs/Numeral.Mod

+ 47 - 0
Programs/Numeral.Mod

@@ -0,0 +1,47 @@
+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.