全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4129
推到 Plurk!
推到 Facebook!
[<<] [1] [2] [>>]

寫成迴圈

尚未結案
liyanzi
一般會員


發表:51
回覆:45
積分:19
註冊:2005-01-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-05 21:04:16 IP:218.172.xxx.xxx 未訂閱
不好意思~~各位大大~~之前有問過的連結路徑資料的問題    但現在是想問另外的問題~~想讓大家了解我的問題    所以有重覆的地方,請各位大大見諒!!    我在資料庫中~~分別有number、an_road_numeral、 roadname、road_numeral、road、an_road、head、temp這些欄位 number是按照順序, temp成功路(第一列)那列為0,而就從0.1.2.3...順序排下來 an_road_numeral:另一條連接道路的距離 roadname:路名 road_numeral:連接道路的距離 road:連接道路的節點號碼 an_road:另一條連接道路的節點號碼 整個小型路網圖為下: 如果我以下原本的路徑資料的話
    for ( int i = 0; i < 10; i++ )
delete_road[ i ] = new Save_roadname ;
head = new DList ;//先將其設為NULL
find_head = new DList ;
for ( int i = 0; i < 10; i++ )
temp_road[ i ] = new DList ;
all_num = 0 ;
DList *pointer, *temp[10] ;
for ( int i = 0; i < 10; i++ )
temp[ i ] = new DList ;    head -> number = 1 ;
head -> roadname = "成功路" ;
ComboBox1 -> Items -> Add( head -> roadname ) ;
head -> road = temp[ 0 ] ; // 成功 -> 自由
head -> road_numeral = 35 ;
head -> an_road = NULL ; // 無
head -> an_road_numeral = 0 ;    temp[ 0 ] -> number = 2 ;
temp[ 0 ] -> roadname = "自由路" ;
ComboBox1 -> Items -> Add( temp[ 0 ] -> roadname ) ;
temp[ 0 ] -> road = temp[ 1 ] ; // 自由 -> 博愛
temp[ 0 ] -> road_numeral = 45 ;
temp[ 0 ] -> an_road = temp[ 2 ] ; // 自由 -> 中正
temp[ 0 ] -> an_road_numeral = 30 ;    temp[ 1 ] -> number = 3 ;
temp[ 1 ] -> roadname = "博愛路" ;
ComboBox1 -> Items -> Add( temp[ 1 ] -> roadname ) ;
temp[ 1 ] -> road = temp[ 3 ] ; // 博愛 -> 仁愛
temp[ 1 ] -> road_numeral = 25 ;
temp[ 1 ] -> an_road = NULL ; // 無
temp[ 1 ] -> an_road_numeral = 0 ;    temp[ 2 ] -> number = 4 ;
temp[ 2 ] -> roadname = "中正路" ;
ComboBox1 -> Items -> Add( temp[ 2 ] -> roadname ) ;
temp[ 2 ] -> road = temp[ 3 ]; // 中正 -> 仁愛
temp[ 2 ] -> road_numeral = 45 ;
temp[ 2 ] -> an_road = temp[ 4 ]; // 中正 -> 中山
temp[ 2 ] -> an_road_numeral = 130 ;    temp[ 3 ] -> number = 5 ;
temp[ 3 ] -> roadname = "仁愛路" ;
ComboBox1 -> Items -> Add( temp[ 3 ] -> roadname ) ;
temp[ 3 ] -> road = temp[ 4 ] ; // 仁愛 -> 中山
temp[ 3 ] -> road_numeral = 100 ;
temp[ 3 ] -> an_road = temp[6] ; // 仁愛->安和
temp[ 3 ] -> an_road_numeral = 70 ;    temp[ 4 ] -> number = 6 ;
temp[ 4 ] -> roadname = "中山路" ;
ComboBox1 -> Items -> Add( temp[ 4 ] -> roadname ) ;
temp[ 4 ] -> road = NULL;//無
temp[ 4 ] -> road_numeral = 0
temp[ 4 ] -> an_road = NULL ; // 無
temp[ 4 ] -> an_road_numeral = 0 ;    
現在我是能從資料庫抓到值了 例如 第一條路 head->number=1; head -> roadname = "成功路" ; 寫成~~head->number=資料庫抓的值; 我寫成~~head->roadname=資料庫抓的值; 第二條路.....以此類推 但~~現在只有少少的幾條路~~就要寫很多 想變成更精簡的程式~~就是能用迴圈寫~~ 想知道是否有連接道路的話 就判斷資料庫裡的 road 跟an_road 這兩個欄位是否有為0 如果這兩欄為0就代表終點,這我大概可試出來~~ 但是像如判斷他後面有接路之後 又要去計算距離的話~~ 是想請問各位大大如果寫呢?
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-06 16:21:05 IP:61.229.xxx.xxx 未訂閱
如果沒有成為 cycle, ex: A → B → C → D → B → C → D ... 可以參考「資料結構」的 tree 把每一點當成一條路的 node, 要如何開始,尋找,結束,都有詳細的方法 恭喜你解決之前的問題了 ^_^
liyanzi
一般會員


