0

私の割り当ては、次のように、パラメーターを使用して 3 つの関数を使用することです。

  1. 関数 calcRegBill – 使用された分数の 1 つの整数引数を受け入れます。支払総額を決定して返します。

  2. 関数 calcPremBill – 使用される日中の分数と夜間の分数の 2 つの整数引数を受け入れます。支払総額を決定して返します。

  3. 関数 printBill – 4 つの引数を受け入れます: 文字列アカウント番号、文字サービス コード、整数の合計使用分数、および未払額。これは、次の形式を使用して通常の請求書またはプレミアム請求書を印刷する一般的な請求書印刷機能であることに注意してください。

口座番号:XXXX

サービスの種類: レギュラー (受け取るキャラクターによってはプレミアム)

総時間: XXX

未払い額: $XXX.XX

メイン関数は、アカウント番号とサービス コードの入力をユーザーに促します。サービス コードに基づいて、main は正しい分数を要求し、必要に応じて上記の関数を呼び出してジョブを完了します。さらに、次のことを行う必要があります。

プログラムにループを組み込み、請求書を必要な回数だけ実行します。これは、センチネル制御ループまたはカウンター制御ループのいずれかで行うことができます。

私はすでにプログラムを構築し、プログラムのメイン関数のすべてでテストしました。それを3つの別々の機能に分割し、すべてを引き続き機能させる方法について、私は本当に混乱しています。私は C++ の初心者です

これがこれまでのプログラムです。機能を追加し始めましたが、それらが正しいとは思いません。

// Cell Bill Fun
// April 14, 2013

#include <iostream>
#include <iomanip>

using namespace std;

double calcRegBill(int a);

double calcPremBill(int b, int c);

void printBill(string acctNumber, char serviceCode, int d, double e);

int main()
{

//declare variables for question 4

char serviceCode;
int acctNumber;
int minutes;
int dayMinutes;
int nightMinutes;
int charge;
int dayFee;
int nightFee;
double amtDue;


//get input
cout << "Please enter your information to calculate your cell phone bill ";
cout << "What is your account number? (please enter a 4-digit number-example 1234): ";
cin >> acctNumber;
cout << "Do you have regular or premium service? Enter r for regular service, p for   Premium.: ";
cin >> serviceCode;

//format output
cout<< setprecision(2) << fixed;
//output

 switch (serviceCode)
{
    case 'r':{
cout << "How many minutes did you use?: ";
cin >> minutes;
    if (minutes <= 50)
    amtDue = 10;
    else if (minutes > 50)
     amtDue=10+((minutes-50)*.20);
    else
        cout <<"You have input an invalid service code. Please type r for regular or p for premium service." << endl;

cout <<"Cellular Account #:" << acctNumber << endl;
cout <<"Type of Service: Regular" << endl;
cout <<"Total Minutes:" << minutes << endl;
cout <<"Amount Due: $"<< amtDue << endl;}
break;

case 'R':{
cout << "How many minutes did you use?: ";
cin >> minutes;
    if (minutes <= 50)
    amtDue = 10;
    else if (minutes > 50)
     amtDue=10+((minutes-50)*.20);
    else
        cout <<"You have input an invalid service code. Please type r for regular or p for premium service." << endl;

cout <<"Cellular Account #:" << acctNumber << endl;
cout <<"Type of Service: Regular" << endl;
cout <<"Total Minutes:" << minutes << endl;
cout <<"Amount Due: $"<< amtDue << endl;}
break;

case 'p':
    cout << "How many daytime minutes did you use?";
    cin >> dayMinutes;
    if (dayMinutes <= 75)
    dayFee = 0;
    else if (dayMinutes > 75)
    dayFee=((dayMinutes-75)*.10);
    cout << "How many night time minutes did you use?";
    cin >> nightMinutes;
    if (nightMinutes <= 100)
    nightFee = 0;
    else if (nightMinutes > 100)
    nightFee=((nightMinutes-100)*.05);
    else
        cout <<"You have input an invalid service code. Please type r for regular or p for premium service." << endl;

cout <<"Cellular Account #:" << acctNumber << endl;
cout <<"Type of Service: Premium" << endl;
cout <<"Total Minutes:" <<dayMinutes+nightMinutes << endl;
cout <<"Amount Due: $"<<25<<"+"<<dayFee<<"+"<<nightFee<<"= $"<<25+dayFee+nightFee << endl;
break;

case 'P':
cout << "How many daytime minutes did you use?";
    cin >> dayMinutes;
    if (dayMinutes <= 75)
    dayFee = 0;
    else if (dayMinutes > 75)
    dayFee=((dayMinutes-75)*.10);
    cout << "How many night time minutes did you use?";
    cin >> nightMinutes;
    if (nightMinutes <= 100)
    nightFee = 0;
    else if (nightMinutes > 100)
    nightFee=((nightMinutes-100)*.05);
    else
        cout <<"You have input an invalid service code. Please type r for regular or p for premium service." << endl;

cout <<"Cellular Account #:" << acctNumber << endl;
cout <<"Type of Service: Premium" << endl;
cout <<"Total Minutes:" <<dayMinutes+nightMinutes << endl;
cout <<"Amount Due: $"<<25<<"+"<<dayFee<<"+"<<nightFee<<"= $"<<25+dayFee+nightFee << endl;
break;

default:

cout << "Invalid Service Code. Enter r for regular service, p for Premium.";

}






return 0;

}
double calcRegBill(int a)

