5

私はすでにこれを提出したので、あなたは私がカンニングを手伝うことはありません. これが正しいかどうか疑問に思っています:

課題: 従業員の名前と給与のリストを入力し、平均 (平均) 給与と、平均を上回る給与と下回る給与の数を決定します。

計画: 名前と給与の入力を許可する 平均を計算する 値を並べ替える 平均より上の値をカウントする 平均より下の値をカウントする

//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
4

3 に答える 3

5

大丈夫そうです。私が提案しなければならない唯一のことは、name/salery への入力を読み取るときに do-while 構造を使用することです。ご覧のとおり、ループが始まる前とループ内で同じロジックがあります。

Write, "Enter Employee name and Salary."
Write, "Enter *,0 when done."
Input Name(K), Salary(K)

また、Calculate を呼び出していますが、ルーチンは Calculation と呼ばれているため、疑似コードはコンパイルされません ;)

提案をありがとう。Do-While にはまだあまり慣れていません。それはどのように見えるでしょうか?ループ内で入力に関する何かを変更する必要があるかもしれませんが、その方法がわかりませんでした。

次のようになります。

Do 
    Write, "Enter Employee name and Salary."
    Write, "Enter *,0 when done."
    Input Name(K), Salary(K)
    If Name(K) <> "*"
        Set CountM = CountM + 1
        Set Sum = Sum + Salary
    Else
        BreakLoop
    End If
End While (true)

それは実際には大きな違いではありませんが、実際には好みの問題です. 個人的には、何かを入力し、入力をチェックし、入力に応じて何かを行うことになっていることを簡単に認識できるようにコードが記述されているため、読みやすいと思います。

while ループでは、Set CountM などは最初の入力の後 (テキスト フロー内) に続きますが、残りの入力の前に来るため、ループの先頭に戻って、前の後に何かを行うことを理解する必要があります。ループ内の「ラウンド」。これは単なる小さなループですが、30 行の長さの場合 (神は禁じられています)、何が起こっているかを確認するには上にスクロールする必要があります。お分かりでしょうが :)

于 2009-06-11T23:12:21.347 に答える
1

計算に関する注意CountDwn:

「調整するために 1 を引く」はFor、実装言語でループが正確にどのように機能するかに応じて、(a) 「宣言されていない変数」タイプのエラーを生成するか、(b) 「範囲外のインデックス」エラーを生成するか、または (c ) IFF を 1 つ差し引くと、最後の給与は平均とまったく同じでした。(また、コードにはEnd Forinが含まれていませんが、その関数Calculationの最初の直後にあるはずEnd Ifです。)

CountDwnから計算する代わりにCountUp(結局のところ、すべての給与は平均に等しい可能性があります)、ループに含めることをお勧めします。

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

CountUp + CountDwnは と必ずしも等しくないことに注意してくださいCountM

于 2009-06-11T23:50:43.470 に答える
0
FINAL ALGORITHM

START
OUTPUT "Enter the number of parcels"
INPUT NUMBEROFPARCELS
INTEGER PRICE = 0
INTEGER PARCELWEIGHT [1:NUMBEROFPARCELS]
INTEGER TOTALPRICE = 0

FOR PARCELLOOP = 1 TO NUMBEROFPARCELS
    INTEGER REJECT = 0
    INTEGER ACCEPT = 0
    INTEGER ACCEPTWEIGHT = 0
    INTEGER REJECTEDPARCELS = 0

    OUTPUT "Enter the weight of the parcel in kg"
    INPUT WEIGHT
    IF (WEIGHT < 1) THEN
        REJECT = REJECT + 1
        OUTPUT "The weight of the parcel should be atleast 1kg"
    ELSE
        IF (WEIGHT > 10) THEN
            REJECT = REJECT + 1
            OUTPUT "The weight of the parcel should be less than 10kg"
    ENDIF
    IF (WEIGHT > 1) THEN
        IF (WEIGHT < 10) THEN
            PARCELWEIGHT[PARCELLOOP] = WEIGHT
        ENDIF
    ENDIF


    OUTPUT "Enter the first dimension of the parcel in cm"
    INPUT DIMENSION1
    IF (DIMENSION1 > 80 ) THEN
        REJECT = REJECT + 1
        OUTPUT "Each dimension of the parcel should be less than 80"
    ENDIF

    OUTPUT "Enter the second dimension of the parcel in cm"
    INPUT DIMENSION2
    IF (DIMENSION2 > 80 ) THEN
        REJECT = REJECT + 1
        OUTPUT "Each dimension of the parcel should be less than 80"
    ENDIF

    OUTPUT "Enter the third dimension of the parcel in cm"
    INPUT DIMENSION3
    IF (DIMENSION3 > 80 ) THEN
        REJECT = REJECT + 1
        OUTPUT "Each dimension of the parcel should be less than 80"
    ENDIF

    TOTALDIMENSION = DIMENSION1 + DIMENSION2 + DIMENSION3
    IF (TOTALDIMENSION > 200 ) THEN
        REJECT = REJECT + 1
        OUTPUT "The size of the parcel should be less than 200cm"
    ENDIF

    IF (REJECT > 0 ) THEN
        OUTPUT "Your parcel has been rejected for the reasons above"
        REJECTEDPARCELS = REJECTEDPARCELS + 1
    ENDIF

    IF (REJECT = 0)THEN
        OUTPUT "Your parcel has been accepted"
        ACCEPT = ACCEPT + 1 
        ACCEPTWEIGHT = ACCEPTWEIGHT + WEIGHT
    END IF

    INTEGER PARCELSACCEPTED = ACCEPT
    INTEGER TOTALWEIGHT = ACCEPTWEIGHT
    INTEGER PARCELSREJECTED = REJECTEDPARCELS

    OUTPUT "The number of parcels accepted is " PARCELSACCEPTED " and the total weight of the parcels is " TOTALWEIGHT
    OUTPUT "The number of parcels rejected is " PARCELSREJECTED
NEXT PARCELLOOP

FOR PRICELOOP = 1 TO NUMBEROFPARCELS
    IF (PARCELWEIGHT[PARCELLOOP] < 5) THEN
        PRICE = PRICE + 10
        TOTALPRICE = TOTALPRICE +PRICE
    END IF

    IF (PARCELWEIGHT[PARCELLOOP] > 5) THEN
        PRICE = ((PARCELWEIGHT[PARCELLOOP] - 5)*0.10)/100
        TOTALPRICE = TOTALPRICE +PRICE
    END IF

    OUTPUT "The price of the parcel is " PRICE
NEXT PRICELOOP

OUTPUT "The total price of all the parcels is " TOTALPRICE
STOP
于 2016-11-13T04:29:43.000 に答える