發表:51
回覆:45
積分:19
註冊:2005-01-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-07 12:41:34 IP:59.113.xxx.xxx 未訂閱
引言: 如果沒有成為 cycle, ex: A → B → C → D → B → C → D ... 可以參考「資料結構」的 tree 把每一點當成一條路的 node, 要如何開始,尋找,結束,都有詳細的方法 恭喜你解決之前的問題了 ^_^
^_^謝謝喔~~ 不過我做了太久~~只能連成資料庫~>"< 但程式還需要再精簡~~=.="
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-08 10:54:27 IP:61.229.xxx.xxx 未訂閱
tree 的觀念剛好可以幫你縮減程式碼 在樹根(root, 相當於 temp[ 0 ] 或資料庫的第一筆資料)的時候,會紀錄下面要走的 node(相當於 temp[2]或資料庫的第二筆資料) 再找尋下一個 node 時,他會去拿出 temp[2] 來計算路程 直到 leaf 最後的目的地 重要的是「觀念」, node 就是陣列的 n-1 個索引或是第 n 筆資料庫, 剩下的處理,就看 tree 吧!
haman
中階會員


發表:46
回覆:137
積分:56
註冊:2005-03-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-08 19:10:44 IP:211.76.xxx.xxx 未訂閱
說到tree,就讓我想到有個"最短路徑演算法"倒是滿適合去計算距離的
liyanzi
一般會員


發表:51
回覆:45
積分:19
註冊:2005-01-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-08 21:26:21 IP:59.113.xxx.xxx 未訂閱
引言: 說到tree,就讓我想到有個"最短路徑演算法"倒是滿適合去計算距離的
這位大大~~我是在寫最短路徑沒錯阿!!^^ 最普遍的dijkstra演算法~~
liyanzi
一般會員


發表:51
回覆:45
積分:19
註冊:2005-01-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-08 21:31:51 IP:59.113.xxx.xxx 未訂閱
想請問各位大大~~ 我的第一筆資料~~也就是head指向的地方~~是不是不須更改!! head->number=資料庫抓的值; head->roadname=資料庫抓的值; ComboBox1 -> Items -> Add( head -> roadname ) ; head -> road = temp[ 0 ] ; // 成功 -> 自由 head -> road_numeral = 35 ; head -> an_road = NULL ; // 無 head -> an_road_numeral = 0 ; 然後從temp[0]開始以下的資料~~是否可寫成迴圈呢? 因為temp[]一直增加~~資料也大概都固定 就是(i=1;i<...;i )之類的 想請各位大大知道如何寫嗎??
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-09-11 20:17:15 IP:221.169.xxx.xxx 未訂閱
for (int i=0; i<(共幾筆資料);   i)
{
temp[ i ] -> number = (從recorder取出number) ;
temp[ i ] -> roadname = (從recorder取出roadname) ;
...
(recorder進到下一筆資料);
}
刮號內請依說明填寫code
liyanzi
一般會員


發表:51
回覆:45
積分:19
註冊:2005-01-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-09-13 23:23:16 IP:220.129.xxx.xxx 未訂閱
引言:
for (int i=0; i<(共幾筆資料);   i)
{
temp[ i ] -> number = (從recorder取出number) ;
temp[ i ] -> roadname = (從recorder取出roadname) ;
...
(recorder進到下一筆資料);
}
刮號內請依說明填寫code
感謝這位大大的回答~~~ 不好意思~~那想請問~~做完路名跟距離的迴圈之後 又要怎麼寫~~判斷他連接後面道路的迴圈呢?~~ 困擾中>"<
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-09-14 20:33:51 IP:221.169.xxx.xxx 未訂閱
不太懂你的問題,可以更具體一點嗎?舉個例子來說明...
liyanzi
一般會員


發表:51
回覆:45
積分:19
註冊:2005-01-24

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-09-14 21:55:18 IP:220.129.xxx.xxx 未訂閱
引言: 不太懂你的問題,可以更具體一點嗎?舉個例子來說明...
不好意思~~麻煩你了!!^^ 例如: temp[ 0 ] -> number = 2 ; temp[ 0 ] -> roadname = "自由路" ; ComboBox1 -> Items -> Add( temp[ 0 ] -> roadname ) ; temp[ 0 ] -> road = temp[ 1 ] ; // 自由 -> 博愛 temp[ 0 ] -> road_numeral = 45 ; temp[ 0 ] -> an_road = temp[ 2 ] ; // 自由 -> 中正 temp[ 0 ] -> an_road_numeral = 30 ; 如果像寫了迴圈 for (int i=0; i<(共幾筆資料); i) { temp[ i ] -> number = (從recorder取出number) ; temp[ i ] -> roadname = (從recorder取出roadname) ; ... (recorder進到下一筆資料); } 只能顯示出~~number 和 roadname 但以下 temp[ 0 ] -> road = temp[ 1 ] ; // 自由 -> 博愛 temp[ 0 ] -> road_numeral = 45 ; temp[ 0 ] -> an_road = temp[ 2 ] ; // 自由 -> 中正 temp[ 0 ] -> an_road_numeral = 30 ; 是要看~~資料庫欄位的road欄和an_road欄位~~接哪條路 而又看距離多少~~ 我就是~~這邊的迴圈寫不出來~~>"< 一直很困擾
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-09-15 18:02:07 IP:221.169.xxx.xxx 未訂閱
慢慢來,放輕鬆 temp[ 0 ] -> road = temp[ 1 ] ; // 自由 -> 博愛 等號右邊其實是對應到資料庫的road欄位 查一下表,roadname為自由路的這一列的road是多少?是3 3所指的是博愛路 但是博愛路是放在temp的第幾個索引呢?是1,也就是temp[1] 換下一個,博愛路的road對應的是5,也就是仁愛路,也就是temp[3] road的數值跟索引之間有什麼關係?兩者相差2! 故 temp[ 0 ] -> road = temp[ 1 ] ; 可改成 temp[ 0 ] -> road = temp[ (從recorder[0]取出road值)-2 ] ; 換成迴圈表示 temp[ i ] -> road = temp[ (從recorder[i]取出road值)-2 ] ; 另外,當然要檢查一下從DB取出的road值,像中山路的road值為0,放進去一定出錯
liyanzi
一般會員


