954,153 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Need help calculating Median when array is even

Please help I am writing a program that calculates the mean and median of a sequence of integers. My program works fine as long as the array is odd. Can someone please help me with a statement to calculate the median when the array is even. I have included my code for the program.

#include

float mean (const int* A, size_t size); //calculates mean of data in A
float median (int* A, size_t size); // calculates median of data in A
void swap (int& x, int& y); // interchanges values of x and y
void sort (int*A, size_t size); // sorts the data in A
void bubblesort (int, int);

int main()
{
int n;
size_t size;
int A [100]; size = 0;
std::cout << "Enter data to calculate the mean and median: ";
while((std::cin >> n) && (size < 100))
{
A[size] = n;
++size;
}

for (size_t i = 0; i < size; i++)
std::cout << A[i] << ' ';
std::cout << '\n';

std::cout << "The mean of the data entered is: " << mean(A,size) << '\n';
std::cout << "The median of the data entered is: " << median(A,size)<< '\n';

for (size_t i = 0; i < size; i++)
std::cout << A[i] << ' ';
std::cout << '\n';
return 0;
}

float mean(const int* A, size_t size)
{
float total = 0;
for (size_t i = 0; i < size; i++)
total += A[i];
return total / size;
}

float median(int* A, size_t size)
{
sort(A,size);
return A[size/2];
}

void swap(int& x, int& y)
{
int hold = x;
x = y;
y = hold;
}

void sort(int* A, size_t size)
// bubble sort
{
for (size_t pass = 0; pass < size - 1; pass ++)
for (size_t j = 0; j < size - 1; j++)
if (A[j] > A[j + 1])
swap(A[j], A[j+1]);
}

somer2412
Newbie Poster
6 posts since Oct 2004
Reputation Points: 10
Solved Threads: 0
 

>Can someone please help me with a statement to calculate the median when the array is even.
Take the median of the two middle items: a[size / 2] and a[size / 2 + 1].

Narue
Bad Cop
Administrator
15,460 posts since Sep 2004
Reputation Points: 6,464
Solved Threads: 1,401
 

>>Can someone please help me with a statement to calculate the median when the array is even.
>Take the median of the two middle items: a[size / 2] and a[size / 2 + 1].
Wouldn't that be the mean of a[size / 2] and a[size / 2 - 1]?

Dave Sinkula
long time no c
Team Colleague
5,058 posts since Apr 2004
Reputation Points: 2,780
Solved Threads: 314
 
>>Can someone please help me with a statement to calculate the median when the array is even. >Take the median of the two middle items: a[size / 2] and a[size / 2 + 1]. Wouldn't that be the mean of a[size / 2] and a[size / 2 - 1]?


Feh, you're no fun. ;)

Narue
Bad Cop
Administrator
15,460 posts since Sep 2004
Reputation Points: 6,464
Solved Threads: 1,401
 

((n/2)+(n+1)/2)/2

n is the nmber of elements in the array

i e
if yr array was x[n];
median = ((x[n]/2)+(x[n]+1)/2)/2;

matika
Newbie Poster
19 posts since May 2004
Reputation Points: 15
Solved Threads: 0
 

((n/2)+(n+1)/2)/2

n is the nmber of elements in the array

i e if yr array was x[n]; median = ((x[n]/2)+(x[n]+1)/2)/2;

sorry again it will b ((x[n]/2)+(x[n+1])/2)/2

matika
Newbie Poster
19 posts since May 2004
Reputation Points: 15
Solved Threads: 0
 
sorry again it will b ((x[n]/2)+(x[n+1])/2)/2

Really?

#include <iostream>
 
 float median(int* x, int n)
 {
    return ((x[n]/2)+(x[n+1])/2)/2;
 }
 
 int main()
 {
    int i, A[] = {1,2,3,4,5,6,7,8,9,10}, size = sizeof A / sizeof *A;
    float result = median(A, size);
    for ( i = 0; i < size; i++ )
    {
 	  std::cout << A[i] << ' ';
    }
    std::cout << "\nThe median of the data entered is: " << result << '\n';
    return 0;
 }
 
 /* my output
 1 2 3 4 5 6 7 8 9 10
 The median of the data entered is: 1.38446e+06
 */
Dave Sinkula
long time no c
Team Colleague
5,058 posts since Apr 2004
Reputation Points: 2,780
Solved Threads: 314
 

float median(int* x, int n)
{
return ((x[n/2])+(x[(n/2)+1]))/2;
}

matika
Newbie Poster
19 posts since May 2004
Reputation Points: 15
Solved Threads: 0
 

tell me when it works

matika
Newbie Poster
19 posts since May 2004
Reputation Points: 15
Solved Threads: 0
 

Uh... look up .

Oh nevermind.

float median(int* x, int n)
 {
    return ( x [ n / 2 ] + x [ n / 2 - 1] ) / 2.0F;
 }
Dave Sinkula
long time no c
Team Colleague
5,058 posts since Apr 2004
Reputation Points: 2,780
Solved Threads: 314
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You