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

變數之間的大小比較

尚未結案
sakae
一般會員


發表:2
回覆:3
積分:1
註冊:2004-06-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-18 18:06:35 IP:61.59.xxx.xxx 未訂閱
程式如下: if (sum<15) { cx=abs(15-aa);cy=abs(15-bb); . . } 每當符合sum<15之後,程式便會傳入一組aa和bb的值(任意整數) 因為我要在各個零散的aa和bb的組合中,取得最接近aa=15和bb=15的組合,故我把它們和15相減取絶對值.我打算先比較cx,再從中比較cy,最後才選定一組aa和bb. 以下是我遇到的問題: 因為每傳入一組aa和bb後,cx和cy的值也立即被改變了,所以我無法將它們作比較,請問各位有什麼解決的好法子嗎?謝謝!
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-18 19:19:20 IP:219.80.xxx.xxx 未訂閱
引言: 程式如下: if (sum<15) { cx=abs(15-aa);cy=abs(15-bb); . . } 每當符合sum<15之後,程式便會傳入一組aa和bb的值(任意整數) 因為我要在各個零散的aa和bb的組合中,取得最接近aa=15和bb=15的組合,故我把它們和15相減取絶對值.我打算先比較cx,再從中比較cy,最後才選定一組aa和bb. 以下是我遇到的問題: 因為每傳入一組aa和bb後,cx和cy的值也立即被改變了,所以我無法將它們作比較,請問各位有什麼解決的好法子嗎?謝謝!
hello, 把一組(aa,bb)丟進去計算,cx和cy一定會變,這是很正常的. 看你題目需求 "cx=abs(15-aa);cy=abs(15-bb); ..... " ,這樣好像跟下一組計算無關,所以這組所計算的cx和cy並不會影響到你下一組的計算.(是不是要把......那裡再寫清楚一點,看你要怎麼處理?) 可否在加以解釋你要怎麼比較還有題目比較詳細的解說? 發表人 - nlj859 於 2004/07/18 19:24:40
sakae
一般會員


發表:2
回覆:3
積分:1
註冊:2004-06-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-18 19:49:23 IP:61.59.xxx.xxx 未訂閱
不好意思!我再說明一次我的問題. 程式中有一廻圈,其中包含下列片段: if (sum<15) { cx=abs(15-aa);cy=abs(15-bb); . . } 廻圈執行時會運算出aa,bb,和sum三個值,我在廻圈中再加入上述判斷式. 也就是說,每執行一次廻圈,會有一個sum,一個aa和一個bb. 當sum<15時,我將那一次廻圈所算出的aa和bb值代入cx=abs(15-aa);cy=abs(15-bb);作運算.經由記錄最小的cx和cy去找最接近aa=15和bb=15的組合(aa,bb) 但cx和cy一定會變,我想請教有什麼方法,能比較廻圈裡每次的cx和cy值,只留下最小的cx和cy值那一次廻圈時的aa和bb的值?謝謝!
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-18 21:50:07 IP:211.76.xxx.xxx 未訂閱
sakae你好:     參考下面的code。還有你要的最小值是cx+cy的最小嗎?還是平方和的最小?     
 
//先宣告四個變數,用來儲存最小的cx,cy,aa,bb。
//且一開始就設定min_cx,min_cy初值為最大的int值
//以讓第一個aa,bb可以被assign給min_aa,min_bb
int min_cx = MAXINT,min_cy = MAXINT;
int min_aa,min_bb;    //---------------------------------------------
//更改判斷式
if(sum < 15)
    {
    cx = abs(15-aa);
    cy = abs(15-bb);
    if(cx   cy < min_cx   min_cy) //這裡是要總合的最小嗎?還是?
        {
        min_cx = cx;
        min_cy = cy;
        min_aa = aa;
        min_bb = bb;
        }        }