發表:51
回覆:45
積分:19
註冊:2005-01-24

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-09-19 22:45:01 IP:59.113.xxx.xxx 未訂閱
引言: 慢慢來,放輕鬆 temp[ 0 ] -> road = temp[ 1 ] ; // 自由 -> 博愛 等號右邊其實是對應到資料庫的road欄位 查一下表,roadname為自由路的這一列的road是多少?是3 3所指的是博愛路 但是博愛路是放在temp的第幾個索引呢?是1,也就是temp[1] 換下一個,博愛路的road對應的是5,也就是仁愛路,也就是temp[3] road的數值跟索引之間有什麼關係?兩者相差2! 故 temp[ 0 ] -> road = temp[ 1 ] ; 可改成 temp[ 0 ] -> road = temp[ (從recorder[0]取出road值)-2 ] ; 換成迴圈表示 temp[ i ] -> road = temp[ (從recorder[i]取出road值)-2 ] ; 另外,當然要檢查一下從DB取出的road值,像中山路的road值為0,放進去一定出錯
不好意思~~這麼慢才回~~~ road的數值跟索引之間有什麼關係?兩者相差2! 這我有試出來喔~~~
liyanzi
一般會員


發表:51
回覆:45
積分:19
註冊:2005-01-24

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-09-23 12:33:07 IP:59.113.xxx.xxx 未訂閱
不好意思~發現小問題~~ 雖然說我舉的例子 road的數值跟索引之間有什麼關係?兩者相差2! 但實際上是看資料庫的道路~~後面有沒有連接 像有的就是null ,只是剛好這個碰巧是相差2 但~~我是不是要判斷road 跟an_road是否為0, 那又是要如何判斷呢??
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-09-23 20:34:55 IP:59.115.xxx.xxx 未訂閱
liyanzi 妳好:    雖然我比較清楚妳整個程式運作的概念,但是因為我這邊無法正常運作資料庫系統,無法做實際的測試,因此當初我才沒有加入本題的討論,但是看妳這一題到現在都還沒結案,因此我還是決定來試試看能不能幫上忙?下列是我參考妳上傳檔案內有關資料庫擷取欄位資料的程式碼修改出來的:
.... 前略 ....
head->number          = Table1->FieldValues["number"];
head->roadname        = Table1->FieldValues["roadname"];
head->road            = temp[ Table1->FieldValues["road"] ];
head->road_numeral    = Table1->FieldValues["road_numeral"];
head->an_road         = temp[ Table1->FieldValues["an_road"] ];
head->an_road_numeral = Table1->FieldValues["an_road_numeral"];
head->speed           = Table1->FieldValues["road_speed"];
head->an_speed        = Table1->FieldValues["an_road_speed"];
ComboBox1->Items->Add( head->roadname ) ;
for (int i=0; i<5; i  ) {
    Table1->Next() ;
    temp[i]->number          = Table1->FieldValues["number"];
    temp[i]->roadname        = Table1->FieldValues["roadname"];
    temp[i]->road            = temp[ Table1->FieldValues["road"] ];
    temp[i]->road_numeral    = Table1->FieldValues["road_numeral"];
    temp[i]->an_road         = temp[ Table1->FieldValues["an_road"] ];
    temp[i]->an_road_numeral = Table1->FieldValues["an_road_numeral"];
    temp[i]->speed           = Table1->FieldValues["road_speed"];
    temp[i]->an_speed        = Table1->FieldValues["an_road_speed"];
    ComboBox1->Items->Add( temp[i]->roadname ) ;
}
.... 後略 ....
妳試試看是否符合妳所需? 7 天天敲鍵盤 v 時時按滑鼠 8
liyanzi
一般會員


