全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:968
推到 Plurk!
推到 Facebook!

想請問~~路徑資料加總之後??

尚未結案
liyanzi
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-13 23:48:39 IP:220.129.xxx.xxx 未訂閱
不好意思~~想請問RedSnow 大大    您之前有幫忙我寫過最短路徑的程式    我將之前的程式作了一些修改    因為我變成要計算車速~~~所以我就將之前的距離~~轉換成車速計算    
void FindspeedPath(DList *pointer, String end_road, int index)   //以下是虛擬路徑,時速
{
    // 如果不是路徑開頭則加上 "->" 符號以作分隔
    if(roadPaths->Strings[index] != "")
      roadPaths->Strings[index] = roadPaths->Strings[index] "->";
    // 加上找到的路名到路徑內
   roadPaths->Strings[index] = roadPaths->Strings[index]   pointer->roadname;        if (pointer->an_speed != 0 ){  // 如果有分支道路
        if (pointer->roadname != end_road){  // 若不是 ComboBox2 所設之終點路名
            int k = roadPaths->Add(roadPaths->Strings[index]);  // 增加路徑陣列
            roadLen.push_back(roadLen[index]);  // 增加距離加總陣列,並設初值為之前加總距離
            roadLen[k] = roadLen[k]   pointer->an_speed;  // 加上本次分支道路的距離
            FindPath(pointer->an_road, end_road, k);  // 遞迴找尋這條分支道路
         }
    }
    if (pointer->speed != 0) {  // 如果後邊有連接道路
        if (pointer->roadname != end_road) {  // 若不是 ComboBox2 所設之終點路名
            roadLen[index] = roadLen[index]   pointer->speed;  // 加上到下一條道路的距離
            FindPath(pointer->road, end_road, index);  // 遞迴找尋這條道路的下一條路
        }
    }
}
在roadiobutton選擇方面~~多了一個
if(RadioButton3->Checked==true)
      {
        Form1 -> Memo1 -> Clear() ;
        roadPaths = new TStringList();
       int k = roadPaths->Add("");  // 新增第一條路徑
       roadLen.push_back(0); //
       FindspeedPath(find_head, ComboBox2->Text, k);  // 開始找尋路徑           Memo1->Clear();
       int shortRoad = 9999;  // 比對最短路徑之用,先隨意設一個最大值
       int shortIndex = 0;  // 比對後,存放最短路徑的索引值
       int PathNo = 0;
         for(int i=0; iCount; i  )
         {
           // 因為找到的路徑都是搜尋到最後一個路名 (中山路),因此要過濾掉不包含 ComboBox2 所設路名的路徑
           if(roadPaths->Strings[i].Pos(ComboBox2->Text) > 0)
           {
              PathNo  ;
             if(roadLen[i] < shortRoad)
             {  // 比對路徑總距離
                 shortRoad = roadLen[i];  // 取得較短路徑之距離數
                 shortIndex = i;  // 取得較短路徑之 StringList 索引值
             }
        }
    }        Memo1->Lines->Add("從" roadPaths->Strings[shortIndex]);
    Form1 -> Edit1 -> Text = (String)(roadLen[shortIndex]) ;
    roadLen.clear();
    delete roadPaths;
      }
