我寫的是這樣
可以幫我看一下哪裡有錯
要怎麼改
3Q
int i,j;
double r,med,temp;
for (i = 0; i < rows; i++){
for (j = 0; j < cols; j++){
r[j] = z[j*rows + i];
if(r[j]>r[j+1]){
temp=r[j];
r[j]=r[j+1];
r[j+1]=temp;
if(col % 2 == 1){
med[i]=r[0.5*(cols+1)];}
else{med[i]=0.5*(r[0.5*cols]+r[1+0.5*cols]);}
}
}
}
2007-07-30 16:43:07 · 2 個解答 · 發問者 伊婷 林 5 in 電腦與網際網路 ➔ 程式設計
int i,j;
double *r,*med,temp;
r=new double[cols];
med = new double[rows];
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
r[j] = z[i*cols + j];
sorting(r); //****
if(col % 2 == 1)
{
med[i]=r[0.5*(cols)];
}
else
{ med[i]=(r[0.5*cols-1]+r[0.5*cols]);}
}
}
看你錯的感覺,應該是個新手,有些東西在宣告跟使用上要想清楚
1.你的資料是rows*cols這麼多你希望妳每cols筆資料就會有一個中位數,所以你會有rows筆中位數
2.因為妳每找一個中位數需要rows筆資料所以r[]要能存rows個,用動態宣告
double *r;
r=new double[cols];
3.你會有cols個中位數,所以用動態宣告
double *med;
med=new double[cols];
之後有太多東西了@@~~~打的有點累
應該找的到範例,感覺妳先看懂相關範例再寫會比較清楚
2007-07-31 11:58:00 補充:
我修改的部分有sorting(r);
這個是代表說你必須寫出一個對r[]排序的方法,因為你上面寫的方法沒辦法有排序的效果。
還有,如果陣列有5(奇數)個成員,那這5個是r[0],r[]1,r[2],r[3],r[4]
由此可看到中間的數字是r[2], 它的算法是 2 = 5/2 (或是你寫的0.5*cols)
依此類推,偶數就是....
2007-07-30 20:37:13 · answer #1 · answered by yi-ling 2 · 0⤊ 0⤋
#include
#include
#define row 2
void sort(double *Number, int Length){
int i,j;
double temp;
for(i=0;i
temp=Number[i],Number[i]=Number[j],Number[j]=temp;
}
double middle(double *Number, int Length){
if(Length&1){
return Number[(Length>>1)];
}else{
return (Number[(Length>>1)-1]+Number[(Length>>1)])/2;
}
}
int main(int argc, char *argv[]){
//=====START=====//
double n1[row][3]={{50,40,30},{33,22,11}};
double n2[row][4]={{60,50,40,30},{44,33,22,11}};
int i;
int len1=(int)sizeof(n1[0])/sizeof(n1[0][0]);
int len2=(int)sizeof(n2[0])/sizeof(n2[0][0]);
for(i=0;i
printf("n1[%d] %.f\n",i,middle(n1[i],len1));
}
for(i=0;i
printf("n2[%d] %.f\n",i,middle(n2[i],len2));
}
//=====END=====//
system("PAUSE");
return 0;
}
2007-08-01 13:39:54 · answer #2 · answered by Big_John-tw 7 · 0⤊ 0⤋