發表:51
回覆:45
積分:19
註冊:2005-01-24

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-09-24 23:40:44 IP:59.113.xxx.xxx 未訂閱
引言: liyanzi 妳好: 雖然我比較清楚妳整個程式運作的概念,但是因為我這邊無法正常運作資料庫系統,無法做實際的測試,因此當初我才沒有加入本題的討論,但是看妳這一題到現在都還沒結案,因此我還是決定來試試看能不能幫上忙?下列是我參考妳上傳檔案內有關資料庫擷取欄位資料的程式碼修改出來的:
.... 前略 ....
head->number          = Table1->FieldValues["number"];
head->roadname        = Table1->FieldValues["roadname"];
head->road            = temp[ Table1->FieldValues["road"] ];
head->road_numeral    = Table1->FieldValues["road_numeral"];
head->an_road         = temp[ Table1->FieldValues["an_road"] ];
head->an_road_numeral = Table1->FieldValues["an_road_numeral"];
head->speed           = Table1->FieldValues["road_speed"];
head->an_speed        = Table1->FieldValues["an_road_speed"];
ComboBox1->Items->Add( head->roadname ) ;
for (int i=0; i<5; i++) {
    Table1->Next() ;
    temp[i]->number          = Table1->FieldValues["number"];
    temp[i]->roadname        = Table1->FieldValues["roadname"];
    temp[i]->road            = temp[ Table1->FieldValues["road"] ];
    temp[i]->road_numeral    = Table1->FieldValues["road_numeral"];
    temp[i]->an_road         = temp[ Table1->FieldValues["an_road"] ];
    temp[i]->an_road_numeral = Table1->FieldValues["an_road_numeral"];
    temp[i]->speed           = Table1->FieldValues["road_speed"];
    temp[i]->an_speed        = Table1->FieldValues["an_road_speed"];
    ComboBox1->Items->Add( temp[i]->roadname ) ;
}
.... 後略 ....
妳試試看是否符合妳所需? 7 天天敲鍵盤 v 時時按滑鼠 8
真的非常的感謝你~~我有試了~~ 是可以run~~但會出現好像資料庫錯誤的問題 能請各位大大~~知道是要如何改呢? 非常感謝~~
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-09-25 00:17:44 IP:61.230.xxx.xxx 未訂閱
liyanzi 妳好:    誠如我之前所說的,我這邊無法順利的運作資料庫系統,因此我也無法做相關測試,妳可以先試著將整個專案重新 re-build 一次試試看,如果仍發生錯誤,就把發生錯誤那一行的前後敘述都貼上來,我試試看是否可用經驗法則推論出問題所在?      7 天天敲鍵盤 v 時時按滑鼠 8
liyanzi
一般會員


發表:51
回覆:45
積分:19
註冊:2005-01-24

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-09-25 00:28:24 IP:59.113.xxx.xxx 未訂閱
引言: liyanzi 妳好: 誠如我之前所說的,我這邊無法順利的運作資料庫系統,因此我也無法做相關測試,妳可以先試著將整個專案重新 re-build 一次試試看,如果仍發生錯誤,就把發生錯誤那一行的前後敘述都貼上來,我試試看是否可用經驗法則推論出問題所在? 7 天天敲鍵盤 v 時時按滑鼠 8
試過了~~還是會出現錯誤~~ 可以 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=24675681&CC=551859"> 而以下~~是那段的程式
void find_endroad( DList *pointer, String start_road )
{            DList *temp[7], *ptr;
        int temp_count = 0 ;
        save_tail = save_head ;
        for ( int i = 0; i < 7; i++ )
                temp[ i ] = new DList ;
        ptr = pointer ;
        while ( ptr -> road_numeral != 0 || ptr -> an_road_numeral != 0 )
        {
                if ( ptr -> road_numeral != 0 && ptr -> an_road_numeral != 0 )
                {
                        if ( ptr -> roadname != start_road && ptr -> roadname != Form1 -> ComboBox1 -> Text )
                                creat_combobox( ptr -> roadname ) ;
                        temp[ temp_count ++ ] = ptr -> an_road ;
                        temp[ temp_count-1] -> roadname = temp[ temp_count-1] -> roadname ;
                        ptr = ptr -> road ;   
                }
                else if ( ptr -> an_road_numeral == 0 )
                {
                        if ( ptr -> roadname != start_road && ptr -> roadname != Form1 -> ComboBox1 -> Text )
                                creat_combobox( ptr -> roadname ) ;
                        ptr = ptr -> road ;
                }
                else
                {
                        if ( ptr -> roadname != start_road && ptr -> roadname != Form1 -> ComboBox1 -> Text )
                                creat_combobox( ptr -> roadname ) ;
                        ptr = ptr -> an_road ;
                }
        }            creat_combobox( ptr -> roadname ) ;
        *temp_road = *temp ;
        counti = temp_count ;    }    
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#19 引用回覆 回覆 發表時間:2005-09-25 01:33:44 IP:61.230.xxx.xxx 未訂閱
liyanzi 妳好:    妳可以試著自己對程式做除錯 (DEBUG),追蹤一下看看該錯誤是如何造成的,我不知道妳對除錯瞭解多少?我簡單說一下除錯步驟好了: 1. 將游標移到妳用紅色標示那一行,然後按下 F5 鍵,在該行設定一個中斷點 (取消中斷點時也是將游標移到已經設定中斷點的那一行,然後再按 F5 鍵)。 2. 按 F9 鍵執行程式,按照妳原先的方式去操作。 3. 如果前述的中斷點尚未執行到就發生了錯誤,那麼就將中斷點向前設一行 (依此類推),然後再重新執行程式進行除錯。 4. 當程式執行到設定中斷點那一行時,程式會暫停在該處,妳將滑鼠指標移到各個變數字樣的位置上 (或是用滑鼠指標移到各個變數字樣的位置上,然後按下滑鼠右鍵叫出工具選單,選擇 Debug -> Inspect,這樣子會顯示出一個視窗,視窗內會顯示出與該變數或物件有關的資訊),看看與該行動作有關的變數或物件 (例如:ptr->an_road、ptr->road、temp_count....等) 的內含值為何?並將它們記錄下來 (每次執行到這裡時都要再查看一次,並且一定要再次做記錄)。 5. 按 F8 鍵進行單行執行的動作,如果沒有發生問題的話,就按 F9 繼續執行程式,並繼續前述的第 4 個步驟,直到進行至程式發生問題的時候為止,如果按下 F8 鍵時發生了錯誤,那麼前一個步驟所記錄下來的資料就是問題的關鍵點了,查看一下那些變數或物件的內含值,看看那一個是不正確的? 對了,妳以紅色標示那一行的前一行好像是多餘的 (temp[ temp_count-1]->roadname 設定給自己?),建議妳將那一行 mark 掉,以免增加除錯的困擾。 7 天天敲鍵盤 v 時時按滑鼠 8
liyanzi
一般會員


