廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 3953 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
tk7545
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[C/C++][求助] C語言 當範圍超過時結束當下迴圈 詳細問題請入內
大大們好:

       我所附上的程式碼主要是用來求曲線,運用於運動分析上面,至於這些倒是沒有那麼重要

       以例子:輸入參數 m:3,Nr:3,曲線起始位置 st:70;來輸入運算theta值

       可得下圖:

 
               由圖可知曲線之值在正180跟負180之間

這次想要請教大大的問題:            
    小弟原本希望當值超過正90以及小於負90時,則跳出當下迴圈繼續跑下一個迴圈,也就是超過正90以及負90時不存檔!

    但苦在小弟對這部份一直無法找到正確辦法,又急迫需要此修改後之曲線如下圖,則在存檔程式的前面加上一偷吃步的程式碼!

    小弟希望各位大大能幫忙小弟想看看,如何在當值超過正90以及小於負90時,則跳出當下迴圈繼續跑下一個迴圈,也就是超過正90以及負90時跳出存檔計算下一步!

if(-90>theta or theta>90) theta=0; //將值直接視為0以當成跳出回圈無存檔(不過是假裝的),加了這段對往後計算不太好,相關曲線會一並連到零!!


..

訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容




獻花 x0 回到頂端 [樓 主] From:台灣教育部 | Posted:2010-01-31 15:57 |
dlc
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x7
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

請善用 continue, break..

如果在-90到90之間要結束迴圈, 請用 if(-90>theta or theta>90) break;

如果在-90到90之間不執行迴圈內的東西, 請用 if(-90>theta or theta>90) continue;

放置的地方就看你自己的需要了


獻花 x0 回到頂端 [1 樓] From:台灣新世紀資通 | Posted:2010-02-02 10:29 |
tk7545
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

我知道要用這兩個指令,但是擺不到好位置

而且這樣真的可以嗎??

我有試過大大說的方法,這樣亂擺ㄧ定會破壞存檔的結構

謝謝大大!!表情


獻花 x0 回到頂端 [2 樓] From:台灣中華電信 | Posted:2010-02-02 18:47 |
totsi
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x53
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

"超過正90以及負90時不存檔"指的是Theta超過你定的範圍後不寫入檔案是吧?

如果是的話,那底下的code你看一下是不是符合你的需求
複製程式
int main(int argc, char* argv[])
{
       FILE *pfile1 = fopen("theta.txt","w");
       int i,j,k; 
        float theta,DX,m,Nr,st; 
       bool IsOutOffRange = false;

       cout <<"m:"<<endl;
       cin >> m;
       cout <<"Nr:"<<endl;
       cin >> Nr; 
       cout <<"st:"<<endl;
       cin >> st;  

   for( i=1 ; i<=360;i++)
   {
          IsOutOffRange = false;       //Initialized before using
          fprintf(pfile1,"%d  ",i);     
        
       DX=(i-st)/140;

         for( j = 1 ; j <= m ; j++ )
               {        
              for( k = 1 ; k <= Nr ; k++ )
              {          
                               if( i>=1 && i<st)
                                      theta=40+(360/(m*Nr))*(j-1)+(360/Nr)*(k-1);
                                      if(theta>180) { theta=theta-360; };
                          
                               if( i>=st && st<210) 
                                      theta=40+(360/(m*Nr))*(j-1)+(360/Nr)*(k-1)+DX*360;
                                      if(theta>180) { theta=theta-360; };

                               if( i>=210 && 210<=360){ //NOTE:210一定會小於360
                                      theta=40+(360/(m*Nr))*(j-1)+(360/Nr)*(k-1);
                                      if(theta<180)
                                                 theta=40+(360/(m*Nr))*(j-1)+(360/Nr)*(k-1)+360;
                               } 

                               if(theta>180) { theta=theta-360; };
                               if(-90<theta || theta>90) 
                               {
                                      theta=0;
                                      IsOutOffRange = true;
                                      break;       //break to section of for( k = 1 ; k <= Nr ; k++ )
                               }
                               fprintf(pfile1,"%3.3f  ",theta); 
                       }       //End of for( k = 1 ; k <= Nr ; k++ )
                       if ( IsOutOffRange ) { break; };       //break to section of for( i=1 ; i<=360;i++) ->如果沒資料時不用換行的話,這行就留著
              fprintf(pfile1,"\n");      
               }       //End of for( j = 1 ; j <= m ; j++ )
   }       //End of for( i=1 ; i<=360;i++)

       fclose(pfile1); 
       system("pause"); 
       return 0;
} 

