Jump to content

Arrays: Difference between revisions

4,424 bytes added ,  7 years ago
Line 4,963:
STATIC AT 4: 10
DYNAMIC AT 4: 10
</pre>
=={{header|Simula}}==
<lang simula>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;
</lang>
{{out}}
<pre>EXPAND TO CAPACITY 20
NEW ITEMARRAY WITH 20 ELEMENTS
SIZE IS 1
SIZE IS 2
SIZE IS 3
SIZE IS 4
SIZE IS 5
SIZE IS 6
SIZE IS 7
SIZE IS 8
SIZE IS 9
SIZE IS 10
SIZE IS 11
SIZE IS 12
SIZE IS 13
SIZE IS 14
SIZE IS 15
SIZE IS 16
SIZE IS 17
SIZE IS 18
SIZE IS 19
SIZE IS 20
EXPAND TO CAPACITY 40
NEW ITEMARRAY WITH 40 ELEMENTS
SIZE IS 21
SIZE IS 22
SIZE IS 23
SIZE IS 24
SIZE IS 25
SIZE IS 26
1: WE
2: HAVE
3: SEEN
4: THAT
5: ARRAYS
6: ARE
7: A
8: VERY
9: CONVENIENT
10: WAY
11: OF
12: STORING
13: SIMPLE
14: VALUES
15: AND
16: REFERENCES
17: TO
18: MORE
19: COMPLEX
20: CLASS
21: OBJECTS
22: IN
23: AN
24: ORDERED
25: LIST
26: .
EXPAND TO CAPACITY 20
NEW ITEMARRAY WITH 20 ELEMENTS
SIZE IS 1
SIZE IS 2
SIZE IS 3
SIZE IS 4
SIZE IS 5
SIZE IS 6
SIZE IS 7
SIZE IS 8
SIZE IS 9
SIZE IS 10
1: 1.00
2: 4.00
3: 9.00
4: 16.00
5: 25.00
6: 36.00
7: 49.00
8: 64.00
9: 81.00
10: 100.00
1: 1.00
2: 9.00
3: 25.00
4: 49.00
5: 81.00
</pre>
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.