Matrix transposition: Difference between revisions

Content added Content deleted
(Added D code)
Line 155: Line 155:
NEXT rows
NEXT rows


=={{header|D}}==
<pre>module mxtrans ;
import std.stdio ;
import std.string ;

bool isRectangular(T)(T[][] a){
if(a.length < 1 || a[0].length < 1)
return false ;
for(int i = 1 ; i < a.length; i++)
if(a[i].length != a[i-1].length)
return false ;
return true ;
}

T[][] transpose(T=real)(T[][] a) {
T[][] res ;
if(isRectangular(a)){
res = new T[][](a[0].length, a.length) ;
for(int i = 0 ; i < a.length ; i++)
for(int j = 0 ; j < a[0].length ; j++) {
res[j][i] = a[i][j] ;
}
} else
throw new Exception("Transpose Error") ;
return res ;
}

string toString(T=real)(T[][] a){ // for pretty print
string[] s;
foreach(e ; a)
s ~= format("%8s", e)[1..$-1] ;
return "\n<" ~ join(s,"\n ") ~ ">" ;
}

void main() {
float[][] n, m = [[0.5,0,0,1],[0.0,0.5,0,0],[0.0,0,0.5,-1]] ;

writefln(" m = ", m.toString()) ;
n = m.transpose() ;
writefln(" n (m's transpose) = ", n.toString()) ;
}</pre>
=={{header|IDL}}==
=={{header|IDL}}==