發表:51
回覆:45
積分:19
註冊:2005-01-24

發送簡訊給我
#20 引用回覆 回覆 發表時間:2005-09-29 00:15:28 IP:59.113.xxx.xxx 未訂閱
引言: liyanzi 妳好: 妳可以試著自己對程式做除錯 (DEBUG),追蹤一下看看該錯誤是如何造成的,我不知道妳對除錯瞭解多少?我簡單說一下除錯步驟好了: 1. 將游標移到妳用紅色標示那一行,然後按下 F5 鍵,在該行設定一個中斷點 (取消中斷點時也是將游標移到已經設定中斷點的那一行,然後再按 F5 鍵)。 2. 按 F9 鍵執行程式,按照妳原先的方式去操作。 3. 如果前述的中斷點尚未執行到就發生了錯誤,那麼就將中斷點向前設一行 (依此類推),然後再重新執行程式進行除錯。 4. 當程式執行到設定中斷點那一行時,程式會暫停在該處,妳將滑鼠指標移到各個變數字樣的位置上 (或是用滑鼠指標移到各個變數字樣的位置上,然後按下滑鼠右鍵叫出工具選單,選擇 Debug -> Inspect,這樣子會顯示出一個視窗,視窗內會顯示出與該變數或物件有關的資訊),看看與該行動作有關的變數或物件 (例如:ptr->an_road、ptr->road、temp_count....等) 的內含值為何?並將它們記錄下來 (每次執行到這裡時都要再查看一次,並且一定要再次做記錄)。 5. 按 F8 鍵進行單行執行的動作,如果沒有發生問題的話,就按 F9 繼續執行程式,並繼續前述的第 4 個步驟,直到進行至程式發生問題的時候為止,如果按下 F8 鍵時發生了錯誤,那麼前一個步驟所記錄下來的資料就是問題的關鍵點了,查看一下那些變數或物件的內含值,看看那一個是不正確的? 對了,妳以紅色標示那一行的前一行好像是多餘的 (temp[ temp_count-1]->roadname 設定給自己?),建議妳將那一行 mark 掉,以免增加除錯的困擾。 7 天天敲鍵盤 v 時時按滑鼠 8
>"<真的不好意思~我除錯除了滿久的~~還是沒發現哪裡有錯 不過我有看數值~~好像是只有head的資料有抓到 如果table-next()之後的資料都沒有值~~ 我有請教過同學~~他們是說可以compiler的話~~應該是沒錯 除非是邏輯上的問題~~~~我得在努力看看囉~~` 感覺大大的幫忙~~~
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#21 引用回覆 回覆 發表時間:2005-09-29 01:31:20 IP:61.230.xxx.xxx 未訂閱
liyanzi 妳好:    妳可以檢查一下資料庫內的資料設定是否都正確無誤?另外也可以在資料庫內容設給陣列後,立即檢查一下陣列內容是否也都正確?如果陣列內容設定後與資料庫內容不一致,那麼就看看資料庫內容設給陣列時的資料庫索引位置是否正確?      7 天天敲鍵盤 v 時時按滑鼠 8
liyanzi
一般會員


發表:51
回覆:45
積分:19
註冊:2005-01-24

