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

請問一下整除 及 log10 的問題

尚未結案
longhair_pan
一般會員


發表:5
回覆:4
積分:1
註冊:2004-09-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-09 11:44:49 IP:203.73.xxx.xxx 未訂閱
我寫一段算間距的程式, 比如說 36 ~ 128 時, 會算出中間的間距 變成 36 , 40 , 50, 60, 70, 80, 90, 100, 110, 120, 128 最間最多 9 個間距數字 但程式在編譯的時候, 會出現 Illegal character '\' (0x5c) 那我已經用 int 宣告變數了, 我想用 / 應該也會整除 於是把 \ 改成 / , 結果執行到我呼叫這段程式時, 又出現 log10: SING error 的錯誤訊息 程式碼如下, 有人可以幫我 debug 一下嗎? 謝謝 int CalculateGap(int Min_Value,int Max_Value){ int i; int Gap; int OrderOfGap; int FirstGap; int NumOfGap; Gap=(Max_Value-Max_Value)\10; OrderOfGap=(log10(Gap)-1); OrderOfGap=10 ^ OrderOfGap; if ((Gap\OrderOfGap)>5) {Gap=10*OrderOfGap;} if ((Gap\OrderOfGap)<=5) {Gap=5*OrderOfGap;} if ((Gap\OrderOfGap)<=2) {Gap=2*OrderOfGap;} if ((Gap\OrderOfGap)<=1) {Gap=OrderOfGap;} FirstGap=((Min_Value/Gap) 1)*Gap; NumOfGap=(Max_Value-FirstGap)\Gap; return NumOfGap; }
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-09 13:25:25 IP:203.204.xxx.xxx 未訂閱
改成這樣吧~  並在上頭宣告:    #include "Math.h" int CalculateGap(int Min_Value,int Max_Value);
 
......
...........
int CalculateGap(int Min_Value,int Max_Value){
int i;
int Gap;
int OrderOfGap;
int FirstGap;
int NumOfGap;
Gap=(Max_Value-Min_Value)/10;
OrderOfGap=(log10(Gap)-1);
OrderOfGap=10 ^ OrderOfGap;
if ((Gap/OrderOfGap)>5) {Gap=10*OrderOfGap;}
if ((Gap/OrderOfGap)<=5) {Gap=5*OrderOfGap;}
if ((Gap/OrderOfGap)<=2) {Gap=2*OrderOfGap;}
if ((Gap/OrderOfGap)<=1) {Gap=OrderOfGap;}    FirstGap=((Min_Value/Gap) 1)*Gap;
NumOfGap=(Max_Value-FirstGap)/Gap;    return NumOfGap;
}
可正確編譯了~你原本的問題因該即是沒宣告~還有除號用錯b][/b]
longhair_pan
一般會員


發表:5
回覆:4
積分:1
註冊:2004-09-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-09 18:50:43 IP:203.73.xxx.xxx 未訂閱
謝謝您的回應, 我原本就有 #include <math.h> 了 然後我只想在除法之後, 取整數部份(無條件捨去), 用 / 對嗎? 還有就是我想要知道現在的數字是在 十位, 百倍, 或千位之類的.... 所以我用 log10 , 例如 388 是百位, 結果要 2 (十的二次方) 10~ 99 都是 1 ....那我該怎麼寫? 謝謝...
justdo
高階會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-09 20:32:29 IP:221.169.xxx.xxx 未訂閱
如果只要獲得商數 int(數字1/數字2) 即可 c好像沒有\這個運算元 至於log10這樣值是正確的,你只要一樣轉成int再加1上去即可
longhair_pan
一般會員


發表:5
回覆:4
積分:1
註冊:2004-09-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-10 11:47:48 IP:203.73.xxx.xxx 未訂閱
非常感謝您的回應 程式已經可以正確算出我要的結果了.... 不過又有一個百思不解的現象.... 以下是程式的一部份, LabelX[10] 是我一開始產生的十個 Label 物件 我按下 F5 , Run 的時候, 我修改 Edt_MaxX 後按下 Enter, 並沒有任何 Label出現 但我在以下任意地方設一個中斷點, 執行到那行之後會 pause, 按下 F5 繼續執行, 又可以看到 LableX 正常地排列, 請問該如何解決? 謝謝。    int CalculateGap(int Min_Value,int Max_Value){ int i; int j; int Gap_Calc=0; int Gap=0; int OrderOfGap=1; int FirstGap=0; int NumOfGap=0; float Numer=0; Gap_Calc=((Max_Value-Min_Value)-((Max_Value-Min_Value)))/10; j=(log10(Gap_Calc)); for (i=1;i<=j;i++) { OrderOfGap=OrderOfGap*10; } Numer=float(Gap_Calc)/float(OrderOfGap); if ((Numer)>5) {Gap=10*OrderOfGap;} if ((Numer)<=5) {Gap=5*OrderOfGap;} if ((Numer)<=2) {Gap=2*OrderOfGap;} if ((Numer)<=1) {Gap=OrderOfGap;}    FirstGap=((Min_Value/Gap)+1)*Gap; NumOfGap=(Max_Value-FirstGap)/Gap;    //==========                 for (i=0;i<10;i ) { LabelX[i]->Visible=false; } for (i=0;iVisible=true; LabelX[i]->Top=Form_Main->Edt_MaxX->Top; LabelX[i]->Left=Form_Main->Edt_MinX->Left ((Form_Main->Edt_MaxX->Left-Form_Main->Edt_MinX->Left)/(NumOfGap 1)*(i 1)); LabelX[i]->Caption=FirstGap (i*Gap); } //========== return NumOfGap; } void __fastcall TForm_Main::Edt_MaxXKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if (Key==13){ WL_Max=StrToInt(this->Edt_MaxX->Text); NumOfGapX=CalculateGap(WL_Min,WL_Max,'X'); } }
justdo
高階會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-10 19:57:47 IP:221.169.xxx.xxx 未訂閱
你的LabelX陣列在哪兒宣告的? 另外幫個忙,搜尋一下版規,看一下程式碼怎麼發表 還有這和原發問標題已經不一樣了,請另外發文章詢問
系統時間:2024-05-16 1:47:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!