Create a two-dimensional array at runtime: Difference between revisions

m
(Added solution for Action!)
Line 105:
INCLUDE "D2:ALLOCATE.ACT" ;from the Action! Tool Kit. You must type 'SET EndProg=*' from the monitor after compiling, but before running this program!
 
DEFINE PTR="CARD"
DEFINE INT_SIZE="2"
DEFINE CARD_SIZE="2"
TYPE IntArray2D=[BYTE rows,cols CARDPTR ptrp]
 
BYTE FUNC GetNumber(CHAR ARRAY s)
Line 122 ⟶ 123:
 
PROC Create(IntArray2D POINTER a)
CARDPTR ARRAY rowArray
BYTE row
 
IF a.ptrp#0 THEN Break() FI
rowArray=Alloc(a.rows*CARD_SIZE)
a.ptrp=rowArray
FOR row=0 TO a.rows-1
DO
Line 135 ⟶ 136:
 
PROC Destroy(IntArray2D POINTER a)
CARDPTR ARRAY rowArray
BYTE row
 
IF a.ptrp=0 THEN Break() FI
rowArray=a.ptrp
FOR row=0 TO a.rows-1
DO
Free(rowArray(row),a.cols*INT_SIZE)
OD
Free(a.ptrp,a.rows*CARD_SIZE)
a.ptrp=0
RETURN
 
PROC SetValue(IntArray2D POINTER a BYTE row,col INT v)
CARDPTR ARRAY rowArray
INT ARRAY colArray
 
IF a.ptrp=0 OR row>=a.rows OR col>=a.cols THEN
Break()
FI
rowArray=a.ptrp
colArray=rowArray(row)
colArray(col)=v
Line 161 ⟶ 162:
 
INT FUNC GetValue(IntArray2D POINTER a BYTE row,col)
CARDPTR ARRAY rowArray
INT ARRAY colArray
 
IF a.ptrp=0 OR row>=a.rows OR col>=a.cols THEN
Break()
FI
rowArray=a.ptrp
colArray=rowArray(row)
RETURN (colArray(col))
Line 201 ⟶ 202:
a.rows=GetNumber("rows")
a.cols=GetNumber("cols")
a.ptrp=0
 
TestCreate(a)
Anonymous user