146 lines
3.3 KiB
Plaintext
146 lines
3.3 KiB
Plaintext
BEGIN
|
|
|
|
CLASS ITEM;;
|
|
|
|
CLASS ITEMARRAY(N); INTEGER N;
|
|
BEGIN
|
|
REF(ITEM) ARRAY DATA(1:N);
|
|
OUTTEXT("NEW ITEMARRAY WITH "); OUTINT(N, 0); OUTTEXT(" ELEMENTS");
|
|
OUTIMAGE;
|
|
END;
|
|
|
|
CLASS ARRAYLIST;
|
|
BEGIN
|
|
|
|
PROCEDURE EXPAND(N); INTEGER N;
|
|
BEGIN
|
|
INTEGER I;
|
|
REF(ITEMARRAY) TEMP;
|
|
OUTTEXT("EXPAND TO CAPACITY "); OUTINT(N, 0); OUTIMAGE;
|
|
TEMP :- NEW ITEMARRAY(N);
|
|
FOR I := 1 STEP 1 UNTIL SIZE DO
|
|
TEMP.DATA(I) :- ITEMS.DATA(I);
|
|
ITEMS :- TEMP;
|
|
END;
|
|
|
|
PROCEDURE ADD(T); REF(ITEM) T;
|
|
BEGIN
|
|
IF SIZE + 1 > CAPACITY THEN
|
|
BEGIN
|
|
CAPACITY := 2 * CAPACITY;
|
|
EXPAND(CAPACITY);
|
|
END;
|
|
SIZE := SIZE + 1;
|
|
ITEMS.DATA(SIZE) :- T;
|
|
OUTTEXT("SIZE IS "); OUTINT(SIZE, 0); OUTIMAGE;
|
|
END;
|
|
|
|
PROCEDURE REMOVE(I); INTEGER I;
|
|
BEGIN
|
|
INTEGER J;
|
|
IF I < 1 OR I > SIZE THEN ERROR("REMOVE: INDEX OUT OF BOUNDS");
|
|
FOR J := I STEP 1 UNTIL SIZE - 1 DO
|
|
ITEMS.DATA(J) :- ITEMS.DATA(J + 1);
|
|
ITEMS.DATA(SIZE) :- NONE;
|
|
SIZE := SIZE - 1;
|
|
END;
|
|
|
|
REF(ITEM) PROCEDURE GET(I); INTEGER I;
|
|
BEGIN
|
|
IF I < 1 OR I > SIZE THEN ERROR("GET: INDEX OUT OF BOUNDS");
|
|
GET :- ITEMS.DATA(I);
|
|
END;
|
|
|
|
INTEGER CAPACITY;
|
|
INTEGER SIZE;
|
|
REF(ITEMARRAY) ITEMS;
|
|
|
|
CAPACITY := 20;
|
|
SIZE := 0;
|
|
EXPAND(CAPACITY);
|
|
|
|
END;
|
|
|
|
|
|
ITEM CLASS TEXTITEM(TXT); TEXT TXT;;
|
|
|
|
ARRAYLIST CLASS TEXTARRAYLIST;
|
|
BEGIN
|
|
PROCEDURE ADD(T); TEXT T;
|
|
THIS TEXTARRAYLIST QUA ARRAYLIST.ADD(NEW TEXTITEM(T));
|
|
TEXT PROCEDURE GET(I); INTEGER I;
|
|
GET :- THIS TEXTARRAYLIST QUA ARRAYLIST.GET(I) QUA TEXTITEM.TXT;
|
|
END;
|
|
|
|
|
|
ITEM CLASS REALITEM(X); REAL X;;
|
|
|
|
ARRAYLIST CLASS REALARRAYLIST;
|
|
BEGIN
|
|
PROCEDURE ADD(X); REAL X;
|
|
THIS REALARRAYLIST QUA ARRAYLIST.ADD(NEW REALITEM(X));
|
|
REAL PROCEDURE GET(I); INTEGER I;
|
|
GET := THIS REALARRAYLIST QUA ARRAYLIST.GET(I) QUA REALITEM.X;
|
|
END;
|
|
|
|
|
|
REF(TEXTARRAYLIST) LINES;
|
|
REF(REALARRAYLIST) REALS;
|
|
INTEGER I;
|
|
|
|
LINES :- NEW TEXTARRAYLIST;
|
|
LINES.ADD("WE");
|
|
LINES.ADD("HAVE");
|
|
LINES.ADD("SEEN");
|
|
LINES.ADD("THAT");
|
|
LINES.ADD("ARRAYS");
|
|
LINES.ADD("ARE");
|
|
LINES.ADD("A");
|
|
LINES.ADD("VERY");
|
|
LINES.ADD("CONVENIENT");
|
|
LINES.ADD("WAY");
|
|
LINES.ADD("OF");
|
|
LINES.ADD("STORING");
|
|
LINES.ADD("SIMPLE");
|
|
LINES.ADD("VALUES");
|
|
LINES.ADD("AND");
|
|
LINES.ADD("REFERENCES");
|
|
LINES.ADD("TO");
|
|
LINES.ADD("MORE");
|
|
LINES.ADD("COMPLEX");
|
|
LINES.ADD("CLASS");
|
|
LINES.ADD("OBJECTS");
|
|
LINES.ADD("IN");
|
|
LINES.ADD("AN");
|
|
LINES.ADD("ORDERED");
|
|
LINES.ADD("LIST");
|
|
LINES.ADD(".");
|
|
|
|
FOR I := 1 STEP 1 UNTIL LINES.SIZE DO
|
|
BEGIN
|
|
OUTINT(I, 0); OUTTEXT(": ");
|
|
OUTTEXT(LINES.GET(I)); OUTIMAGE;
|
|
END;
|
|
|
|
|
|
REALS :- NEW REALARRAYLIST;
|
|
FOR I := 1 STEP 1 UNTIL 10 DO
|
|
REALS.ADD(I * I);
|
|
|
|
FOR I := 1 STEP 1 UNTIL REALS.SIZE DO
|
|
BEGIN
|
|
OUTINT(I, 4); OUTTEXT(": ");
|
|
OUTFIX(REALS.GET(I),2,10); OUTIMAGE;
|
|
END;
|
|
|
|
FOR I := REALS.SIZE STEP - 2 UNTIL 1 DO
|
|
REALS.REMOVE(I);
|
|
|
|
FOR I := 1 STEP 1 UNTIL REALS.SIZE DO
|
|
BEGIN
|
|
OUTINT(I, 4); OUTTEXT(": ");
|
|
OUTFIX(REALS.GET(I),2,10); OUTIMAGE;
|
|
END;
|
|
|
|
END;
|