TF
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Этот код находится у меня в голове ... он даже не был скомпилирован, не говоря уже о проверке.
// returns the average of array[first..last] inclusive.
int average(int[] array, int first, int last) {
int sum = 0;
for (i = first; i <= last; i++)
sum += array[i];
return sum / (last - first + 1); // not sure about the +1
}
Тогда вам нужно перебрать индексы массива frequencyBar
[0..7], установив frequencyBar[i] = average(array, first, last);
... хитрый бит вычисляет индексы first
и last
. попробуйте i*8
и (i+1)*8
соответственно ... это может быть не совсем верно, но это будет близко; -)
Приветствия. Кит.
РЕДАКТИРОВАТЬ: Скучно ... жду, когда вернутся результаты моего теста. Нет новостей, это хорошие новости, верно? ; -) * 1 021 *
Оказывается, что передача length
намного проще, чем передача last
индекса.
#include <stdio.h>
int sum(int array[], int first, int length) {
int sum = 0;
for (int i = first; i < first+length; i++)
sum += array[i];
return sum;
}
double average(int array[], int first, int length) {
double total = sum(array, first, length);
#ifdef DEBUG
printf("DEBUG: [%2d..%2d] %d", first, first+length-1, array[first]);
for (int i = first+1; i < first+length; i++)
printf(" + %d", array[i]);
printf(" = %d / %d = %f\n", (int)total, length, total/length);
#endif
return total / length;
}
int main(int argc, char* argv[]) {
int array[] = { // average
1, 2, 3, 4, 5, 1, 2, 3, // 2.625
4, 5, 1, 2, 3, 4, 5, 1, // 3.125
2, 3, 4, 5, 1, 2, 3, 4, // 3
5, 1, 2, 3, 4, 5, 1, 2, // 2.875
3, 4, 5, 1, 2, 3, 4, 5, // 3.375
1, 2, 3, 4, 5, 1, 2, 3, // 2.625
4, 5, 1, 2, 3, 4, 5, 1, // 3.125
2, 3, 4, 5, 1, 2, 3, 4 // 3
};
double frequency[8];
for (int i = 0; i < 8; i++)
frequency[i] = average(array, i*8, 8);
for (int i = 0; i < 8; i++)
printf("%f ", frequency[i]);
printf("\n");
}