線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2904
推到 Plurk!
推到 Facebook!

min()與max()函數於陣列上使用問題

答題得分者是:aftcast
moonsea
一般會員


發表:11
回覆:15
積分:5
註冊:2007-10-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-08 01:05:24 IP:122.122.xxx.xxx 訂閱
把影像pixel讀出存入陣列做運算後變成float型態,
因為不想採用回圈找出最大值與最小值,
所以使用max()與min()兩個函式,但發生了不正確的錯誤結果:
1.min找出的不是最小值
2.max找出的值不在陣列裡面
請問是不是記憶體配置不當或是其他問題呢?

[code cpp]
#include
#include

//--- fre是影像灰階值一維陣列(8bit),ImgH與mgW為影像長寬
float Max=max( *fre ,(float)(ImgH*ImgW));
float Min=min( *fre ,(float)(ImgH*ImgW));

[/code]

因為找了蠻久大部分都在講兩個數值的比較,試過很多地方還是不正確,感謝。

aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-08 01:16:14 IP:59.115.xxx.xxx 訂閱
max 與 min 本來就是只比對二個數值,並非數列。若要比對一整個陣列找出最大或最小,應該用quick sort 之類的演算法。

可參考如下的例子

http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/

或者用c 裡泛型演算法
min_element 和 max_element

可參考如下的例子(應該很適用你要的)

http://www.cplusplus.com/reference/algorithm/max_element/
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2009-04-08 01:20:16, 註解 無‧
aftcast 重新編輯於 2009-04-08 01:57:59, 註解 無‧
moonsea
一般會員


發表:11
回覆:15
積分:5
註冊:2007-10-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-09 01:45:34 IP:122.122.xxx.xxx 訂閱
不知道是指標錯誤還是其他問題(fre是一個陣列的指標),
把 fre[ ] 輸出資料以手動查max,
結果跟函式的不同,有時候甚至不再輸出的數據裡,
但函式的答案與土法迴圈的max一樣,
請問是哪邊的邏輯、資料型態或是指標問題嗎?


[code cpp]

//---輸出資料
for(int j=0;j {
ListBox3->Items->Add(fre[j]);
}

//---用函式找出最大值位置
ListBox4->Items->Add(*max_element(fre,fre (ImgH*ImgW)));

[/code]
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-09 09:08:23 IP:210.64.xxx.xxx 訂閱
請問 fre 的指標宣告是什麼?  貼一下。
此外,它所指向的陣列宣告也貼一下吧。

若可以的話,程式碼貼多一點會比較容易了解可能發生的情形。

初部判斷應該是和資料型別有關。
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
moonsea
一般會員


發表:11
回覆:15
積分:5
註冊:2007-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-04-09 10:23:53 IP:140.127.xxx.xxx 訂閱
找到原因了,
應該是前面運算有改到了資料形態所產生的問題,
經測試max與min都正確,感謝熱心幫忙。

貼出測試成功部分:
[code cpp]
//---最大值
ListBox4->Items->Add(*max_element(fre,fre (ImgH*ImgW)));
//---最小值
ListBox4->Items->Add(*min_element(fre,fre (ImgH*ImgW)));

//--->ImgH*ImgW=影像大小
//--->*max_element(fre,fre (陣列大小))
[/code]
編輯記錄
moonsea 重新編輯於 2009-04-09 10:24:50, 註解 無‧
系統時間:2024-04-24 15:22:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!