我都將之前的距離road_numeral 、an_road_numeral都換成 speed、an_speed了 但計算出來卻會錯誤~~~ 比如說~~成功路到自由路~~是0.4375 自由路到博愛路是1.12 我選隔一條路~~算出來數值都對 但如果選~~成功路到博愛路~~~卻會變成45.4375 >"<不知道為什麼會變成這樣子~~ 能請RedSnow 大大或是各位高手大大~~解答一下嗎?
RedSnow
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-14 00:39:25 IP:61.230.xxx.xxx 未訂閱
liyanzi 妳好:    如果方便的話,請將妳現在改寫後的程式上傳到 "會員求助程式檔案上傳區",這樣子比較容易找出問題。 7 天天敲鍵盤 v 時時按滑鼠 8
liyanzi
一般會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-14 00:53:20 IP:220.129.xxx.xxx 未訂閱
引言: liyanzi 妳好: 如果方便的話,請將妳現在改寫後的程式上傳到 "會員求助程式檔案上傳區",這樣子比較容易找出問題。 7 天天敲鍵盤 v 時時按滑鼠 8
不好意思~~我已將程式`~上傳至~~會員求助程式區了~~真的非常感謝~~
RedSnow
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-14 01:28:31 IP:61.230.xxx.xxx 未訂閱
liyanzi 妳好:    請確認一下妳上傳的檔案內容,或說明那些檔案才是正確的?因為檔案內有三層目錄,第一層名為 abc,有 project1.bpr 與 project1..cpp 與執行檔,日期較新但是卻沒有 Unit1.cpp 與 Unit1.h,第二層目錄名為 new,內有三個 .mdb 檔案,第三層目錄內有完整的各個檔案,但是日期卻是 8 月 11 日的。    另外在打包檔案時,請不要將 .tds 等無關檔案壓縮進去,那些檔案會隨著每次的編譯而重新產生,是沒有必要上傳的。      7 天天敲鍵盤 v 時時按滑鼠 8
liyanzi
一般會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-14 08:35:58 IP:220.129.xxx.xxx 未訂閱
引言: liyanzi 妳好: 請確認一下妳上傳的檔案內容,或說明那些檔案才是正確的?因為檔案內有三層目錄,第一層名為 abc,有 project1.bpr 與 project1..cpp 與執行檔,日期較新但是卻沒有 Unit1.cpp 與 Unit1.h,第二層目錄名為 new,內有三個 .mdb 檔案,第三層目錄內有完整的各個檔案,但是日期卻是 8 月 11 日的。 另外在打包檔案時,請不要將 .tds 等無關檔案壓縮進去,那些檔案會隨著每次的編譯而重新產生,是沒有必要上傳的。 7 天天敲鍵盤 v 時時按滑鼠 8
真的非常不好意思~~沒有事先整理過>"< 我是將整個程式~~直接解壓縮成~~一個abc的檔 解壓縮後~~有一個new的檔~~new裡面是資料庫access的資料 其中~~db2.mdb就是現所連結的資料庫,其餘可先不理會。。 而new的子目錄有各個完整檔案~~可不理會。 而關於沒有Unit1.cpp 與 Unit1.h的檔~~ 在第二層目錄是Unit1.~cpp 與 Unit1.~h 真的是非常抱歉~~
RedSnow
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-14 16:21:11 IP:59.115.xxx.xxx 未訂閱
liyanzi 妳好:    我在妳上傳的檔案中找不到含有 FindspeedPath 或是 RadioButton3 字樣的 .cpp 檔,請將妳的壓縮檔整理一下,將妳現在改寫後的程式壓縮進去,將無關的檔案剔除掉 (例如 .tds 檔),然後再重新上傳。 7 天天敲鍵盤 v 時時按滑鼠 8
liyanzi
一般會員


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-14 21:49:53 IP:220.129.xxx.xxx 未訂閱
引言: liyanzi 妳好: 我在妳上傳的檔案中找不到含有 FindspeedPath 或是 RadioButton3 字樣的 .cpp 檔,請將妳的壓縮檔整理一下,將妳現在改寫後的程式壓縮進去,將無關的檔案剔除掉 (例如 .tds 檔),然後再重新上傳。 7 天天敲鍵盤 v 時時按滑鼠 8
Redsnow大大~~ =.="真是不好意思~~麻煩你了 我把檔案重新整理了一下~~也壓縮了~~ 關於那些用不到的檔(例:.tds),我另存檔時~~只要一執行,就會出現 我怕刪掉後~~就不能執行了~~>"< 所以我還是附上了。。 另外~~資料庫的資料~~db2.mdb我也附在同一目錄下 不過~~就算執行時~~也不用在另外連結資料庫了吧!! 只是附上~~會比較清楚~~ 我有另外在解壓縮看看~~裡面是有.cpp檔的喔~~
RedSnow
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-09-15 00:50:22 IP:61.230.xxx.xxx 未訂閱
liyanzi 妳好:    妳這次上傳的檔案我檢查過了,檔案應該是齊全了,但是我仍然無法正確執行妳的程式,妳的程式中有使用到一個 TADOTable 元件,不知道是不是版本的問題?我使用的 BCB4 找不到有這個元件,因此無法在程式中開啟妳的資料庫檔案。    如果路名資料並不是很多的話,看看是否可以將資料庫檔案的部份改成使用文字檔來代替,否則我在妳這篇問題上恐怕是很難幫上忙了。      7 天天敲鍵盤 v 時時按滑鼠 8
liyanzi
一般會員


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-09-15 13:11:33 IP:218.172.xxx.xxx 未訂閱
引言: liyanzi 妳好: 妳這次上傳的檔案我檢查過了,檔案應該是齊全了,但是我仍然無法正確執行妳的程式,妳的程式中有使用到一個 TADOTable 元件,不知道是不是版本的問題?我使用的 BCB4 找不到有這個元件,因此無法在程式中開啟妳的資料庫檔案。 如果路名資料並不是很多的話,看看是否可以將資料庫檔案的部份改成使用文字檔來代替,否則我在妳這篇問題上恐怕是很難幫上忙了。 7 天天敲鍵盤 v 時時按滑鼠 8
抱歉~~那是否能請您將程式中~~FormCreate裡路徑資料的部份 將Tabe->Close(); Table->Open(); 這兩行刪掉 而將程式裡~~連成資料庫的語法 改成以下的程式
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 ;
head -> speed = 100;
head -> an_speed = 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[ 0 ] -> speed = 40 ;
temp[ 0 ] -> an_speed = 80 ;    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[ 1 ] -> speed = 50 ;
temp[ 1 ] -> an_speed = 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[ 2 ] -> speed = 100 ;
temp[ 2 ] -> an_speed = 60 ;    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 = NULL ;
temp[ 3 ] -> an_road_numeral = 0;
temp[ 3 ] -> speed = 70 ;
temp[ 3 ] -> an_speed =  0;    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 ;
temp[ 4 ] -> speed = 0 ;
temp[ 4 ] -> an_speed = 0 ;        
在speed方面。我將值改成與資料庫裡的值不同 但還是可計算。。改成整數~~您也比較好判斷錯誤~~ 不好意思~~真的非常的麻煩您~~~ 我會多加注意的~~~^^ 發表人 - liyanzi 於 2005/09/15 13:26:05
RedSnow
版主


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-09-15 15:42:00 IP:59.115.xxx.xxx 未訂閱
liyanzi 妳好:    我已經將程式修改,現在可以正常編譯與執行了,可否再麻煩妳一下,請妳依據妳這次提供的數字 (為了便於測試而更改的整數資料) 做一下測試,然後將妳的操作過程簡述一下,並且舉數個例子,說明 "起點" 與 "目的地" 各別是設定為那個道路時,何者是傳回錯誤答案 (說明錯誤答案的數字),並說明正確數字應該是甚麼?這樣子可以提供給我當作找問題的參考,以減少摸索的時間。      7 天天敲鍵盤 v 時時按滑鼠 8
liyanzi
一般會員


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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-09-15 20:48:09 IP:59.113.xxx.xxx 未訂閱
引言: liyanzi 妳好: 我已經將程式修改,現在可以正常編譯與執行了,可否再麻煩妳一下,請妳依據妳這次提供的數字 (為了便於測試而更改的整數資料) 做一下測試,然後將妳的操作過程簡述一下,並且舉數個例子,說明 "起點" 與 "目的地" 各別是設定為那個道路時,何者是傳回錯誤答案 (說明錯誤答案的數字),並說明正確數字應該是甚麼?這樣子可以提供給我當作找問題的參考,以減少摸索的時間。 7 天天敲鍵盤 v 時時按滑鼠 8
您好: 如起點:成功路 終點:自由路 選擇radiobutton3 答案為100 自由路 博愛路 40 而如果成功路到博愛路的話 應為140 但答案為145 145=100 45 45應該是road_numeral 而非speed值40 似乎測試只隔一條路的都對 但只要兩條以上的路~~~數值都加上原本的距離了 但findspeedpath 我都已將程式改成speed或an_speed計算了 不知道為何還是會錯?? 感謝你耐心的解答^^
RedSnow
版主


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-09-16 23:25:00 IP:59.115.xxx.xxx 未訂閱
liyanzi 妳好:    和上次一樣,我的雙眼都看花了....,不過後來總算看出點名堂了,妳大概是在複製、修改的過程中漏了修改一個地方,妳應該將 <>> 函式裡邊呼叫 <>> 函式的地方 (共兩處),都修改成 <>> (僅需修改呼叫的函式名稱即可,呼叫的參數可以不用修改)。 我找到這個問題之後,依據妳提供的資料測試了一下,結果都是 > <>> 天天敲鍵盤 <>> 時時按滑鼠 <>>
liyanzi
一般會員


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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-09-17 16:08:06 IP:59.113.xxx.xxx 未訂閱
引言: liyanzi 妳好: 和上次一樣,我的雙眼都看花了....,不過後來總算看出點名堂了,妳大概是在複製、修改的過程中漏了修改一個地方,妳應該將 <>> 函式裡邊呼叫 <>> 函式的地方 (共兩處),都修改成 <>> (僅需修改呼叫的函式名稱即可,呼叫的參數可以不用修改)。 我找到這個問題之後,依據妳提供的資料測試了一下,結果都是 > <>> 天天敲鍵盤 <>> 時時按滑鼠 <>> < face="Verdana, Arial, Helvetica"> 真是對不起阿~~竟然沒注意到這小細節~~~ 感謝大大的細心呢!~~~=.="
系統時間:2024-06-24 21:14:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!