希望對您有幫助 表情


恩...
獻花 x1 回到頂端 [3 樓] From:台灣中華電信 | Posted:2010-02-03 17:18 |
tk7545
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

謝謝Totsi大大

  程式輸出的theta.txt檔結構改變了,已經無法用excel來畫出我那張圖了

  由於我存檔要一定的格式,才能得到那張圖,不過大大的方法很好,謝謝 表情

祝順心/


獻花 x0 回到頂端 [4 樓] From:台灣教育部 | Posted:2010-02-04 10:56 |
totsi
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x53
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

我發覺應該是我的理解能力變差了,因為你上面這篇回的內容我看不大懂 表情

不過畫圖方式跟存檔格式其實是不相關的啦。

也就是說,檔案讀取進來後(Loader)在透過解析器(parser)將檔案內容塞給給畫圖使用的結構(struct)之後。

畫圖的人(paiter)在將結構(也可是另外的檔案格式)內的東西依照他要畫的方式畫出來就好。

Ex:
Input file format:
Theta = 0 1 2 3
Value = 0.0 5.8 4.2

Loader=
structThetaData[0].Angle = 0;
structThetaData[0].Val = 0.0;
structThetaData[1].Angle = 1;
structThetaData[1].Val = 5.8;
.
.
etc.

Painter(此處輸出成csv檔)
Format:
Theta   Value
  0     0.0
  1     5.8
  .       .
  .       .

複製程式
char szBuf[16];
//省略開檔..要用記得要加
for ( unsigned int i = 0 ; i < 4 ; i++ ) //4為目前array的size
{
  fprintf(FID, "%s,%s\n", structThetaData[i].Angle, structThetaData[i].Value);
}
//省略關檔..要用記得要加
這樣輸出的檔案就可以用Excel開啟了,所以一樣可畫圖嚕. 表情

就記得,資料與動作是可分開的。 表情


恩...
獻花 x0 回到頂端 [5 樓] From:台灣中華電信 | Posted:2010-02-09 08:59 |
tk7545
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

謝謝大大

  從輸出檔案.txt就可以發現程式破壞了原本存檔的格式,原本有九排答案

  也就是如圖上所示會有九條線,但現在該輸出的東西的東西都不見了

  大大說可以另外寫一個動作重新輸出檔案,能夠讓excel開啟來畫圖,但畫出來的圖形會跟我原先的一樣嗎?

    大大上面的程式我不太懂,再次麻煩大大為我解說一下 表情   謝謝大大

祝新年快樂/


獻花 x0 回到頂端 [6 樓] From:台灣教育部 | Posted:2010-02-09 12:42 |
totsi
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x53
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

看來我看懂你的問題了,你的意思應該是說,程式那樣改完之後,有九條線不見了?!

我說的那個方法只的是你輸出的檔案格式有所變更的時候可以用的,所以如果你的問題如我所述,那麼要看的地方是程式內容。

我跑了一下,有發現是判斷是造成的。

所以這邊要麻煩您提供更詳細的題目說明,例如輸入是什麼,每項計算動作是在算什麼,有判斷的地方為何需要這樣判斷等等相關資訊

這樣要幫你看問題也比較方便。

表情