{


}
double calcPremBill(int b, int c)

{

}

void printBill(string acctNumber, char serviceCode, int d, double e )
{


return;
}
4

3 に答える 3

1

関数は、データ (関数に渡すパラメーター) を要求し、このデータを操作することによって機能します。多くの場合、データを返します。

たとえば、case 'r':ブロックでは、コードの代わりに次のものが必要です。

cout << "How many minutes did you use?: ";
cin >> minutes;

amtDue = calcRegBill(minutes);

cout <<"Cellular Account #:" << acctNumber << endl;
cout <<"Type of Service: Regular" << endl;
cout <<"Total Minutes:" << minutes << endl;
cout <<"Amount Due: $"<< amtDue << endl;}
break;

次に、以前 main にあった amtDue を計算するコードを、次のcalcRegBill()ように関数に移動できます。

double calcRegBill(int minutes)
{
    double bill;

    if (a < 50)
        bill = 10;

    else
        bill = 10+((minutes-50)*.20);

    return bill;
}

ここで重要なのは、メイン関数で amtDue を計算する代わりに、関数で計算してメイン関数にcalcRegBill返すことです。また、パラメータの名前を から に変更したことに注意してaくださいminutes。これにより、関数での目的が明確になります。

于 2013-04-14T23:25:36.003 に答える
0

あなたがしていることの流れを打破する必要があります。

  1. まず、情報を収集します。注: プレミアムまたは通常の請求書であるかどうかに関係なく、探している情報は同じです。そんなに早く分岐する必要はありません。
  2. 請求額を計算するには、プレミアムまたはレギュラーに基づいて分岐します。いずれにせよ、これから a を取得するので、戻り値を格納doubleする変数を持つことができます。ブランチの前にこの変数を宣言し、2 つのブランチ (通常またはプレミアム) 内で割り当てます。doublecalcRegBillcalcPremBilldouble
  3. 次に、 を呼び出すときにprintBill、この値と請求書の種類を渡すことができます。
于 2013-04-14T23:22:16.183 に答える
0

あなたのプログラムの一般的な構造はほとんど正しいので、あなたが何を求めているのかよくわかりません。

トラブルシューティングのために、関数の 1 つを作成し、他のすべてのものなしでテストします。たとえば、calcRegBill... と書きます。

次に、非常に単純なメインを記述します。

int main() {
  cout << calcRegBill(3) << endl;
  cout << calcRegBill(11) << endl;
}

期待値は得られましたか?その場合は、次の機能に進みます。開発とは、多くの場合、問題をより小さな管理可能な問題に分割することです。

于 2013-04-14T23:11:47.140 に答える