StringGrid累加值的問題 |
答題得分者是:RedSnow
|
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
|
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
您好:
以下是大致原理,可能會有x,y軸跑掉,請自行修改一下.
挖勒,又忘了這裡是BCB區.
procedure TForm1.Button2Click(Sender: TObject); var int Total; begin StringGrid.Row=StringGrid->Row 1;//加一行放總數 for (j=0;j發表人 - supman 於 2005/06/17 17:17:48 |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
iii0628 您好: 參考一下:
int total; // 如果您的資料行 (Row) 是從 0 開始,則下列 row=1 請改為 row=0 for(int row=1; row< StringGrid1->RowCount; row ){ // 逐行處理 (橫行) total = 0; // 如果您的資料欄 (Column) 是從 0 開始,則下列 col=1 請改為 col=0 for(int col=1; col< StringGrid1->ColCount; col = 4){ // 間隔 4 欄 (縱列) 相加 if(StringGrid1->Cells[col][row] != ""){ // 如果不是空字串 (必要時應加上是否為數字資料的檢查) total = StrToInt(StringGrid1->Cells[col][row]); // 單行加總 } } // 此處之 total 為每行的加總數字,您的動作可加在此處 }7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/06/17 17:15:22 |
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
RedSnow你好:謝你的回應,我現在遇到一個問題就是我要將相加結果顯示在
StringGrid2上但是照我的寫法只會顯示2行結果在StringGrid2
for( row=1; row< StringGrid1->RowCount; row ){ // 逐行處理 (橫行) total = 0; ii ; jj=1; // 如果您的 row 是從 0 開始,則下列 row=1 請改為 row=0 for( col=1; col<= StringGrid1->ColCount; col = 31){ // 間隔 4 列相加 jj ; if(StringGrid1->Cells[col][row] != ""){ total = StrToInt(StringGrid1->Cells[col][row]); StringGrid2->Cells[jj][ii]=IntToStr(total); } } } |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
iii0628 您好: 您是說像這樣子嗎?
int total; for(int row=1; row7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/06/17 18:12:01 |
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
|
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
先謝謝兩位熱心回答,不過我現在還是在將StringGrid1做相加在複製到StringGrid2上有問題。只會做1行半而已
void __fastcall TForm1::BitBtn2Click(TObject *Sender) { //int radius= StrToInt(Edit1->Text); // int number=StrToInt (Edit2->Text); int total; int col,row,ro=1,co=1; for(col=1; col |
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
RedSnow你好:關於累加值的做法,for(int col=1; col< StringGrid1->ColCount; col += 4)這要寫法是否有誤。這樣的話COL=2 . 3 . 4 都沒有做到吧。我再簡單說明一下我的題目好了,大概如下 就是(1.1)+(1.3)+(1.5)、
(1.2)+(1.4)+(1.6)、(2.1)+(2.3)+(2.5)、(2.2)+(2.4)+(2.6)....等
1111 1111 1111 1111 1111 1111最後相加的結果,貼在StringGrid2上 3333 3333 |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
iii0628 您好: 請恕我資質魯鈍....,我越來越看不懂您到底要的是什麼了?
引言:關於累加值的做法,for(int col=1; col< StringGrid1->ColCount; col = 4)這要寫法是否有誤。這樣的話COL=2 . 3 . 4 都沒有做到吧。沒錯,我寫的是 "間隔四個欄位做一次加總的動作",這不正是符合了您在開題篇所寫 "要同一行每隔4列做相加" 的動作嗎?如果這不是您所要的,那麼請您對於您所認知的 "同一行"、"每隔4列" 以及 "相加" 做個 "明確一點的定義",因為我看不出來您改寫後的 for(col=1; col 引言:我再簡單說明一下我的題目好了,大概如下 就是(1.1) (1.3) (1.5)、(1.2) (1.4) (1.6)、(2.1) (2.3) (2.5)、(2.2) (2.4) (2.6)....等 1111 1111 1111 1111 1111 1111 最後相加的結果,貼在StringGrid2上 3333 3333您雖然說得簡單,但是我卻看得迷糊....,我無法理解 (1.1) (1.3) (1.5)、(1.2) (1.4) (1.6)、(2.1) (2.3) (2.5)、(2.2) (2.4) (2.6).... 是代表著什麼?如果 (1.3) 代表著 "第 1 行第 3 列" 的話,那麼 1.1 與 1.3 和 "每隔4列" 的關係到底在那裡? 您拿一連串的 1 相加成一連串的 3,也實在是無法讓我搞懂它們與 "每隔4列" 之間的關連性。 我看您還是直接用一段 "實際的資料" 與 "應有的結果" 來做說明好了。 7 天天敲鍵盤 v 時時按滑鼠 8 |
limeca
中階會員 發表:2 回覆:74 積分:60 註冊:2005-05-11 發送簡訊給我 |
不知道是不是這樣~~裡面的兩個for迴圈也可以while寫
int total; for(int col=1; col < StringGrid1-> ColCount; col ){ total=0; for(int row=1; row < StringGrid1->RowCount; row = 2){ if(StringGrid1->Cells[col][row] != ""){ total =StringGrid1->Cells[col][row].ToInt(); } } StringGrid2 -> Cells[col][1] = IntToStr(total); total=0; for(int row=2; row < StringGrid1-> RowCount; row = 2){ if(StringGrid1->Cells[col][row] != ""){ total =StringGrid1->Cells[col][row].ToInt(); } } StringGrid2 -> Cells[col][2] = IntToStr(total); }發表人 - limeca 於 2005/06/21 08:51:28 |
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
RedSnow你好:真的很不好意思,一直讓你誤解了。因為實際的資料實在是太龐大了貼上來很麻煩了,所以我就舉一次簡單的例子來說明,沒想到還是讓你誤解,SORRY。
我重新說明一下我的題目好了,第一列跟第五列、第九列(每一個相對位置)做統計若數字大於1則在StringGrid2的相對位置上加1、第二列跟第六列、第十列、第三列跟第七列、第十一列、第四列跟第八列、第十二列...以此類推
StringGrid1 0 1 1 0 第一列 1 1 1 1 0 1 1 0 1 1 1 1 0 2 3 0 第五列 1 1 1 2 0 1 4 0 0 1 5 5 0 2 3 0 第九列 1 1 1 2 0 1 4 0 0 1 5 5 StringGrid2 0 2 2 0 0 0 0 2 0 0 2 0 0 0 2 2 |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
iii0628 您好: 我以您提供的數據來模擬測試,大致上取得了相同的結果,以下就是我處理的方式,測試先決條件為:
1. StringGrid1 欄位內均為數字資料。
2. StringGrid2 對應的欄位全部預先填上 0。
程式敘述:
int row, col; // 供處理行列資料的迴圈使用 int rowstep = (StringGrid1->RowCount-1) / 4; // 將總行數 (rows) 除以 4 做為迴圈的計算基底 int restartRow; // 每次重新處理的第一行 (row) 編號 int processRows = 0; // 存放處理行數 (rows) 的累加數字 int tmpNum; // 暫存用之變數 for (restartRow=1; restartRow<=4; restartRow ) { // 處理 4 次 for (row=restartRow; row<=(restartRow 3)*(rowstep-1) 1; row =4) { // 每次隔 4 行 (rows) processRows ; // 累加處理行數 (rows) if (processRows > (StringGrid1->RowCount-1)) { // 若超過處理範圍就跳出迴圈 break; } for (col=1; col以上程式敘述未做最佳化與容錯處理,這個部分請自行補強。 希望這次沒有會錯意~ 7 天天敲鍵盤 v 時時按滑鼠 8 |
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
|
5515531
一般會員 發表:19 回覆:44 積分:12 註冊:2008-04-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |