2009-06-11 16 views
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 

答えて

1

ノートを何を意味するか知っていれば:

あなたの(A)」を生成、Forループは実装言語でどのように機能するかを正確に依存し、意志「を調整するには、1を引きます」 (b)「範囲外のインデックス」エラーを生成する、または(c)1つのIFFを減算すると最後の給与は平均と正確に等しくなりました。 (コードにはが含まれていませんが、その機能の最初のEnd Ifの直後であることが前提です。)

代わりに(結局、一つ一つの給与平均に等しいかもしれない)​​からCountDwnを計算する、私はループの中でそれを含むことをお勧めしたい:CountUp + CountDwnではないこと

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 

注意必ずCountMに等しくなります。

5

未満の平均上記 カウント値を値の名前と給与の入力を許可するには、[OK]を検索します。私が提案しなければならないのは、名前/ saleryへの入力を読みながらdo-while構造を使用することだけです。あなたが見ることができるように、あなたはループが始まる前に同じロジックを持ち、ループ内:あなたは計算を呼び出しているが、ルーチンが計算と呼ばれているので

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

また、擬似コードは、コンパイルされません。)

お礼ありがとうございます。 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行の長さの場合(神は禁じられています)、スクロールして何が起こっているのかを確認する必要があります。あなたは私がCountDwnの計算について:)

+1

私は実際にやっているとは思いません... while(真)、コード内のbreakステートメントでは、新しい人を教えるための良いスタイルです。コードは自己記述的でなければならず、ここでの実行フローは追従しにくい。 – jkeys

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 
関連する問題