查看單個文章
舊 2009-10-09, 01:06 AM   #16 (permalink)
cwvdavid
長老會員
 
cwvdavid 的頭像
榮譽勳章
UID - 476
在線等級: 級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時
註冊日期: 2002-12-06
住址: 天與地的夾縫
文章: 3106
精華: 0
現金: 5256 金幣
資產: 2034465 金幣
預設

第一題
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進位)


================================
我在算題目時,基本上是不用公式的,
但你現在學的還沒有到程式部份,還是理論,所以必須要去了解公式在寫些什麼...
不然後面什麼都不用玩了...

課本的題目都是依順序排列的,
第一題沒有算出來,第二題一定看不懂,第三題也不用看了...
後面就都完了...

(公式看不懂要問老師, 不要什麼都不問, 再不然問妹妹也可以呀)
__________________
姜太公釣魚~ 願者上鉤
cwvdavid 目前離線  
送花文章: 4036, 收花文章: 2466 篇, 收花: 10141 次
回覆時引用此帖
有 2 位會員向 cwvdavid 送花:
9319074 (2009-10-09),magicwoo (2009-10-09)
感謝您發表一篇好文章