getthemike - 1 year ago 89

Vb.net Question

I have already turned this in so you won't be helping me cheat. Just wondering if this looks right:

The assignment:

Input a list of employee names and salaries, and determine the

mean (average) salary as well as the number of salaries above and

below the mean.

The Plan:

Allow input of names and salaries

Calculate Mean

Sort values

Count values above Mean

Count values below Mean

`//This program will allow a user to input an employee name and salary`

//The output will contain the mean salary

//as well as the number of salaries above and below the mean

//

//Arrays Used:

//Name(K) = Array for employee names

//Salary(K) = Array for salaries

//

//Variables Used:

//Mean = Mean of all employees Salaries

//UpMean = Number of Employees making more than the mean

//DwnMean = Number of Employees making less than the mean

//Sum = Sum of all salaries

//CountM = Counter for Mean

//CountUp = Counter for # of salaries above mean

//CountDwn = Counter for # of salaries below mean

Main

Call WelcomeMessage

Call InputData

Call Calculate

Call OutputData

End Program

WelcomeMessage

Write, “Beginning the Salary Program”

End WelcomeMessage

InputData

Declare Name(100) Of Strings

Declare Salary(100) Of Real

Declare Mean, UpMean, DwnMean As Real

Set Sum = 0

Set CountM = 0

Set CountUp = 0

Set CountDwn = 0

Write, "Enter Employee name and Salary."

Write, "Enter *,0 when done."

Input Name(K), Salary(K)

While Name(K) <> "*"

Set CountM = CountM + 1

Set Sum = Sum + Salary

Write, "Enter Employee name and Salary."

Write, "Enter *,0 when done."

Input Name(K), Salary(K)

End While

End InputData

Calculation

//Here Mean is found

Set Mean = Sum / CountM

//Here Number of Employees making more than the mean is found

For K = Step 1 to CountM

If Salary(K) > Mean Then

Set CountUp = CountUp + 1

End If

//Here Number of Employees making more than the mean is found

Set CountDwn = CountM - CountUp

//The above algorythm doesn't account for the possibility

//of someone making exactly the average so subtract 1 to reconcile

If Salary(K) = Mean Then

Set CountDwn = CountDwn - 1

End If

End Calculation

OutputData

Write, "There were," CountM, "salaries entered."

Write, "The mean salary is:", Mean

Write, "There are", CountUp, "employees who make more than the average"

Write, "There are", CountDwn, "employees who make less than the average"

End OutputData

Answer Source

A note about calculating `CountDwn`

:

Your "subtract 1 to reconcile" will, depending on how exactly the `For`

loop works in the implementation language, (a) generate an "undeclared variable"-type error, (b) generate an "index out of range" error, or (c) subtract one IFF the *last* salary was exactly equal to the average. (Also, your code doesn't include an `End For`

in `Calculation`

, but I assume it should be immediately after the first `End If`

in that function.)

Instead of calculating `CountDwn`

from `CountUp`

(after all, every single salary *could* be equal to the average), I'd suggest including it in the loop:

```
Calculation
//Here Mean is found
Set Mean = Sum / CountM
For K = Step 1 to CountM
//Here Number of Employees making more than the mean is found
If Salary(K) > Mean Then
Set CountUp = CountUp + 1
End If
//Here Number of Employees making less than the mean is found
If Salary(K) < Mean Then
Set CountDwn = CountDwn + 1
End If
End For
End Calculation
```

Note that `CountUp + CountDwn`

is not necessarily equal to `CountM`

.