0

2D 配列の頻度を計算するプログラムを作成しましたが、すべての行 (すべての i) の結果を取得したいと考えています。しかし、for ループを追加するfor(i=0;i<S1;i++)と、1 行目の右の周波数が計算され、たとえば 2 行目では 1 行目の周波数が 2 行目に追加されます。 ? ありがとう :)

編集:私の問題をより明確にするために:数字を追加すると{10 20 30 30 30 30 20 30 10}

私は次の結果を受け取ることを期待する必要があります:

1st row    0-9        0
          10-19       1
          20-29       1
          30-39       1   from the row {10 20 30}
2nd row   0-9         0
          10-19       0
          20-29       0
          30-39       3    from the row {30 30 30}
 3rd row  0-9          0
          10-19        1
          20-29        1
          30-39        1  from the row {20 30 10}

これらの結果を得る代わりに、私は得る

       1st row 

       0-9        0
      10-19       1
      20-29       1
      30-39       1   
    from the row {10 20 30}
    2nd row   0-9         0
              10-19       2
              20-29       2
              30-39       2    from the row {30 30 30}
     3rd row  0-9          0
              10-19        3
              20-29        3
              30-39        3 from the row {20 30 10}




 #include <stdio.h>
 #define   S1      3                                      
 #define   COUNTER 11   
 #define   S2      3              

 int main() {                                                           
   float A[S1][S2];

   int i, j, k, low, high;                              
   int group[COUNTER] = {0,0,0,0,0,0,0,0,0,0,0};  

   for (i = 0; i < S1; i++) {                
     for (j=0; j < S2; j++) {                                               
        scanf("%f", &A[i][j]);                             
     }                                                       
   }  

   for(i=0; i < S1; i++) {
     for(j=0; j < S2; j++) {
       ++ group[(int)(A[0][j] + 0.5 ) / 10];
     }

     printf("\n");                                           
     printf("GROUP     RANGE     FREQUENCY\n\n") ;          
     for(k = 0; k < COUNTER; k++) {                                                       
       low = k * 10;                                      
       if(k == 10)                                          
         high = 100;                                       
       else                                                 
         high = low + 9;                                   
       printf("%2d    %3d to %3d       %d\n",             
               k+1, low, high, group[k]);                 
     }
   }             
   getch();                                                
 }        
4

1 に答える 1

0

次の行に移動するときにすべてゼロを含むように配列を再初期化する必要があります。おそらくこれはあなたのために働くでしょう:

for(i=0; i < S1; i++) {
   memset(group, 0, sizeof(group));
   for(j=0; j < S2; j++) {
      ++ group[(int)(A[0][j] + 0.5 ) / 10];
      // The rest of your code here.

また、各行の頻度を取得しようとしている場合はA[i][j]、 ではなく に格納されている値を見るべきではありませんA[0][j]か?

于 2013-04-13T21:19:00.847 に答える