• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 69
  • Last Modified:

Array Median As Double

I have a randomly generated array of integers between 1 and 100, and the array's length is between 5 and 10. The array is sorted in ascending order.

I am trying to determine how I would calculate the median. Part of the criteria is to "declare the median as a double." My current work uses an If...Else loop to get the median, but the median is not declared. I realize I have to start over, but I am unsure where even to begin.
0
Marie Hester
Asked:
Marie Hester
  • 2
  • 2
1 Solution
 
Fernando SotoRetiredCommented:
Please post the code you have come up with as a starting point.
1
 
Marie HesterAuthor Commented:
I wound up removing the loop all together, but now the median is not calculating correctly.

Dim rnd As New Random()
        Dim randArray(10) As Integer

        For n As Integer = 5 To 10
            randArray(n) = rnd.Next(1, 100)

        Next

        Array.Sort(randArray)

        For n As Integer = 5 To 10
            txtOutput.AppendText(randArray(n).ToString + Space(4))
        Next


        Dim num1 As Double = randArray(randArray.Length \ 2)
        Dim num2 As Double= randArray((randArray.Length \ 2) - 1)
        Dim median As Double = (num1 + num2) \ 2
        lblMedian.Text = (median.ToString) 

Open in new window


Before the loop I had was similar to this:

If (ubound(array) mod 2) = 0 Then

' odd number of items
median = array(ubound(array) \ 2)

Else

' even number of items
median = (array(ubound(array) \ 2) + array(1 + ubound(array) \ 2)) / 2
0
 
Fernando SotoRetiredCommented:
Hi Marie;

I have modified your code and should be doing what you need. Please read the comments in the code.
'' This value is 1 less then the number of values wanted, arrays are zero based
Dim numberOfValues As Integer = 9
Dim rnd As New Random()
'' This array had 11 elements in it, index is zero based
'' An index of 9 gives 10 elements 0 - 9
Dim randArray(numberOfValues - 1) As Integer

'' When I read this, "and the array's length is between 5 and 10.",
'' Now this For loop, "For n As Integer = 5 To 10", only uses the last 6
'' elements of the array leaving elements 0 - 4 empty. Is the statement looking to handle
'' any number of integers between 5 and 10 numbers. The modified For loop will always
'' load all elements of the array.
For n As Integer = 0 To (numberOfValues - 1)
    randArray(n) = rnd.Next(1, 100)
Next

Array.Sort(randArray)

'' Modified For loop to match the number of elements in the array
'' Clear the text from last execution of this code
txtOutput.Clear()
lblMedian.Text = ""
For n As Integer = 0 To (numberOfValues - 1)
    txtOutput.AppendText(randArray(n).ToString + Space(4))
Next

'' Using Integer Division
Dim num1 As Integer = (randArray.Length \ 2) - 1
Dim num2 As Integer = num1 + 1
Dim median As Double = 0.0

'' Test to see if the number of elements is even or odd
If numberOfValues Mod 2 = 0 Then
    '' Is Even
    median = (randArray(num1) + randArray(num2)) / 2
Else
    '' Is Odd
    median = randArray(num2)
End If

lblMedian.Text = (median.ToString)

Open in new window

1
 
Marie HesterAuthor Commented:
Thank you so much for your assistance.

Your comments were extremely helpful. I realize now where I was going wrong and why I wasn't getting the desired results.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now