2015-02-08 2 views
0

Следующий код почти работает, но по какой-либо причине первое значение в напечатанном массиве также является последним значением, а также первым значением следующего набора данных, который печатается. Я знаю, что это может показаться запутанным. Вот кодКод, который разбивает массив и подсчитывает повторения

#include <stdio.h> 
#define MAX 288 

int nThArrayPrint(double prev, int count, int i, double *array) { 
int j = MAX*i; 
for (i = j; i <(j+MAX); i++) { 
    if (array[i] == prev) { 
     count++; 
    } else { 
     printf("%.4lf= %d\t", prev, count); 
     prev = array[i]; 
     count = 1; 
    } 
} 
return count; 

}

int main() 
{ 
FILE *fp; 
fp = fopen("C:\\Users\\niall\\Desktop\\question2.txt", "r"); 
double array[MAX * 5]; // Initializes array to all 0.0s 
int i, x, j, count; 
double prev = 0; 

if (fp != NULL) { 
    for (i = 0; i < MAX * 5; i++) { //Load values from file into an array 
     fscanf(fp, "%lf", &array[i]); 
    } 
    fclose(fp); 
    prev = array[0]; // initialize 
    for (i = 0; i < 5; i++){ 
     count = 1; 
     printf("\tNumber of times each value is repeated for the %dth set of values\n\n", i+1); 
     count = nThArrayPrint(prev, count, i, array); 
     prev = array[MAX*i]; 
     printf("%.4lf= %d\n\n", prev, count); 
    } 
} else { 
    printf("There was a probem opening the file."); 
} 
} 
+0

'двойной массив [MAX * 5]; // Инициализация массива всех 0.0s' ... как? не 'array' в' auto'-хранилище? –

+0

Ты меня там потерял – niallo27

+0

Жаль, что я тебя не понял. –

ответ

0

изменить ниже сегмент кода

prev = array[0]; // initialize 
for (i = 0; i < 5; i++){ 
    count = 1; 
    printf("\tNumber of times each value is repeated for the %dth set of values\n\n", i+1); 
    count = nThArrayPrint(prev, count, i, array); 
    prev = array[MAX*i]; 
    printf("%.4lf= %d\n\n", prev, count); 
} 

в

count = 1; 
for (i = 0; i < 5; i++){ 
    printf("\tNumber of times each value is repeated for the %dth set of values\n\n", i+1); 
    for (j = i*MAX; j < (i*MAX)+MAX; j++) { 
     if (array[j] == array[j+1]) { 
      count++; 
     } else { 
      printf("%.4lf= %d\n", array[j], count); 
      count = 1; 
     } 
    } 
    if(count > 1){ 
     printf("%.4lf= %d\n", array[j], count-1); 
     count = 1; 
    } 
} 

Испытано с ниже входом с MAX, как 9

12 12 12 12 12 1 1 1 1 4 5 5 6 7 8 9 3 3 3 2 2 2 1 1 1 1 1 1 6 62 2.2 2.2 2.2 3.2 3.2 3.2 3.2 22 22 22 22 22 1 22 22 22 22 

выход:

Number of times each value is repeated for the 1th set of values 

12.0000= 5 
1.0000= 4 
    Number of times each value is repeated for the 2th set of values 

4.0000= 1 
5.0000= 2 
6.0000= 1 
7.0000= 1 
8.0000= 1 
9.0000= 1 
3.0000= 2 
    Number of times each value is repeated for the 3th set of values 

3.0000= 1 
2.0000= 3 
1.0000= 5 
    Number of times each value is repeated for the 4th set of values 

1.0000= 1 
6.0000= 1 
62.0000= 1 
2.2000= 3 
3.2000= 3 
    Number of times each value is repeated for the 5th set of values 

3.2000= 1 
22.0000= 5 
1.0000= 1 
22.0000= 2 
Смежные вопросы