請教 algorithm to C / C++ programming |
尚未結案
|
kmp
一般會員 ![]() ![]() 發表:17 回覆:51 積分:13 註冊:2004-07-24 發送簡訊給我 |
hi~各位版上的大人:
您好,因為剛開始學寫程式不久,問題初淺請多包含o 我想作一矩陣乘法,其algo如下:
Matrix-Multiply( A , B ) If colums[A]=! rows[A] then error"omcompatible dim." else for i=1 to rows[A] do for j=1 to colimns[B] do{ C[ i,j] = 0 ; for k=1 to columns[A] do C[ i,j] = C[ i,j] A[i,k]B[k,j] // D.P. } return C //-------------------------------------------- // 我的程式如下: int* matrix_multip( int *A , int rA , int cA , int *B , int rB , int cB ) { if( cA == rB ) { int *AxB = new int[rA * cB]; // ZeroMemory(AxB,sizeof(int)*rA * cB); for( int i=0 ; i < rA ; i ) for( int j=0 ; j < cB ; j ) { AxB[j i*cB]=0; for ( int k=1 ; k < cA ; k ) { AxB[j i*cB]= AxB[j i*cB] A[k j*cA]*B[i k*cA] ; } } return AxB ; } }我的程式在compiler過,但是run有錯,在input為32x32的bmp to array其得到 結果不是我想要的,但不會像128x128的bmp to array會出現在程式這行: AxB[j i*cB]= AxB[j i*cB] A[k j*cA]*B[i k*cA] ; 有誤停滯,其錯誤訊息為:Project xxx.exe raised exception class EAccess Violation with message 'Access violation at address 00402919 in module'dip.exe.' Read of address 02ED4008.' Process stopped. Use Step or Run to continue. 我有一些程式規劃的問題, 一.是在圖檔,我們習慣的是 W X H (是嗎?請教各位大大)和 matrix是row (h) x coloun (w)是不是不同? 如果是想要把圖檔當程一matrix的點,請問要怎樣有一致性,比較清楚,不好意思,之前的問題就是我常不清楚o 二.在http://delphi.ktop.com.tw/topic.php?TOPIC_ID=56102 感謝richtop 給的建意:"因為您現在要處理的是二維陣列或者是影像..."o 好像不同的compiler整合環境不同,其核心和ANSI C/C 是相同的,所以我的老師要求把屬BCB的input與output和處理signal的function分開o 但我不知是不是有 關連,有關我BCB處理inuput,如下,請幫我看這和上述我的coding of function 有沒有什restriction ? int* bmp2array(Graphics::TBitmap *bmp,int *wp,int *hp) { ....... for(j=0;jBest Regard kmp 發表人 - kmp 於 2004/09/20 21:40:23 發表人 - kmp 於 2004/09/20 23:20:03 |
richtop
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
kmp 您好: 底下我修改了您的程式碼,也用了我自己的命名習慣,可以回答您的部分問題。
//--------------------------------------------------------------------------- int* matrix_multip(int *A , int rA , int cA , int *B , int rB , int cB ) { if ( cA == rB ) { int *AxB = new int[rA * cB]; // ZeroMemory(AxB,sizeof(int)*rA * cB); for ( int r=0 ; r < rA ; r ) for ( int c=0 ; c < cB ; c ) { int index = c r*cB; AxB[index]=0; for ( int k=0 ; k < cA ; k ) { AxB[index] = A[r*cA k]*B[k*cB c] ; } } return AxB ; } } void show(int *mat, int row, int col) { AnsiString result = ""; for (int r=0; r我有一些程式規劃的問題, 一.是在圖檔,我們習慣的是 W X H (是嗎?請教各位大大)和 matrix是row (h) x coloun (w)是不是不同? 如果是想要把圖檔當程一matrix的點,請問要怎樣有一致性,比較清楚,不好意思,之前的問題就是我常不清楚o 矩陣與影像都是二維陣列,所以以(row, col)或(x,y)來看都是可以的。例如,影像要用ScanLine時,以逐列處理較方便;矩陣的元素以(row, col)存取,與數學上的使用描述相同,均有助於對該元素的掌握。至於(row, col)與(x,y)兩者,只要您知道它們所描述的是水平或垂直方向,那麼想怎麼用似乎是個人習慣問題了。 至於您的另一個問題,我不是很了解它的真正意義,而且int* bmp2array(Graphics::TBitmap *bmp,int *wp,int *hp)看起來怪怪的,所以暫時無法表示意見。 |
kmp
一般會員 ![]() ![]() 發表:17 回覆:51 積分:13 註冊:2004-07-24 發送簡訊給我 |
hi~ richtop :
您好,
|
kmp
一般會員 ![]() ![]() 發表:17 回覆:51 積分:13 註冊:2004-07-24 發送簡訊給我 |
hi~richtop
您好
|
richtop
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
|
kmp
一般會員 ![]() ![]() 發表:17 回覆:51 積分:13 註冊:2004-07-24 發送簡訊給我 |
hi~RichTop:
前輩您好
|
richtop
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
kmp 您好: 一下要完全解決您的問題,似乎不太容易,所以我先把看到的問題標示出來,您先核對看看。
|
kmp
一般會員 ![]() ![]() 發表:17 回覆:51 積分:13 註冊:2004-07-24 發送簡訊給我 |
hi~ richtop :
您好
int* LL_Lt_f_L( int *f, int w, int h) { ...(省) int *WLt_f = new int[w*h/2]; WLt_f = matrix_multip ( WLt , h/2 , w , f , w , h ); int *WLt_f_WL =new int[w*h/4]; WLt_f_WL = matrix_multip ( WLt_f , h/2, w, WL ,h , w/2 ); return WLt_f_WL ; }以上的結果不會在32x32,64x64,128x128,256x256中只有128x128會跳出error message為"陣列存取超出範圍" ,但我後來改老師的function在f0,和f那,則size >128x128都會出現error message差不多,其code如下.//blue word is original. ,請問為什麼? int* bmp2array(Graphics::TBitmap *bmp,int *wp,int *hp) { int i,j; int *f; //9-23 04// int *f0,*f; int w,h; Byte *ptr; w=bmp->Width; h=bmp->Height; *wp=w; *hp=h; f=new int[w*h];//f0=new int[w*h]; f=f0; for(j=0;jBest Regard kmp 發表人 - kmp 於 2004/09/23 13:16:14 |
andychang1690
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
引言: hi~ richtop : 您好以上的結果不會在32x32,64x64,128x128,256x256中只有128x128會跳出error message為"陣列存取超出範圍" ,但我後來改老師的function在f0,和f那,則size >128x128都會出現error message差不多,其code如下.//blue word is original. ,請問為什麼? int* bmp2array(Graphics::TBitmap *bmp,int *wp,int *hp) { int i,j; int *f; //9-23 04// int *f0,*f; int w,h; Byte *ptr; w=bmp->Width; h=bmp->Height; *wp=w; *hp=h; f=new int[w*h];//f0=new int[w*h]; f=f0; for(j=0;jBest Regard kmp 發表人 - kmp 於 2004/09/23 13:16:14 Kmp:你可否先檢查一下 w=bmp->Width; h=bmp->Height; 這w及h的值? Andy Chang
------
Andy Chang |
kmp
一般會員 ![]() ![]() 發表:17 回覆:51 積分:13 註冊:2004-07-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |