1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
MODULE Ch2 EXPORTS Main;
IMPORT SIO;
VAR
A1 := ARRAY[0..7] OF INTEGER{1,0,2,3,0,4,5,0};
A2 := ARRAY[0..2] OF INTEGER{1,2,3};
A3 := ARRAY[0..3] OF INTEGER{1,2,3,0};
A4 := ARRAY[0..3] OF INTEGER{0,0,1,2};
A5 := ARRAY[0..4] OF INTEGER{1,2,0,3,4};
PROCEDURE DuplicateZeros(VAR A:ARRAY OF INTEGER) =
VAR
N := NUMBER(A);
I := -1;
K := 0;
J := N-1;
BEGIN
WHILE K < N DO
INC(I);
IF A[I] > 0 THEN INC(K) ELSE INC(K,2) END
END;
IF K = N+1 THEN
A[J] := 0;
DEC(J);
DEC(I)
END;
WHILE J >= FIRST(A) DO
A[J] := A[I];
IF A[I] = 0 THEN DEC(J); A[J] := A[I] END;
DEC(I);
DEC(J)
END;
END DuplicateZeros;
PROCEDURE PrintArray(VAR A:ARRAY OF INTEGER) =
BEGIN
FOR I := FIRST(A) TO LAST(A) DO
SIO.PutInt(A[I]);
SIO.PutChar(' ')
END;
SIO.Nl()
END PrintArray;
BEGIN
DuplicateZeros(A1);
DuplicateZeros(A2);
DuplicateZeros(A3);
DuplicateZeros(A4);
DuplicateZeros(A5);
PrintArray(A1);
PrintArray(A2);
PrintArray(A3);
PrintArray(A4);
PrintArray(A5);
END Ch2.
|