getthemike getthemike - 21 days ago 8
Vb.net Question

Pseudocode check. Needs validation for assignment

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

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.

Comments