Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
95
Task/Array-concatenation/Simula/array-concatenation.simula
Normal file
95
Task/Array-concatenation/Simula/array-concatenation.simula
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
BEGIN ! Concatenate arrays - of REAL, here;
|
||||
|
||||
CLASS REAL_ARRAY(N); INTEGER N;
|
||||
BEGIN
|
||||
REAL ARRAY DATA(1:N);
|
||||
|
||||
! Return a new REAL_ARRAY containing
|
||||
! the values from this REAL_ARRAY
|
||||
! followed by the values from other;
|
||||
REF(REAL_ARRAY) PROCEDURE CONCAT(other);
|
||||
REF(REAL_ARRAY) other;
|
||||
BEGIN
|
||||
REF(REAL_ARRAY) C;
|
||||
INTEGER I;
|
||||
|
||||
C :- NEW REAL_ARRAY(N + other.N);
|
||||
|
||||
FOR I := 1 STEP 1 UNTIL N DO
|
||||
C.DATA(I) := DATA(I);
|
||||
|
||||
FOR I := 1 STEP 1 UNTIL other.N DO
|
||||
C.DATA(N + I) := other.DATA(I);
|
||||
|
||||
CONCAT :- C;
|
||||
END;
|
||||
|
||||
! Fill DATA;
|
||||
REF(REAL_ARRAY) PROCEDURE linearFill(start, stride);
|
||||
REAL start, stride;
|
||||
BEGIN
|
||||
linearFillFrom(DATA, 1, N, start, stride);
|
||||
linearFill :- this REAL_ARRAY
|
||||
END;
|
||||
|
||||
PROCEDURE out(sink); REF(printfile) sink;
|
||||
BEGIN
|
||||
INTEGER i;
|
||||
FOR i := 1 STEP 1 UNTIL N DO
|
||||
sink.OUTFIX(DATA(i), 2, 7);
|
||||
sink.OUTIMAGE;
|
||||
END;
|
||||
END REAL_ARRAY;
|
||||
|
||||
! "The problem" is not array as an input parameter:
|
||||
! I don't know how to
|
||||
! "pass a new ARRAY out of a PROCEDURE";
|
||||
REF(REAL_ARRAY) PROCEDURE concatenate(a, b);
|
||||
REAL ARRAY a, b;
|
||||
BEGIN
|
||||
INTEGER i, a_, N, b_, M;
|
||||
REF(REAL_ARRAY) c;
|
||||
a_ := LOWERBOUND(a, 1) - 1;
|
||||
N := UPPERBOUND(a, 1) - a_;
|
||||
b_ := LOWERBOUND(a, 1) - 1;
|
||||
M := UPPERBOUND(b, 1) - b_;
|
||||
c :- NEW REAL_ARRAY(N + M);
|
||||
|
||||
FOR i := 1 STEP 1 UNTIL N DO
|
||||
c.DATA(i) := a(a_+i);
|
||||
! for readability, don't
|
||||
! reduce one index expression to a variable
|
||||
FOR i := 1 STEP 1 UNTIL M DO
|
||||
c.DATA(N + i) := b(b_+i);
|
||||
|
||||
concatenate :- c;
|
||||
END concatenate REAL ARRAYs;
|
||||
|
||||
! two more convenience PROCEDUREs;
|
||||
PROCEDURE linearFillFrom(a, from, inclusive, start, stride);
|
||||
REAL ARRAY a; ! passed by reference;
|
||||
INTEGER from, inclusive;
|
||||
REAL start, stride;
|
||||
BEGIN
|
||||
INTEGER i;
|
||||
FOR i := from STEP 1 UNTIL inclusive DO
|
||||
a(i) := start + stride * (i - from)
|
||||
END;
|
||||
PROCEDURE linearFill(a, start, stride);
|
||||
REAL ARRAY a;
|
||||
REAL start, stride;
|
||||
linearFillFrom(a, LOWERBOUND(a, 1), UPPERBOUND(a, 1),
|
||||
start, stride);
|
||||
|
||||
|
||||
REF(REAL_ARRAY) X;
|
||||
REAL ARRAY u(1:3), v(1:4);
|
||||
linearFill(u, 3, 7);
|
||||
linearFill(v, 0, 5);
|
||||
concatenate(u, v).out(SYSOUT);
|
||||
|
||||
X :- NEW REAL_ARRAY(3).linearFill(1, 2);
|
||||
X.out(SYSOUT);
|
||||
X.CONCAT(NEW REAL_ARRAY(4)
|
||||
.linearFill(-1, -3)).out(SYSOUT);
|
||||
END.
|
||||
Loading…
Add table
Add a link
Reference in a new issue