Module Matrix_Transpose { dim a(3,4) as long, b() a(0,0)=1,2,3,4 a(1,0)=5,6,7,8 a(2,0)=9,10,11,12 open "out.txt" for output as #f showarray("a()", &a()) b()=@transpose(a()) showarray("transpose to", &b()) dim a(3,1) a(0,0)=1,2,3 showarray("a()", &a()) b()=@transpose(a()) showarray("transpose to", &b()) // Using arrays with square brackets: long a[2][0] // second dimension adjust also from items (for each sub array) a[0][0]=1,2,3,4 a[1][0]=5,6,7,8 a[2][0]=9,10,11,12 showarray2("a[][]", a) // transpose has to know the type to define the new one b=@transposeLong(a) showarray2("transpose to", b) long c[2][0] c[0][0]=1 c[1][0]=2 c[2][0]=3 showarray2("c[]", c) b=@transposeLong(c) showarray2("transpose to", b) ' we can use Variant type as return type d=@transposeAny(b) showarray2("transpose to", d) close #f win "out.txt" ' open out.txt from default application for *.txt files sub showarray(title$, &a()) print #f, title$+": ("; local boolean z=dimension(a(),1,1)=0 for i=0 to dimension(a(),1,1) if i>0 then print #f, ", "; print #f, "("; if dimension(a(),2,1)>1 then for j=0 to dimension(a(),2,1)-1 print #f, a(i, j)+", "; next print #f, a(i, j)+")"; else print #f, a(i, 0)+",)"; end if next if z then print #f, ",)" else print #f, ")" end sub sub showarray2(title$, a as *Long) ' handle with one or zero sub arrays print #f, title$+": ["; for i=0 to len(a)-1 if i>0 then print #f, ", "; if valid(len(a[i])) then print #f, "["; if len(a[i])>1 then for j=0 to len(a[i])-2 print #f, a[i][j]+", "; next else j=0 end if print #f, a[i][j]+"]"; else print #f, a[i]; end if next print #f, "]" end sub function transposeLong(a as *long) Local long R=Len(a)-1 ' upper bound dim 1 Local long L=len(a[0])-1 ' upper bound dim 2 local long b[L][R] for i=0 to L for j=0 to R b[i][j]=a[j][i] next next =b End Function function transposeAny(a) if not valid(a[0][0]) then Error "Wrong Type" Local long R=Len(a)-1 ' upper bound dim 1 Local long L=len(a[0])-1 ' upper bound dim 2 local Variant b[L][R] for i=0 to L for j=0 to R b[i][j]=a[j][i] next next =b End Function function transpose(a as array) // we use a as pointer to array // if we use transpose(a()) we get a copy on a() // so we make one copy only // copy a to a() Local a() a()=a push &a Read new &b() Local long R=dimension(a(),1,1) ' upper bound dim 1 Local long L=dimension(a(),2,1) ' upper bound dim 2 ' this is a redim, and preserve the array type also Dim a(L+1,R+1) for i=0 to L for j=0 to R a(i,j)=b(j, i) next next =a() End Function } Matrix_Transpose