ShiftGCD.Mod 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. MODULE ShiftGCD;
  2. IMPORT In, Out;
  3. CONST maxN = 100;
  4. VAR m: ARRAY maxN OF INTEGER;
  5. N, K: INTEGER;
  6. Z: INTEGER;
  7. PROCEDURE Show;
  8. VAR i: INTEGER;
  9. s: ARRAY 10 OF CHAR;
  10. BEGIN
  11. FOR i := 0 TO N - 1 DO Out.Int(m[i], 3) END; Out.Ln;
  12. IF Z = 19 THEN Z := 0;
  13. Out.String('Нажмите клавишу [Ввод] для продолжения. . . ');
  14. In.Line(s)
  15. ELSE INC(Z)
  16. END
  17. END Show;
  18. PROCEDURE Shift;
  19. VAR i, i2, stop, tmp, count: INTEGER;
  20. BEGIN
  21. Show;
  22. i := 0; count := 0;
  23. WHILE count # N DO
  24. stop := i; tmp := m[i]; (* 0 -> 10 -> 5 -> 0 *)
  25. i2 := (i + K) MOD N;
  26. WHILE i2 # stop DO
  27. m[i] := m[i2]; INC(count);
  28. i := i2;
  29. i2 := (i + K) MOD N
  30. END;
  31. m[i] := tmp; INC(count);
  32. INC(i);
  33. Show
  34. END
  35. END Shift;
  36. PROCEDURE Do;
  37. VAR i: INTEGER;
  38. BEGIN
  39. Out.String('Программа циклически сдвигает массив влево на K элементов.'); Out.Ln;
  40. Out.String('Введите N - длину массива: '); In.Int(N);
  41. Out.String('Введите K: '); In.Int(K);
  42. FOR i := 0 TO N - 1 DO m[i] := i END;
  43. Z := 0;
  44. Shift
  45. END Do;
  46. BEGIN
  47. Do
  48. END ShiftGCD.