aboutsummaryrefslogtreecommitdiff
path: root/challenge-235/deadmarshal/oberon/Ch2.Mod
blob: 13df19051b47e1c3695e4850df37d0ef973f2302 (plain)
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;

  IMPORT Out;

  TYPE
    PArr = POINTER TO ARRAY OF LONGINT;
    
  VAR
    A1:ARRAY 8 OF LONGINT;
    A2:ARRAY 3 OF LONGINT;
    A3:ARRAY 5 OF LONGINT;
    ret1,ret2,ret3:PArr;
    
  PROCEDURE Init;
  BEGIN
    A1[0] := 1; A1[1] := 0; A1[2] := 2; A1[3] := 3;
    A1[4] := 0; A1[5] := 4; A1[6] := 5; A1[7] := 0; 
    A2[0] := 1; A2[1] := 2; A2[2] := 3; 
    A3[0] := 0; A3[1] := 3; A3[2] := 0;
    A3[3] := 4; A3[4] := 5; 
  END Init;

  PROCEDURE DuplicateZeros(VAR arr:ARRAY OF LONGINT):PArr;
    VAR
      ret:PArr;
      i,j:LONGINT;
  BEGIN
    NEW(ret,LEN(arr));
    i := 0; j := 0;
    WHILE j <= LEN(arr)-1 DO
      IF arr[i] = 0 THEN
	ret[j] := 0; INC(j); ret[j] := 0;
	INC(i); INC(j);
      ELSE
	ret[j] := arr[i]; INC(i); INC(j);
      END
    END;
    RETURN ret
  END DuplicateZeros;

  PROCEDURE PrintArray(VAR arr:ARRAY OF LONGINT);
    VAR i:LONGINT;
  BEGIN
    FOR i := 0 TO LEN(arr)-1 DO Out.Int(arr[i],0); Out.Char(' ') END;
    Out.Ln
  END PrintArray;
  
BEGIN
  Init;
  ret1 := DuplicateZeros(A1);
  ret2 := DuplicateZeros(A2);
  ret3 := DuplicateZeros(A3);
  PrintArray(ret1^);
  PrintArray(ret2^);
  PrintArray(ret3^);
END Ch2.