發送簡訊給我
#22 引用回覆 回覆 發表時間:2005-09-30 12:08:50 IP:59.113.xxx.xxx 未訂閱
引言: liyanzi 妳好: 妳可以檢查一下資料庫內的資料設定是否都正確無誤?另外也可以在資料庫內容設給陣列後,立即檢查一下陣列內容是否也都正確?如果陣列內容設定後與資料庫內容不一致,那麼就看看資料庫內容設給陣列時的資料庫索引位置是否正確? 7 天天敲鍵盤 v 時時按滑鼠 8
^^RedSnow大大您好: 在除錯過程中~~我發現只有roadname有值 突然發現在資料庫road欄位值裡~~是用123456代替 如果road裡有值~~比如說是4 ,就代表後面連接的道路是4 ,是中正路 an_road代表另一條路~~沒有的話~~是寫0 那寫的那個迴圈~~road跟an_road只抓到數值 那要如何寫~~假如road那欄位是4的話~~就再抓~~number為4的資料呢?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#23 引用回覆 回覆 發表時間:2005-09-30 20:45:43 IP:61.230.xxx.xxx 未訂閱
liyanzi 妳好:    多虧了妳這個問題,我才認真的去面對我這邊資料庫無法正常運作的問題,去設法解決它,目前雖然仍有些問題,但是我已經可以處理 Paradox 的資料庫了。    我又再度審視過程式碼,結果發現另一個可能性,那就是抓取到的 road 與 an_road 的欄位資料,它們的數值是指向 number 欄位所對應的記錄資料,而不是 temp 陣列的索引值,因此在取得 road 與 an_road 欄位的資料之後,還必須將資料庫的索引指向 number 欄位所對應的資料記錄,然後才能將該筆紀錄 temp 欄位裡的值取出來,然後才能將對應的 temp 陣列設給 road 與 an_road。    我將妳的資料庫改成 Paradox 資料庫,並做了些測試,證實了上述的猜測,因此我將程式做了修改,妳那支程式在修改後,在我這邊已經能正常運作了,妳也趕緊試試看吧看吧:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    for ( int i = 0; i < 10; i   )
        delete_road[ i ] = new Save_roadname;        head = new DList;
    find_head = new DList ;
    for ( int i = 0; i < 10; i   )
        temp_road[ i ] = new DList;        all_num = 0;
    DList *pointer, *temp[10];
    for ( int i = 0; i < 10; i   )
        temp[ i ] = new DList;        Table1->Open();        int val, tempIndex;
    int oldRecNo;
    head->number   = Table1->FieldValues["number"];
    head->roadname = Table1->FieldValues["roadname"];
    val = Table1->FieldValues["road"];  // 取得 road 欄位的值
    if (val > 0) {  // 如果不是 0 就表示有連結道路
        oldRecNo = Table1->RecNo;  // 記下現在的資料庫位置
        // 以 number 欄位來找到 road 欄位值所指向的那一筆資料
        Table1->Locate("number", val, TLocateOptions() << loPartialKey);
        tempIndex = Table1->FieldValues["temp"];  // 取出 temp 欄位值
        head->road = temp[tempIndex];  // 將對應的 temp 陣列設給 head->road
        Table1->RecNo = oldRecNo;  // 恢復資料庫位置
    } else {  // 如果是 0 就表示沒有連結道路
        head->road = NULL;
    }
    head->road_numeral = Table1->FieldValues["road_numeral"];
    val  = Table1->FieldValues["an_road"];
    if (val > 0) {
        oldRecNo = Table1->RecNo;
        Table1->Locate("number", val, TLocateOptions() << loPartialKey);
        tempIndex = Table1->FieldValues["temp"];
        head->an_road = temp[tempIndex];  // 將對應的 temp 陣列設給 head->an_road
        Table1->RecNo = oldRecNo;
    } else {
        head->an_road = NULL;
    }
    head->an_road_numeral = Table1->FieldValues["an_road_numeral"];
    head->speed           = Table1->FieldValues["road_speed"];
    head->an_speed        = Table1->FieldValues["an_road_speed"];
    ComboBox1->Items->Add( head->roadname );        for (int i=0; i<5; i  ) {
        Table1->Next();
        temp[i]->number   = Table1->FieldValues["number"];
        temp[i]->roadname = Table1->FieldValues["roadname"];
        val = Table1->FieldValues["road"];
        if (val > 0) {
            oldRecNo = Table1->RecNo;
            Table1->Locate("number", val, TLocateOptions() << loPartialKey);
            tempIndex = Table1->FieldValues["temp"];
            temp[i]->road = temp[tempIndex];
            Table1->RecNo = oldRecNo;
        } else {
            temp[i]->road = NULL;
        }
        temp[i]->road_numeral = Table1->FieldValues["road_numeral"];
        val  = Table1->FieldValues["an_road"];
        if (val > 0) {
            oldRecNo = Table1->RecNo;
            Table1->Locate("number", val, TLocateOptions() << loPartialKey);
            tempIndex = Table1->FieldValues["temp"];
            temp[i]->an_road = temp[tempIndex];
            Table1->RecNo = oldRecNo;
        } else {
            temp[i]->an_road = NULL;
        }
        temp[i]->an_road_numeral = Table1->FieldValues["an_road_numeral"];
        temp[i]->speed           = Table1->FieldValues["road_speed"];
        temp[i]->an_speed        = Table1->FieldValues["an_road_speed"];
        ComboBox1->Items->Add( temp[i]->roadname ) ;
    }        Table1->Close();
}
上面的程式碼有數段都是相同的處理方式,因此我僅在第一段加上註解,另外幾段我就不再重覆加上註解了。 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/09/30 20:49:47
liyanzi
一般會員


發表:51
回覆:45
積分:19
註冊:2005-01-24

