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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
CLASS Meter
PRIVATE Value : INTEGER
PUBLIC OVERLOAD PROCEDURE NEW()
Value <- 5
ENDPROCEDURE
PUBLIC OVERLOAD PROCEDURE NEW(X : INTEGER)
Value <- 2 * X + 3
ENDPROCEDURE
PUBLIC OVERLOAD PROCEDURE NEW(Text : STRING)
Value <- LENGTH(Text) + 20
ENDPROCEDURE
PUBLIC OVERLOAD PROCEDURE NEW(X : INTEGER, Y : INTEGER)
Value <- X - Y
ENDPROCEDURE
PUBLIC OVERLOAD FUNCTION Get() RETURNS INTEGER
RETURN Value
ENDFUNCTION
PUBLIC OVERLOAD FUNCTION Get(X : INTEGER) RETURNS INTEGER
RETURN Value + 3 * X
ENDFUNCTION
PUBLIC OVERLOAD FUNCTION Get(X : REAL) RETURNS BOOLEAN
RETURN Value > X
ENDFUNCTION
PUBLIC OVERLOAD FUNCTION Get(Text : STRING) RETURNS STRING
RETURN Text & "!"
ENDFUNCTION
PUBLIC OVERLOAD PROCEDURE Set(X : INTEGER)
Value <- X
ENDPROCEDURE
PUBLIC OVERLOAD PROCEDURE Set(Text : STRING)
Value <- LENGTH(Text)
ENDPROCEDURE
PUBLIC PROCEDURE Apply(X : INTEGER)
CALL this.Set(this.Get(X))
ENDPROCEDURE
ENDCLASS
TYPE Holder
DECLARE Item : Meter
ENDTYPE
DECLARE Count : INTEGER
DECLARE Row : INTEGER
DECLARE A : INTEGER
DECLARE B : INTEGER
DECLARE Size : INTEGER
DECLARE Text : STRING
DECLARE I : INTEGER
DECLARE Total : INTEGER
INPUT Count
FOR Row <- 1 TO Count
INPUT A
INPUT B
INPUT Size
INPUT Text
DECLARE DefaultItem : Meter
DECLARE NumberItem : Meter(A)
DECLARE TextItem : Meter(Text)
DECLARE PairItem : Meter(A, B)
DECLARE Wrapped : Holder
DECLARE Items : ARRAY[1:Size] OF Meter
DECLARE ChangedNumber : Meter(A)
DECLARE ChangedText : Meter(Text)
DECLARE Rebuilt : Meter(A, B)
DECLARE HeapItem : Meter
Total <- 0
FOR I <- 1 TO Size
Total <- Total + Items[I].Get()
NEXT I
HeapItem <- NEW Meter(A, B)
CALL ChangedNumber.Set(Text)
CALL ChangedText.Set(A)
CALL ChangedText.Apply(B)
CALL Rebuilt.NEW(Text)
OUTPUT DefaultItem.Get(), ":", NumberItem.Get(), ":", TextItem.Get(), ":", PairItem.Get(), ":", Wrapped.Item.Get(), ":", Total, ":", NumberItem.Get(B), ":", NumberItem.Get(B / 8), ":", NumberItem.Get(Text), ":", HeapItem.Get(), ":", ChangedNumber.Get(), ":", ChangedText.Get(), ":", Rebuilt.Get()
DELETE HeapItem
NEXT Row
|