2013-04-13 2 views
0

Я составил программу, которая вычисляет частоту 2D-массива, и я хочу, чтобы она давала мне результаты для каждой строки (для каждого i). Но когда я добавляю цикл for for(i=0;i<S1;i++), он вычисляет частоту для первой строки вправо, а во втором, например, он добавляет частоты 1-й строки ко второй и т. Д. Как я могу предотвратить ее добавление частот? предложения? Спасибо :)для цикла добавляет результаты предыдущих циклов

редактировать: чтобы сделать мою проблему более ясно: Если я добавить число {20 30 10 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();             
}   
+0

Ваше форматирование кода просто умопомрачительно. – 2013-04-13 20:52:07

+0

, пожалуйста, уточните вопрос ... –

ответ

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]?

+0

Да, вы правы в отношении A [i] [j], но даже если я его меняю, я не получаю результаты, которые я хочу. В частности, я получаю> 1-й ряд 0-9 0 10-19 1 20-29 1 30-39 1 из ряда {10 20 30} второй строки 0-9 0 10-19 2 20-29 2 30-39 4 из ряда { 30 30 30} 3-й ряд 0-9 0 10-19 2 20-29 2 30-39 5 из строки {20 30 10} – user2154323

+0

Ой, исправлена ​​ошибка. Этот код передает ваш тест. – kronion

+0

Да, теперь это прекрасно. Спасибо за ваше время :) – user2154323

Смежные вопросы