第一題
A(0,0)位於 1204(8)= 644(10)
A(2,2)位於 1244(8)= 676(10)
2者的位置相差了 32....
而題目並沒有提到 每個元素佔用多少空間,因此一般來說, d=1
接著我們得先算出 陣列的大小
依照你的書本...第二張圖的公式
若陣列大小為:A(s1 : u1, s2 : u2)
則...
陣列的列數為:u1 - s1 + 1
陣列的行數為:u2 - s2 + 1
而計算位址A(i,j)的公式為
A0 + ((i - s1) * n * d) + (( j - s2 ) * d)
或是
A0 + ((i - s2) * m * d) + (( j - s1 ) * d)
用第一種來算的話...
因為A(0,0)一般來說是最小的位置,再加上課本沒有額外設定 負數的座標,所以可以確定
s1=0, s2=0
將A(2,2)帶進公式計算
676 = 644 + ((2 - s1) * n * 1) + (( 2 - s2 ) * 1)
32 = (2 - s1)n + 2 - s2
30 = (2 - s1)n - s2
0 = (2 - s1)n - s2 - 30
0 = 2n - 30
n = 15 (行數有15行)
最後可以知道陣列大小為 A(0:m, 0:14)
也因為題目只問到A(3,3),所以可以假設 m為4 ~ 無限大...
也就是說整個陣列是...
A(0:3, 0:14)
A(0:4, 0:14)
A(0:5, 0:14)
...
...
A(0:100, 0:14)
...
A(0:無限大, 0:14)
故...一個一個列出來的話...
A(0:0) = 644
A(0:1) = 645
...
A(0:10) = 654
...
A(0:14) = 658
A(1:0) = 659
A(1:1) = 660
...
A(1:14) = 673
A(2:0) = 674
A(2:1) = 675
A(2:2) = 676
...
A(2:14) = 688
A(3:0) = 689
A(3:1) = 690
A(3:2) = 691
A(3:3) = 692(10進位) = 1264(8進位)
如果要直接套公式...
計算位址A(3,3)的公式
A0 + ((i - s1) * n * d) + (( j - s2 ) * d)
= 644 + ((3 - 0) * 15 * 1) + (( 3 - 0 ) * 1)
= 644 + 45 + 3
= 692(10進位) = 1264(8進位)
================================
我在算題目時,基本上是不用公式的,
但你現在學的還沒有到程式部份,還是理論,所以必須要去了解公式在寫些什麼...
不然後面什麼都不用玩了...
課本的題目都是依順序排列的,
第一題沒有算出來,第二題一定看不懂,第三題也不用看了...
後面就都完了...
(公式看不懂要問老師, 不要什麼都不問, 再不然問妹妹也可以呀)
|