史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   懂java陣列的人來幫忙一下吧,感恩 [圖已經附上] (http://forum.slime.com.tw/thread253335.html)

cwvdavid 2009-10-09 01:06 AM

第一題
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 2009-10-09 02:01 AM

第三題,
用公式來導...

A(0: m-1, 0:n-1)
已知 s1 = 0, s2 = 0

接著已知 A(3,2) 在1110, A(2,3) 在1115
且元素佔一個空間,意即 d = 1


帶入公式(我繼續用第一題的公式)
A(i,j) = A(0,0) + ((i - s1) * n * d) + (( j - s2 ) * d)
A(i,j) = A(0,0) + ((i - 0) * n * 1) + (( j - 0 ) * 1)
A(i,j) = A(0,0) + (i * n) + j
(以上是簡化後的結果)

A(3,2) = A(0,0) + (3 * n) + 2 = 1110
→ A(0,0) + (3 * n) + 2 = 1110
→ A(0,0) + (3 * n) = 1108
→ A(0,0) = 1108 - (3 * n)

A(2,3) = A(0,0) + (3 * n) + 2 = 1115
→ A(0,0) + (2 * n) + 3 = 1115
→ A(0,0) + (2 * n) = 1112
→ A(0,0) = 1112 - (2 * n)

再將2者 拿來比較
1108 - (3 * n) = 1112 - (2 * n)
1108 - n = 1112

可以得到 n = -4 ...(行數是-4.........)

...到這裡出了問題了
因此,這個陣列【並不是 以列為主

========================
算我倒楣!!(對你來說是幸運,可以看到用錯公式時的情形)
...
所以,再重算一次,改用另一個公式,以行為主

A(i,j) = A(0,0) + ((j - s2) * m * d) + (( i - s1 ) * d)
A(i,j) = A(0,0) + ((j - 0) * m * 1) + (( i - 0 ) * 1)
A(i,j) = A(0,0) + (j * m) + i
(以上是簡化後的結果)

A(3,2) = A(0,0) + (2 * m) + 3 = 1110
→ A(0,0) + (2 * m) + 3 = 1110
→ A(0,0) + (2 * m) = 1107
→ A(0,0) = 1107 - (2 * m)

A(2,3) = A(0,0) + (3 * m) + 2 = 1115
→ A(0,0) + (3 * m) + 2 = 1115
→ A(0,0) + (3 * m) = 1113
→ A(0,0) = 1113 - (3 * m)

1107 - (2 * m) = 1113 - (3 * m)
1107 = 1113 - m
m = 6 因此...陣列大小A(0 : m-1, 0 : n-1)

就是 A(0:5, 0: n-1)
由於題目只問到 A(1:4),所以 n 大於 4... n=5,6,7... n=無限大 也可以
(在這裡... n 用不到了...)

接下來,算一下A(0,0)的位置...
A(3,2) = A(0,0) + (2 * m) + 3 = 1110
A(3,2) = A(0,0) + (2 * 6) + 3 = 1110
A(3,2) = A(0,0) + 15 = 1110
A(0,0) = 1110 - 15 = 1095


A(2,3) = A(0,0) + (3 * m) + 2 = 1115
A(2,3) = A(0,0) + (3 * 6) + 2 = 1115
A(2,3) = A(0,0) + 20 = 1115
A(0,0) = 1115 - 20 = 1095

經由上面2個座標比對,確定A(0,0)是1095

最後,再計算 A(1,4)的值
A(1,4) = A(0,0) + (j * m) + i
A(1,4) = 1095 + (4 * 6) + 1
A(1,4) = 1095 + 25
A(1,4) = 1120 !!!!


(明明應該是你自己要看的公式,你自己都掃瞄了,也貼上來了
結果變成是我得幫你寫出來...........唉..........)

上面這一題的陷阱就是 【以行為主】 v.s 【以列為主】
而要弄的懂,最好是把第二題,也算一算....

也就是說:最好是從第一題開始算,算完之後再算第二題,再算第三題...
當你全部的習題都會算的時候,你這一章才能算是 真的了解了....

而你如果中間的題目就這麼跳過去,不看了,
那你後面的章節只會更痛苦.....

(很多資工科系,資管科系的學生  之所以會裁在程式設計的課程,
就是因為一開始沒弄懂,後面更痛苦,最後放棄....)

cwvdavid 2009-10-09 03:36 AM

引用:

作者: 9319074 (文章 2195590)
關於第三題,我是看懂了,然後接下來?

你打的:(以上要先看的懂才能繼續往下講,所以...你先吸收一下吧)



上面的公式算法講完,
接下來講一般的(當你不知道公式,而又需要了解陣列計算結果時,
用Excel來模擬是最方便的)

Excel 是由 A,B,C,D..以及1,2,3,4所組成的表格,
其呈現方式就如同二維陣列一樣

A1, B1, C1, D1.....
A2, B2, C2, D2.....
A3, B3, C3, D3.....


因此,用Excel來模擬陣列配置時,就可以配置出
[A,1], [B,1], [C,1], [D,1], [E,1], [F,1], [G,1], [H,1]...
[A,2], [B,2], [C,2], [D,2], [E,2], [F,2], [G,2], [H,2]...
[A,3], [B,3], [C,3], [D,3], [E,3], [F,3], [G,3], [H,3]...
[A,4], [B,4], [C,4], [D,4], [E,4], [F,4], [G,4], [H,4]...
[A,5], [B,5], [C,5], [D,5], [E,5], [F,5], [G,5], [H,5]...
...
...(上面的A1, B1, C1,就是下面陣列的 A[0,0], A[1,0], A[2,0]
...已經知道A[2,3]是1115以及A[3,2]是1110時,就把數字填到上面的Excel方格內
...填入
...再直接用人工去一格一格的算
...
A[0,0],A[1,0],A[2,0],A[3,0],A[4,0] ....
A[0,1],A[1,1],A[2,1],A[3,1],A[4,1] ....
A[0,2],A[1,2],A[2,2],A[3,2],A[4,2] ....
A[0,3],A[1,3],A[2,3],A[3,3],A[4,3] ....
A[0,4],A[1,4],A[2,4],A[3,4],A[4,4] ....



我再幫你畫一張圖好了(用Excel模擬的)
http://img79.imageshack.us/img79/409/22744518.png

cwvdavid 2009-10-09 04:05 AM

第5題

A(1) = A[1,1]
A(2) = A[1,2]
A(3) = A[2,2]
A(4) = A[2,1]

===========

A(5) = A[1,3]
A(6) = A[2,3]
A(7) = A[3,3]
A(8) = A[3,2]
A(9) = A[3,1]

===========

A(10) = A[1,4]
A(11) = A[2,4]
A(12) = A[3,4]
A(13) = A[4,4]
A(14) = A[4,3]
A(15) = A[4,2]
A(16) = A[4,1]

===========

A(17) = A[1,5]
A(18) = A[2,5]
A(19) = A[3,5]
A(20) = A[4,5]
A(21) = A[5,5]
A(22) = A[5,4]
A(23) = A[5,3]
A(24) = A[5,2]
A(25) = A[5,1]
...
...
以此類型,自己找一下數值之間的共通性吧

9319074 2009-10-09 08:14 AM

第一和第三題我是用推論的方法求出來的,

可以看15樓我說的。

第五題我是知道他是反英文字母L的累加,可是不知怎算而已。

因為老師是用點題目的方式叫我們寫作業0.0

我把我課堂的狀況用E貓告訴老師了,而且老師知道我的學習狀況了。

9319074 2009-10-09 08:17 AM

我1、3題我用我的推論方法寫出來交作業好了,

讓老師知道我學習狀況,你的解答,我還是會參考一下


所有時間均為台北時間。現在的時間是 01:27 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1