-2

オンラインの C++ クラスを受講していますが、学習に苦労しています。以下の問題のコードで何が間違っているのか正確にはわかりません。時間数 = 40 の場合は式が正しくなりますが、時間数が 40 を超えるか 40 未満の場合は何か問題が発生しています。ご協力ありがとうございます。乾杯、R.

Problem:
if hrs <= 40 the regular pay = hrs times pay rate
if hrs > 40 then overtime pay = 1.5 times (hrs - 40) times pay rate
gross pay = regular pay plus overtime pay

// my code

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    //variable declarations

    int EmployeeIdentificationNumber = 0;
    double Hours = 0;
    double PayRate = 0;
    double GrossPay = 0;
    double RegularPay = 0;
    double OvertimePay = 0;


   std::cout << "Welcome to the Employee Payroll.\n"; // display message

    std:: cout << "Enter Your Employee Identification Number: "; //promp user for data
    std::cin >> EmployeeIdentificationNumber; //read integer from user into             EmployeeIdentificationNumber

    std::cout << "Please enter Hours worked: " ; // prompt user for data
    std::cin >> Hours; //read integer from user into Hours
    std::cout << "Please enter Pay Rate: " ; // prompt user for data
    std::cin >> PayRate; //read integer from user into PayRate

    RegularPay = Hours * PayRate; //calculate RegularPay
    OvertimePay = 1.5 * (Hours - 40) * PayRate; //Calculate Overtime

    //Qualifier for RegularPay

    if (Hours <= 40);
    RegularPay = Hours * PayRate;
   OvertimePay = 0;
   GrossPay = RegularPay + OvertimePay;
   std::cout << "Gross Pay is = $" ;

    //Qualifier for OverTime

    if (Hours > 40);
    RegularPay = Hours * PayRate;
    OvertimePay = 1.5 * (Hours - 40) * PayRate;
      GrossPay = RegularPay + OvertimePay;
    std::cout << RegularPay + OvertimePay << std::endl;

    std::cout << "Thanks for using the Employee Payroll\n";
    system("PAUSE");
  return EXIT_SUCCESS;

}

4

3 に答える 3

7

コードスニペットについて:

if (Hours <= 40);
    RegularPay = Hours * PayRate;
    OvertimePay = 0;

これはあなたが思うようにはなりません。ステートメントの;最後の は、if「時間数が 40 未満の場合は何もしない」という意味で、関係なく定期および残業を設定します。おそらくあなたが望んでいたのは:

if (Hours <= 40) {
    RegularPay = Hours * PayRate;
    OvertimePay = 0;
}

通常の残業代と残業代の計算全体は、おそらく次のように書くとよいでしょう。

if (Hours <= 40) {
    RegularPay = Hours * PayRate;
    OvertimePay = 0;
} else {
    RegularPay = 40.0 * PayRate;
    OvertimePay = 1.5 * (Hours - 40) * PayRate;
}

GrossPay = RegularPay + OvertimePay;
std::cout << "Gross Pay is = $"  << GrossPay << '\n';

2 つの状況で通常の給与と残業代の正しい値が設定されていることがわかります。その後、それらを追加して、任意の方法で印刷できます。

これ (節RegularPay = 40.0 * PayRateでの の使用else) は、残業が 1 時間半になるためのものであることに注意してください。よくあることです。

2倍の時間半の業界で働いている場合(つまり、あなたは非常に幸運です)、計算をRegularPay = Hours * PayRate元のように変更してください。それはあなたの説明がそれを指定する方法のようですが、チューターに確認するか、少なくとも理由をコメントすることをお勧めします.

倍の時間と半分の場合、コードを次のように単純化できます。

RegularPay = Hours * PayRate;
OvertimePay = 0;
if (Hours > 40)
    OvertimePay = 1.5 * (Hours - 40) * PayRate;

GrossPay = RegularPay + OvertimePay;
std::cout << "Gross Pay is = $"  << GrossPay << '\n';
于 2013-09-04T01:03:41.517 に答える
0

「Gross Pay is = $」の印刷は、両方の条件に共通しているため、外部に移動します。セミコロンの代わりに開始中かっこを使用し、コード ブロックに対して実行するコード ブロックの最後で終了中かっこを使用します。コードは次のようになります。

std::cout << "Gross Pay is = $" ;

//Qualifier for RegularPay

if (Hours <= 40){
    RegularPay = Hours * PayRate;
    OvertimePay = 0;
    GrossPay = RegularPay + OvertimePay;
}

//Qualifier for OverTime

if (Hours > 40){
    RegularPay = Hours * PayRate;
    OvertimePay = 1.5 * (Hours - 40) * PayRate;
    GrossPay = RegularPay + OvertimePay;
}
std::cout << RegularPay + OvertimePay << std::endl;
于 2013-09-04T01:12:41.517 に答える