發表人 - pwipwi 於 2004/07/18 21:51:56
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-18 21:55:22 IP:219.80.xxx.xxx 未訂閱
Hello Sakae,    請參考底下程式碼:
/*
程式中有一?圈,其中包含下列片段:
if (sum<15)
{
cx=abs(15-aa);cy=abs(15-bb);
.
.
}
迴圈執行時會運算出aa,bb,和sum三個值,我在?圈中再加入上述判斷式.
也就是說,每執行一次?圈,會有一個sum,一個aa和一個bb.
當sum<15時,我將那一次迴圈所算出的aa和bb值代入cx=abs(15-aa);cy=abs(15-bb);作運算.經由記錄
最小的cx和cy去找最接近aa=15和bb=15的組合(aa,bb)    但cx和cy一定會變,我想請教有什麼方法,能比較迴圈裡每次的cx和cy值,只留下最小的cx和cy值那一次
迴圈時的aa和bb的值?
*/
#include 
#include 
#include <Math.h>    int main(int argc, char* argv[])
{
   int i;
   int aa[10]={3,4,12,5,7,2,6,3,2,8};  //假設有10組數
   int bb[10]={3,5,6,7,22,11,4,5,34,1};//假設有10組數
   int sum=5;                          // 10次都讓他執行
   int temp_cx,temp_cy;                //存下cx,cy的最小時的值
   int cx,cy;
   int Min_aa,Min_bb;                  //記錄最小的aa和bb       i=-1;
   while (sum<15 && i<9)  //讓他跑10次,且每次都跑
   {
    i  ;
    cout << "第" <cx)
            {
              temp_cx=cx;
              Min_aa=aa[i];
            }
         if (temp_cy>cy)
            {
              temp_cy=cy;
              Min_bb=bb[i];
            }
       }
    //印出每次結果
    cout << "aa="<        發表人 - nlj859 於 2004/07/18  22:07:21
        
sakae
一般會員


發表:2
回覆:3
積分:1
註冊:2004-06-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-18 22:57:18 IP:61.59.xxx.xxx 未訂閱
sakae你好: 參考下面的code。還有你要的最小值是cx cy的最小嗎?還是平方和的最小? 謝謝您的回覆! 我要找的是:先找最小的cx,再從中找最小的cy. 舉個例子:廻圈跑完後有下列aa和bb的組合:(3,21),(14,9),(14,27),(19,22) 先作cx=abs(15-aa)後,取最小的cx,所以只剩aa為14的(14,9),(14,27) 再作cy=abs(15-bb),取最小的cy,所以bb應為9 最後我想要的是最接近(15,15)的aa和bb,以上述的情形來說就是(14,9) 謝謝!
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-19 00:04:22 IP:219.80.xxx.xxx 未訂閱
Hello Sakae, 看了你舉的這個例子,終於知道你要做的是什麼了. 雖然之前的程式和你要的不太一樣,不過我想你要的應該是不知道怎麼保留住 最小的cx和cy吧,如果是這樣,可以參考我上述的範例,先把第一次的cx或cy 存到另一個變數裡(temp_cx或temp_cy),以後就拿這個去和目前的去比對, 如果temp_cx>cx時,就temp_cx=cx;這樣就能記錄目前最小的cx了.
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-15 16:12:12 IP:61.66.xxx.xxx 未訂閱
這樣應該會得到最小的cx,cy吧(如果你一定要先比cx的話) 範例一 int TempCx,TempCy;  if (sum<15) { cx=abs(15-aa); if ( cx <= TempCx )//有包含等於是因為cy可能不同 { TempCx = cx; cy=abs(15-bb);//cx符合條件才做cy if ( cy < TempCy )//不包含等於是因為相同就不用更改 TempCy = cy; } } 如果你想要得到最小的cx cy 範例二 int TempCx = 1000,TempCy = 1000;//一個很大的值 if (sum<15) { if ( (cx cy) < (TempCx TempCy) ) {//符合條件TempCx,TempCy一起更改 TempCx = cx; TempCy = cy; } } 如果有四組值(7,9),(9,8),(11,2),(10,14) 範例一會得到(11,2) 範例二會得到(10,14) 所以你應該是要問範例二吧(最接近15的aa,bb)
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-09-15 17:43:06 IP:221.169.xxx.xxx 未訂閱
sakae:各家方式不同,提供另一種方式,
用static int cxMin=999,cyMin=999;建立static 宣告。
如此你可以將你程式如下
static int cxMin=999,cyMin=999;  // 先設最大
if (sum<15) {
  cx=abs(15-aa);cy=abs(15-bb);
  // 進行你的比較cx和cxMin,cy和cyMin
  .
  .
}
經過static 宣告的變數會保留其數據一直到程式結束為止!
例:你如果
if (cx 和 cy 與 cxMin 及cyMin 比較成立)
  cxMin=cx;cyMin=cy;
cxMin及cyMin會被cx及cy值取代,下次你進入這function時
cxMin及cyMin將不是999而是上一次的cx及cy值。
請參考!
Andy Chang 發表人 - andychang1690 於 2004/09/15 17:45:49
------
Andy Chang
系統時間:2024-05-19 7:12:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!