For school I have to create a function that prints the mode of a sorted array. It has to account for there being multiple modes and there being no modes as well. For some reason even if there is a mode in the array the function always prints "no mode"
void findMode(double *mode, double a[], unsigned int size)
{
double number = a[0]; //Used to to compare values in the array to see if they're similar
int count = 1; //Keeps track of number of occurences for each number
int max = 1; //Keeps track of max number of occurences found for each number
int uniqueNum = 1; //Keeps track of how many unique values in the array
int maxCount = 1; //Counts how many set's of numbers occur the max ammount of times
int elementNum = 0; //Keeps track of element number in mode array
for (unsigned i = 1; i < size; ++i)//loop to determine how many modes and unique numbers there are
{
if (number == a[i])
{
++count; //if the numbers the two numbers compared are the same, count is increased by 1
}
else
{
if (count == max)
{
++maxCount; //Keeps track of how many modes are in the array
}
if (count > max)
{
//If the two numbers compared are not the same and the count of the previous "set" of similar numbers is higher than the current max count, max is equal to the new count
max = count;
maxCount = 1; //Reset the max count if a new max is found
}
//Count is set back to 1 as we are counting a different number
count = 1;
number = a[i];
++uniqueNum; //Unique number variable gets incremented
}
}
printf("\n%d, %d, %d", max, maxCount, uniqueNum);
count = 1; //sets count back to 1 for next loop
if ((double)size / max == uniqueNum)
{
mode = malloc(1);
mode[0] = (a[size - 1] + 1); //Returns a value that can't exist in the array there is no mode
}
else
{
mode = malloc(sizeof(double) * maxCount); //makes the mode array the right size to store all the modes
for (unsigned i = 1; i < size; ++i)//loop to determine what the modes are
{
if (number == a[i])
{
++count; //if the numbers the two numbers compared are the same, count is increased by 1
}
else
{
if (count == max)
{
mode[elementNum] = a[i];
++elementNum;
}
//Count is set back to 1 as we are counting a different number
count = 1;
}
}
if (mode[0] = (a[size - 1] + 1))
{
printf("\nMode: no mode");
}
else
{
printf("\nMode: {");
for (int i = 0; i <= (sizeof(mode) / sizeof(mode[0])); ++i)
{
printf(" %.3lf ", mode[i]);
}
printf("}");
}
}
}
I have no clue how close or far away I am from the correct logic in this, so if I'm way way off and need to start from scratch let me know.
Thanks!