發送簡訊給我
#24 引用回覆 回覆 發表時間:2005-10-01 09:56:23 IP:59.113.xxx.xxx 未訂閱
引言: liyanzi 妳好: 多虧了妳這個問題,我才認真的去面對我這邊資料庫無法正常運作的問題,去設法解決它,目前雖然仍有些問題,但是我已經可以處理 Paradox 的資料庫了。 我又再度審視過程式碼,結果發現另一個可能性,那就是抓取到的 road 與 an_road 的欄位資料,它們的數值是指向 number 欄位所對應的記錄資料,而不是 temp 陣列的索引值,因此在取得 road 與 an_road 欄位的資料之後,還必須將資料庫的索引指向 number 欄位所對應的資料記錄,然後才能將該筆紀錄 temp 欄位裡的值取出來,然後才能將對應的 temp 陣列設給 road 與 an_road。 我將妳的資料庫改成 Paradox 資料庫,並做了些測試,證實了上述的猜測,因此我將程式做了修改,妳那支程式在修改後,在我這邊已經能正常運作了,妳也趕緊試試看吧看吧:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    for ( int i = 0; i < 10; i   )
        delete_road[ i ] = new Save_roadname;        head = new DList;
    find_head = new DList ;
    for ( int i = 0; i < 10; i   )
        temp_road[ i ] = new DList;        all_num = 0;
    DList *pointer, *temp[10];
    for ( int i = 0; i < 10; i   )
        temp[ i ] = new DList;        Table1->Open();        int val, tempIndex;
    int oldRecNo;
    head->number   = Table1->FieldValues["number"];
    head->roadname = Table1->FieldValues["roadname"];
    val = Table1->FieldValues["road"];  // 取得 road 欄位的值
    if (val > 0) {  // 如果不是 0 就表示有連結道路
        oldRecNo = Table1->RecNo;  // 記下現在的資料庫位置
        // 以 number 欄位來找到 road 欄位值所指向的那一筆資料
        Table1->Locate("number", val, TLocateOptions() << loPartialKey);
        tempIndex = Table1->FieldValues["temp"];  // 取出 temp 欄位值
        head->road = temp[tempIndex];  // 將對應的 temp 陣列設給 head->road
        Table1->RecNo = oldRecNo;  // 恢復資料庫位置
    } else {  // 如果是 0 就表示沒有連結道路
        head->road = NULL;
    }
    head->road_numeral = Table1->FieldValues["road_numeral"];
    val  = Table1->FieldValues["an_road"];
    if (val > 0) {
        oldRecNo = Table1->RecNo;
        Table1->Locate("number", val, TLocateOptions() << loPartialKey);
        tempIndex = Table1->FieldValues["temp"];
        head->an_road = temp[tempIndex];  // 將對應的 temp 陣列設給 head->an_road
        Table1->RecNo = oldRecNo;
    } else {
        head->an_road = NULL;
    }
    head->an_road_numeral = Table1->FieldValues["an_road_numeral"];
    head->speed           = Table1->FieldValues["road_speed"];
    head->an_speed        = Table1->FieldValues["an_road_speed"];
    ComboBox1->Items->Add( head->roadname );        for (int i=0; i<5; i  ) {
        Table1->Next();
        temp[i]->number   = Table1->FieldValues["number"];
        temp[i]->roadname = Table1->FieldValues["roadname"];
        val = Table1->FieldValues["road"];
        if (val > 0) {
            oldRecNo = Table1->RecNo;
            Table1->Locate("number", val, TLocateOptions() << loPartialKey);
            tempIndex = Table1->FieldValues["temp"];
            temp[i]->road = temp[tempIndex];
            Table1->RecNo = oldRecNo;
        } else {
            temp[i]->road = NULL;
        }
        temp[i]->road_numeral = Table1->FieldValues["road_numeral"];
        val  = Table1->FieldValues["an_road"];
        if (val > 0) {
            oldRecNo = Table1->RecNo;
            Table1->Locate("number", val, TLocateOptions() << loPartialKey);
            tempIndex = Table1->FieldValues["temp"];
            temp[i]->an_road = temp[tempIndex];
            Table1->RecNo = oldRecNo;
        } else {
            temp[i]->an_road = NULL;
        }
        temp[i]->an_road_numeral = Table1->FieldValues["an_road_numeral"];
        temp[i]->speed           = Table1->FieldValues["road_speed"];
        temp[i]->an_speed        = Table1->FieldValues["an_road_speed"];
        ComboBox1->Items->Add( temp[i]->roadname ) ;
    }        Table1->Close();
}
上面的程式碼有數段都是相同的處理方式,因此我僅在第一段加上註解,另外幾段我就不再重覆加上註解了。 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/09/30 20:49:47
RedSnow大大您好: ^^真的非常感謝您的幫忙~~我已有測試過了~~ compiler能過了~~但~~combobox1顯示的值~~卻是 成功路。仁愛路。中山路。中山路。中山路(有三個重覆的) 而選了成功路後~~combobox2只出現了~~成功路跟仁愛路 而選了仁愛路後~~combobox2只出現了~~仁愛路 而選了中山路後~~combobox2只出現了~~中山路 按了button之後~~答案卻是正確的~~雖然只有成功路到仁愛路 想請問大大您~~測試之後無誤~~是連路徑的資料~~都是正確的嗎?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#25 引用回覆 回覆 發表時間:2005-10-01 10:39:47 IP:59.115.xxx.xxx 未訂閱
liyanzi 妳好:    我不清楚妳這次所描述的問題是怎麼發生的?不知道是不是資料庫內容不相同,或是我們現在個別所使用的程式碼有修改過不同的地方了?我將我現在的資料庫內容貼上來,妳先比對一下好了:     對了,補充一點:妳原先使用的是 ADODB,但是我這邊無法運作,我目前僅能使用的是 Paradox 的 .db 檔,如果兩邊運作結果不同,那麼問題可能就出在這裡了,妳可能需要更換資料庫種類,或者是將程式內與資料庫運作有關的敘述修改掉。 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/10/01 11:01:07
liyanzi
一般會員


