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

增加多筆路徑資料所遇到的問題

尚未結案
988078
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-07 02:03:31 IP:203.68.xxx.xxx 未訂閱
請問大大: 參考底下連結的討論 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=77912 六條路的資料最短路進友試出來但是~ 我現在要多增加幾條路~參考如下圖ㄉ資料庫 但是執行程式卻出現如下圖的錯誤 煩請大大指教~ 高高屋海苔 發表人 - 988078 於 2005/10/07 02:05:05
------
高高屋海苔
i_am_jcl
一般會員


發表:3
回覆:9
積分:2
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-07 17:57:53 IP:220.130.xxx.xxx 未訂閱
根據你的抓圖推斷  很有可能在某些情況下 ptr會變成NULL!    所以請你while判斷句改成下列的方式的試試看     while(  ptr  &&  (ptr->road_numeral!=0 || ptr->an_road_numreal!=0) )    
988078
一般會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-10 02:31:57 IP:203.68.xxx.xxx 未訂閱
引言: 根據你的抓圖推斷 很有可能在某些情況下 ptr會變成NULL! 所以請你while判斷句改成下列的方式的試試看 while( ptr && (ptr->road_numeral!=0 || ptr->an_road_numreal!=0) )
大大~ 還是ㄧ樣會出錯>"< 高高屋海苔
------
高高屋海苔
RedSnow
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-11 19:05:13 IP:59.115.xxx.xxx 未訂閱
988078 妳好:    我個人的縮排習慣與原程式的縮排方式不同,為了能方便的看懂程式,所以將程式重新整理過,而且為了節省資源,也將程式內的註解刪除掉了 (如有需要,請對照妳備份起來的原程式自行補回去),所以請先將妳的程式備份起來以備不時之需,然後找到下列事件處理程序與自定函式的位置,將內容代換掉,看看是否可解決妳的問題?
DList *find_Bestroad(DList *pointer, String end_road )
{
    int temp_count = 0;
    creat_Memo( pointer->roadname );
    while ( pointer->road_numeral != 0 || pointer->an_road_numeral != 0 ) {
        if ( pointer->roadname == end_road )
            break;
        else if ( pointer->road_numeral != 0 && pointer->an_road_numeral != 0 ) {
            if ( pointer->road_numeral > pointer->an_road_numeral ) {
                temp_road[ temp_count ] = pointer->road;
                delete_road[ temp_count ]->roadname = pointer->roadname;
                temp_road[ temp_count   ]->num = all_num   pointer->road_numeral;
                all_num = all_num   pointer->an_road_numeral;
                pointer = pointer->an_road;
                creat_Memo( pointer->roadname );
            } else {
                temp_road[ temp_count ] = pointer->an_road;
                delete_road[ temp_count ]->roadname = pointer->roadname;
                temp_road[ temp_count   ]->num = all_num   pointer->an_road_numeral;
                all_num = all_num   pointer->road_numeral;
                pointer = pointer->road;
                creat_Memo( pointer->roadname );
            }
        } else if ( pointer->an_road_numeral == 0 ) {
            all_num = all_num   pointer->road_numeral;
            pointer = pointer->road;
            creat_Memo( pointer->roadname );
        }
    }
    counti = temp_count;
    return pointer;
}    DList *start_find(DList *ptr, String main_roadname )
{
    int count = 0;        while (ptr->roadname != main_roadname && ptr->road_numeral != 0 || ptr->an_road_numeral != 0) {
        if ( ptr->road_numeral != 0 && ptr->an_road_numeral != 0 ) {
            if (ptr->roadname == main_roadname) {
                break;
            } else {
                temp_road[count] = ptr->an_road;
                count  ;
                ptr = ptr->road;
            }
        } else if (ptr->an_road_numeral == 0) {
            if (ptr->roadname != main_roadname) {
                ptr = ptr->road;
            } else {
                break;
            }
        } else {
            if (ptr->roadname != main_roadname) {
                ptr = ptr->an_road;
            } else {
                break;
            }
        }
    }        counti = count;        return ptr;
}    void find_endroad( DList *pointer, String start_road )
{
    DList *ptr;
    int temp_count = 0;
    save_tail = save_head;        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_road[temp_count] = ptr->an_road;
            ptr = ptr->road;
            temp_count  ;
        } 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);
    counti = temp_count;
}    void __fastcall TForm1::ComboBox1Click(TObject *Sender)
{
    save_head = new Save_roadname;
    save_head->next = NULL;        ComboBox2->Clear();
    String sel_road;
    sel_road = ComboBox1->Text;
    DList *start_ptr, *end_ptr;        start_ptr = start_find(head, sel_road);
    if (start_ptr->roadname != sel_road) {
        for (int i = 0; i < counti; i  ) {
            start_ptr = start_find(temp_road[i], sel_road);
        }
    }
    *find_head = *start_ptr;
    find_endroad(start_ptr, sel_road);
    for (int i = 0; i < counti; i  ) {
        find_endroad(temp_road[i], sel_road);
    }
    printer_combobox();
}
7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/10/11 19:33:21
988078
一般會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-23 00:39:11 IP:203.68.xxx.xxx 未訂閱
真的不好意思各位大大~ 雖然結案ㄌ但是後來發現有問題 我在多新增路徑資料程式還是有問題 因為我最後要做到整個市區的路網圖~會有幾十筆資料 程式出現這錯誤訊息     高高屋海苔 發表人 - 988078 於 2005/10/23 00:40:44
------
高高屋海苔
RedSnow
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-23 01:21:39 IP:61.230.xxx.xxx 未訂閱
988078 妳好:    請查看相關的陣列宣告是否有足夠的空間去存放那些新增的路徑資料?      7 天天敲鍵盤 v 時時按滑鼠 8
系統時間:2024-04-27 12:54:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!