www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - rectangular matrix

reply nix <nix_member pathlink.com> writes:
Hallo,  
 
i try to built a rectangular matrix. 
 
1 0 0      1 0 0 0   
0 1 0
or  0 1 0 0 or 5 times and so on 
0 0 1      0 0 1 0 
           0 0 0 1
int main() { 
        int[][] matrix; 
 
        matrix.length=3;
matrix[0].length=3; 
        for (int i=0; i < 3; i++){ 
                for
(int j=0; j < 3; j++){ 
                        if (i == j) {
matrix[j][i] = 1; 
                        } else {
matrix[j][i] = 0; 
                        } 
 
                } 
        }
return 0; 
} 
 
I get the following error message: 
Error: ArrayBoundsError
darr.d(11) 
 
This is line 11: matrix[j][i] = 0; 
 
 
  
 
  
Nov 12 2004
next sibling parent reply larrycowan <larrycowan_member pathlink.com> writes:
Instead of matrix[0].length = 3;
Use matrix[i].length = 3;
and put it between the 2 for loops.

In article <cn2bk2$7c8$1 digitaldaemon.com>, nix says...
Hallo,  
 
i try to built a rectangular matrix. 
 
1 0 0      1 0 0 0   
0 1 0
or  0 1 0 0 or 5 times and so on 
0 0 1      0 0 1 0 
           0 0 0 1
int main() { 
        int[][] matrix; 
 
        matrix.length=3;
matrix[0].length=3; 
        for (int i=0; i < 3; i++){ 
                for
(int j=0; j < 3; j++){ 
                        if (i == j) {
matrix[j][i] = 1; 
                        } else {
matrix[j][i] = 0; 
                        } 
 
                } 
        }
return 0; 
} 
 
I get the following error message: 
Error: ArrayBoundsError
darr.d(11) 
 
This is line 11: matrix[j][i] = 0; 
 
 
  
 
  

Nov 12 2004
next sibling parent nix <nix_member pathlink.com> writes:
Thank you for the hint. 
 
In article <cn2f3d$cm5$1 digitaldaemon.com>,
larrycowan says... 
 
Instead of matrix[0].length = 3; 
Use matrix[i].length

and put it between the 2 for loops. 
 
In article

 
Hallo,   
  
i try to


  
1 0 0      1 0 0 0    
0 1 0 
or  0 1 0


0 0 1      0 0 1 0  
           0 0 0 1 
int


        int[][] matrix;  
  
        matrix.length=3;
matrix[0].length=3;  
        for (int i=0; i < 3; i++){  
                for 
(int j=0; j < 3; j++){  
                        if (i == j) { 
matrix[j][i] = 1;  
                        } else { 
matrix[j][i] = 0;  
                        }  
  
                }  
        } 
return 0;  
}  
  
I get the following error message:  
Error: ArrayBoundsError 
darr.d(11)  
  
This is line 11: matrix[j][i] = 0;  
  
  
   
  
   
 
 


Nov 12 2004
prev sibling parent Burton Radons <burton-radons smocky.com> writes:
larrycowan wrote:
 Instead of matrix[0].length = 3;
 Use matrix[i].length = 3;
 and put it between the 2 for loops.

Optionally, this will require fewer allocations: template Matrix (Type) { Type [] [] allocate (size_t a, size_t b, Type [] array) { Type [] [] result; if (a && b) assert (size_t.max / a >= b); assert (array.length >= a * b); result = new Type [] [a]; size_t index = 0; foreach (inout Type [] item; result) { item = array [index .. index + b]; index += b; } return result; } Type [] [] allocate (size_t a, size_t b) { return allocate (a, b, new Type [a * b]); } } float [] [] matrix = Matrix! (float).allocate (16, 16); There should also be efficient resize and right/down-shifting (inserting space into the left or top of the matrix) functions; give me a second.
Nov 12 2004
prev sibling parent Buchan <kbuchan xtra.co.nz> writes:
On Fri, 12 Nov 2004 12:51:14 +0000 (UTC), nix <nix_member pathlink.com>  
wrote:

 Hallo,
 i try to built a rectangular matrix.
 1 0 0      1 0 0 0
 0 1 0
 or  0 1 0 0 or 5 times and so on
 0 0 1      0 0 1 0
            0 0 0 1
 int main() {
         int[][] matrix;
        matrix.length=3;
 matrix[0].length=3;
         for (int i=0; i < 3; i++){
                 for
 (int j=0; j < 3; j++){
                         if (i == j) {
 matrix[j][i] = 1;
                         } else {
 matrix[j][i] = 0;
                         }
                }
         }
 return 0;
 }
 I get the following error message:
 Error: ArrayBoundsError
 darr.d(11)
 This is line 11: matrix[j][i] = 0;

Whats wrong with int[3][3] matrix? Then at least the compiler knows how big it is... unless you want to figure out how big they are at RT. (Its also faster and in one block of memory, meaning you can do more tricks) -- Using Opera's revolutionary e-mail client: http://www.opera.com/m2/
Nov 13 2004