6 votes

39 )

Suppose a multidimensional array is declared as m(2:8,-4:1,6:10). If the base address is 200 and there are 4 words per memory location, then the address of A[5,-1,8] by using row order is ______.

Suppose a multidimensional array is declared as m(2:8,-4:1,6:10). If the base address is 200 and there are 4 words per memory location, then the address of A[5,-1,8] by using row order is ______.

1

It is interpreted as :-

A 3-D array whose frame no. Starts from 2 and ends at 8.

Total no. Of frames = (8-2+1)=7

In each frame, there are (-4:1,6:10) rows and columns respectively.

Which means (1-(-4)+1)=6 rows and (10-6+1)=5 columns.

Ultimately, there are 7 frames and each has 6 rows and 5 columns.

You can refer to the answer's diagram to get an idea.

A 3-D array whose frame no. Starts from 2 and ends at 8.

Total no. Of frames = (8-2+1)=7

In each frame, there are (-4:1,6:10) rows and columns respectively.

Which means (1-(-4)+1)=6 rows and (10-6+1)=5 columns.

Ultimately, there are 7 frames and each has 6 rows and 5 columns.

You can refer to the answer's diagram to get an idea.

9 votes

Best answer

I have drawn a sketch of 3-D array to give a rough idea about how it looks like..it consists of many 2-D arrays also referred as Frames.

First see the no. of frames already crossed(given by the 1st dimension).. this means finding out how many elements of frames have already been covered. For that find (no. Of rows * no. Of columns)*no. Of frames given.

After reaching that particular frame, treat the sum as a simple 2-D array sum.

0

can you please explain how it will work with column major

Suppose a multidimensional array is declared as m(1:8,-5:5,-10:5). If the base address is 200 and there are 4 words per memory location, then the address of A[3,3,3] by using column order is ______.

Suppose a multidimensional array is declared as m(1:8,-5:5,-10:5). If the base address is 200 and there are 4 words per memory location, then the address of A[3,3,3] by using column order is ______.

0

#rows = 5-(-5)=1 =11

#columns = 5-(-10)+1 =16

The 1st part should remain same like frame 1 and 2 are fully covered in A[3,3,3]. So 2frames*#rows*#columns = 2*11*16 = 352 --(i)

The 2nd part changes for column major : A[i,j,k]

(k-LSB)*#rows + (j-LSB)

By putting the values i got 143+8 --(ii)

i) + ii) = 503.

Base + 4B*503 =2212

I don't know how 5240 can be the answer. If you know the solution please share it here.

#columns = 5-(-10)+1 =16

The 1st part should remain same like frame 1 and 2 are fully covered in A[3,3,3]. So 2frames*#rows*#columns = 2*11*16 = 352 --(i)

The 2nd part changes for column major : A[i,j,k]

(k-LSB)*#rows + (j-LSB)

By putting the values i got 143+8 --(ii)

i) + ii) = 503.

Base + 4B*503 =2212

I don't know how 5240 can be the answer. If you know the solution please share it here.

0

ok i am sorry i did not notice that.

I am following this for row major and what change i need to do for columns major ?

int k = C[i][j][k].

It means we have to cross, i 2D arrays, j 1D arrays, and k elements to reach our required element.

= B.A + (i_2D_arrays*no._elements_In_1_2D_Array + j*no._elements_in_1_1D_Array + k)*intsize

=B.A + (i_2D_arrays*no._elements_In_1_2D_Array*instsize + j*no._elements_in_1_1D_Array*intsize + k*intsize)

I am following this for row major and what change i need to do for columns major ?

int k = C[i][j][k].

It means we have to cross, i 2D arrays, j 1D arrays, and k elements to reach our required element.

= B.A + (i_2D_arrays*no._elements_In_1_2D_Array + j*no._elements_in_1_1D_Array + k)*intsize

=B.A + (i_2D_arrays*no._elements_In_1_2D_Array*instsize + j*no._elements_in_1_1D_Array*intsize + k*intsize)

1

Address = B.A + ((i**-LSB**)_2D_arrays*no._elements_In_1_2D_Array*instsize + **(k-LSB)*no._of_rows***intsize + **(j-LSB)***intsize)

The bold parts are the correction. You were almost right :)

1 vote