Третий день программирования на C, так что терпите меня. Я делаю упражнение для начинающих, в котором я генерирую случайные числа и вычисляю среднее значение, стандартное отклонение, медиану и моду.
Проблемы в режиме. Я перехожу к работе над некоторыми другими проектами, а пока публикую это, чтобы посмотреть, сможет ли кто-нибудь заметить мою ошибку. Пользователь вводит вначале диапазон случайных чисел и их количество. Режим возвращает правильное значение, если минимум равен 1, но не в том случае, если минимум больше.
Также будет интересно, если есть какие-либо идеи о том, как разрешить более одного режима - у меня есть приблизительное представление, как это сделать (дополнительный цикл for и дополнительный массив? но не совсем уверен, как я буду обрабатывать только печать соответствующие значения из нового массива).
Здесь (только соответствующие части) моего кода:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int main() {
// setting parameters
int SIZE, MIN, MAX;
printf("How low should the smallest random number be?\n");
scanf("%d",&MIN);
printf("How high should the largest random number be?\n");
scanf("%d",&MAX);
printf("How many random numbers do you want?\n");
scanf("%d",&SIZE);
int rnx[SIZE];
int biggles, *tally, count=0;
int mode;
int i,j;
float mean, sumdev, median;
tally = (int*) calloc (MAX-MIN,sizeof(int)); // creates an array for the tally in the mode function and initializes it to zero for the incrementing.
srand(time(NULL)); // random seed outside the loop
// generate random numbers into an array
for(i=0;i<SIZE;i++) {
rnx[i]=round(((double)rand()/(RAND_MAX)*(MAX-MIN)+MIN));
}
BubbleSort(rnx,SIZE); // left out for brevity the actual function I wrote for this but it works
// calculates the mode
for(i=MIN;i<MAX;i++) {
for(j=0;j<SIZE;j++) {
if(rnx[j]==i) {
tally[i-MIN]++; // in the second array we register how many times each number occurs in the random sequence, checking from the minimum to maximum.
}
}
}
mode = biggles;
// for (j=0;j<10;j++) {
for(i=MIN;i<MAX;i++) {
if(tally[i-MIN]>count) {
count=tally[i-MIN];
if(count>1) {
mode=i-MIN+1; }
}
}
if (mode!=biggles) {
printf("The mode of the random numbers is %d\n",mode); }
else { printf("The random numbers have no mode.\n"); } // in case there is no mode. but what if there is more than one?
free(tally);
return 0;
}