恩...
獻花 x0 回到頂端 [7 樓] From:台灣中華電信 | Posted:2010-02-09 14:20 |
tk7545
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

大大您好:

       程式主架構主要是一主迴圈從1跑到360

       當1到st(70)這個區段時線段為0

       st(70)到209時會以遞增的方式累加到Y軸為360

       210到360時線段為360

       之後我寫一個判斷式當線段值超過180時則減掉180

       在來會得到值是在正180與負180之間

      又以值為正180與負180時

       判斷當超過90或是小於負90時我的值將會歸零

      之後就會得到貼上去的那張圖

      但是不想當超過90或是小於負90時把值歸零而是要直接跳出回圈繼續下一步驟

      大大真的是很感謝你也>"<  肯為我想辦法

      另外不是大大理解能力變差,是我不太會表達很抱歉表情


獻花 x0 回到頂端 [8 樓] From:台灣教育部 | Posted:2010-02-22 11:39 |
totsi
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x53
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

如果照你所說的"不想當超過90或是小於負90時把值歸零而是要直接跳出回圈繼續下一步驟"
我用你的程式跑出來有值的地方如下,其他的都沒有值。
複製程式
94  

-178.286  
95  

-175.714  
96  

-173.143  
97  

-170.571  
98  

-168.000  
99  

-165.429  
100  

-162.857  
101  

-160.286  
102  

-157.714  
103  

-155.143  
104  

-152.571  
105  

-150.000  
106  

-147.429  
107  

-144.857  
108  

-142.286  
109  
-179.714  
-139.714  
110  
-177.143  
-137.143  
111  
-174.571  
-134.571  
112  
-172.000  
-132.000  
113  
-169.429  
-129.429  
114  
-166.857  
-126.857  
115  
-164.286  
-124.286  
116  
-161.714  
-121.714  
117  
-159.143  
-119.143  
118  
-156.571  
-116.571  
119  
-154.000  
-114.000  
120  
-151.429  
-111.429  
121  
-148.857  
-108.857  
122  
-146.286  
-106.286  
123  
-143.714  
-103.714  
124  
-141.143  
-101.143  
125  -178.571  
-138.571  
-98.571  
126  -176.000  
-136.000  
-96.000  
127  -173.429  
-133.429  
-93.429  
128  -170.857  
-130.857  
-90.857  
129  -168.286  
-128.286  

130  -165.714  
-125.714  

131  -163.143  
-123.143  

132  -160.571  
-120.571  

133  -158.000  
-118.000  

134  -155.429  
-115.429  

135  -152.857  
-112.857  

136  -150.286  
-110.286  

137  -147.714  
-107.714  

138  -145.143  
-105.143  

139  -142.571  
-102.571  

140  -140.000  
-100.000  

141  -137.429  
-97.429  

142  -134.857  
-94.857  

143  -132.286  
-92.286  

144  -129.714  


145  -127.143  


146  -124.571  


147  -122.000  


148  -119.429  


149  -116.857  


150  -114.286  


151  -111.714  


152  -109.143  


153  -106.571  


154  -104.000  


155  -101.429  


156  -98.857  


157  -96.286  


158  -93.714  

然後您提供的程式是當角度大於180時,是把角度減去360,而非您在上一篇回覆所說的180。

問題看起來像是數值分析的東西。您是否可提供計算用的方程式或是問題本身的描述(而不是單純只有計算過程)。
因為您的程式碼裡面有太多的常數,所以定義看不懂的話,也很難幫您改。
或者是你自己有畫流程圖,有的話一併提供會比較好。
希望對您有幫助 表情


[ 此文章被totsi在2010-02-24 08:45重新編輯 ]

此文章被評分,最近評分記錄
財富:50 (by 三仙) | 理由: 謝謝 totsi 大熱心的幫忙解惑 ^^


恩...
獻花 x1 回到頂端 [9 樓] From:台灣中華電信 | Posted:2010-02-22 17:12 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.056888 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言