Create a two-dimensional array at runtime: Difference between revisions
Content added Content deleted
(Added solution for Action!) |
|||
Line 105: | 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! |
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 INT_SIZE="2" |
||
DEFINE CARD_SIZE="2" |
DEFINE CARD_SIZE="2" |
||
TYPE IntArray2D=[BYTE rows,cols |
TYPE IntArray2D=[BYTE rows,cols PTR p] |
||
BYTE FUNC GetNumber(CHAR ARRAY s) |
BYTE FUNC GetNumber(CHAR ARRAY s) |
||
Line 122: | Line 123: | ||
PROC Create(IntArray2D POINTER a) |
PROC Create(IntArray2D POINTER a) |
||
PTR ARRAY rowArray |
|||
BYTE row |
BYTE row |
||
IF a. |
IF a.p#0 THEN Break() FI |
||
rowArray=Alloc(a.rows*CARD_SIZE) |
rowArray=Alloc(a.rows*CARD_SIZE) |
||
a. |
a.p=rowArray |
||
FOR row=0 TO a.rows-1 |
FOR row=0 TO a.rows-1 |
||
DO |
DO |
||
Line 135: | Line 136: | ||
PROC Destroy(IntArray2D POINTER a) |
PROC Destroy(IntArray2D POINTER a) |
||
PTR ARRAY rowArray |
|||
BYTE row |
BYTE row |
||
IF a. |
IF a.p=0 THEN Break() FI |
||
rowArray=a. |
rowArray=a.p |
||
FOR row=0 TO a.rows-1 |
FOR row=0 TO a.rows-1 |
||
DO |
DO |
||
Free(rowArray(row),a.cols*INT_SIZE) |
Free(rowArray(row),a.cols*INT_SIZE) |
||
OD |
OD |
||
Free(a. |
Free(a.p,a.rows*CARD_SIZE) |
||
a. |
a.p=0 |
||
RETURN |
RETURN |
||
PROC SetValue(IntArray2D POINTER a BYTE row,col INT v) |
PROC SetValue(IntArray2D POINTER a BYTE row,col INT v) |
||
PTR ARRAY rowArray |
|||
INT ARRAY colArray |
INT ARRAY colArray |
||
IF a. |
IF a.p=0 OR row>=a.rows OR col>=a.cols THEN |
||
Break() |
Break() |
||
FI |
FI |
||
rowArray=a. |
rowArray=a.p |
||
colArray=rowArray(row) |
colArray=rowArray(row) |
||
colArray(col)=v |
colArray(col)=v |
||
Line 161: | Line 162: | ||
INT FUNC GetValue(IntArray2D POINTER a BYTE row,col) |
INT FUNC GetValue(IntArray2D POINTER a BYTE row,col) |
||
PTR ARRAY rowArray |
|||
INT ARRAY colArray |
INT ARRAY colArray |
||
IF a. |
IF a.p=0 OR row>=a.rows OR col>=a.cols THEN |
||
Break() |
Break() |
||
FI |
FI |
||
rowArray=a. |
rowArray=a.p |
||
colArray=rowArray(row) |
colArray=rowArray(row) |
||
RETURN (colArray(col)) |
RETURN (colArray(col)) |
||
Line 201: | Line 202: | ||
a.rows=GetNumber("rows") |
a.rows=GetNumber("rows") |
||
a.cols=GetNumber("cols") |
a.cols=GetNumber("cols") |
||
a. |
a.p=0 |
||
TestCreate(a) |
TestCreate(a) |