0

i know there is probably a trick for this in C that i do not know, but i attempted to write my own function for finding the mode of an array of data (As large as 1500 doubles).

Heres my crack at it.

void mode (double * array, int numItems)
{
	double array_saved_noMulti[numItems];
	int array_count[numItems], i = 0, n = 0, count = 0, max_count = 0, index = 0, index_2 = 0;
	
	for (i = 0, n = 0; i < numItems; i++) 
	{
		if (array[i] != array[i+1]) 
		{
			array_saved_noMulti[n] = array[i];
			n++;
		}
	}
	
	for (i = 0, n = 0; n < numItems; n++)
	{ 
		while (array[i] == array[i + 1])
		{
			count++;
			i++;
		}
		array_count[n] = count++;
		n++;
		count = 0;
	}
	
	array_count[0] = max_count;
	
	for (i = 0; i < numItems; i ++)
	{
		if (array_count[i] > max_count) 
		{
			array_count[i] = max_count;
			index = i;
		}
		if (array_count[i] = max_count) 
		{
			index_2 = i;
		}
	}
	
	printf("The mode is %lf or %lf, which occurs %i times", array_saved_noMulti[index], array_saved_noMulti[index_2], max_count);
}

if there is an easier way to do this please enlighten, it would make my day.

2
Contributors
2
Replies
4
Views
6 Years
Discussion Span
Last Post by atramposch
1

You need an outer "overall" loop (usually a for loop, let's say)

for(each number) {
   j=1;
   while(array[i] == array[i+j] { //because they're *sorted*
      ++j;
   }
   if(j > maxRepeats)
     mode = array[i];
}

That's to get you started, you may have one off errors in it -- it's very late here.

The key thing is, since the numbers are sorted, the repeating numbers, will be right next to each other. So a while or do while loop, is an intuitive way to do it.

0

wonderful. I could easily see where you were going with this so it was easy to figure out the rest. Thanks so much.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.