發表:51
回覆:45
積分:19
註冊:2005-01-24

發送簡訊給我
#26 引用回覆 回覆 發表時間:2005-10-03 22:36:25 IP:59.113.xxx.xxx 未訂閱
引言: liyanzi 妳好: 我不清楚妳這次所描述的問題是怎麼發生的?不知道是不是資料庫內容不相同,或是我們現在個別所使用的程式碼有修改過不同的地方了?我將我現在的資料庫內容貼上來,妳先比對一下好了: 對了,補充一點:妳原先使用的是 ADODB,但是我這邊無法運作,我目前僅能使用的是 Paradox 的 .db 檔,如果兩邊運作結果不同,那麼問題可能就出在這裡了,妳可能需要更換資料庫種類,或者是將程式內與資料庫運作有關的敘述修改掉。 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/10/01 11:01:07
RedSnow您好: 我檢查過資料庫了~資料都是一樣的~~但~~執行結果都跟之前敘述的錯誤一樣 我現在是使用DataAccess裡的Table 和 DataSource 我會再檢查的~~=.="
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#27 引用回覆 回覆 發表時間:2005-10-03 23:50:25 IP:61.217.xxx.xxx 未訂閱
liyanzi 妳好:    如果方便的話,就把妳現在的程式與資料庫打包上傳到站上來吧,我抽空幫妳檢查一下,記得上傳後將上傳後頁面的連結位址貼到這裡來。      7 天天敲鍵盤 v 時時按滑鼠 8
liyanzi
一般會員


發表:51
回覆:45
積分:19
註冊:2005-01-24

發送簡訊給我
#28 引用回覆 回覆 發表時間:2005-10-04 01:03:50 IP:59.113.xxx.xxx 未訂閱
引言: liyanzi 妳好: 如果方便的話,就把妳現在的程式與資料庫打包上傳到站上來吧,我抽空幫妳檢查一下,記得上傳後將上傳後頁面的連結位址貼到這裡來。 7 天天敲鍵盤 v 時時按滑鼠 8
非常感謝Redsnow大大您的熱心幫忙~~ 我已經檔案上傳至~會員求助區了 連結如下:
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#29 引用回覆 回覆 發表時間:2005-10-04 02:42:16 IP:61.217.xxx.xxx 未訂閱
liyanzi 妳好:    妳的程式我看過了,很抱歉;我仍然無法開啟妳的 db2.mdb 資料庫檔案,但是我將妳的專案載入後,把 Table1 的 DatabaseName 欄位清空,然後將 TableName 欄位設為我使用的 db4.db,重新編譯程式並執行,結果都是 OK 的 (程式碼的部分完全未修改過),我將檔案重新打包上傳,連結位址如下:    http://delphi.ktop.com.tw/topic.php?TOPIC_ID=79337 妳將檔案下載後,請另開一個目錄,然後將壓縮檔內的所有檔案都解壓縮到前述的目錄內 (以免弄亂了妳現有的檔案),再使用妳的 BCB 載入前述目錄內的專案檔,我這邊使用的是 BCB4,因此當妳載入檔案時,BCB 可能會有一些詢問訊息,大概會是問妳要不要轉成新版本之類的訊息?妳選擇 "是" 就可以了 (我不確定會不會有前述的狀況),接下來妳就重新編譯程式並執行它,看看在妳那邊是否也能正常執行? 7 天天敲鍵盤 v 時時按滑鼠 8
988078
一般會員


發表:23
回覆:15
積分:7
註冊:2005-03-02

發送簡訊給我
#30 引用回覆 回覆 發表時間:2005-10-06 22:13:22 IP:203.68.xxx.xxx 未訂閱
請問大大: 六條路的資料最短路進我有試出來但是~ 我現在多增加幾條路~如下圖ㄉ資料庫 但是執行程式卻出現如下圖的錯誤 發表人 - 988078 於 2005/10/06 22:15:27
------
高高屋海苔
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#31 引用回覆 回覆 發表時間:2005-10-07 00:34:53 IP:59.115.xxx.xxx 未訂閱
988078 妳好:    妳的問題與本篇的標題不同,為了方便討論並讓問題單純化,建議妳針對妳的情形另開新題討論。      7 天天敲鍵盤 v 時時按滑鼠 8
[<<] [1] [2] [>>]
系統時間:2024-05-03 19:00:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!