0

C++ で通話課金プログラムを作成しようとしています。この小さなプログラムの機能の 1 つは、入力されたタイム ストレッチに応じて、割引時間内に話された割引分と営業時間内の通常料金の分を更新する機能です。

ユーザーは最初に、この 22:00 のような文字列として時刻を入力します

次に、文字列を取得して整数に変換する関数があります。たとえば、上記の 22:00 は 2200 に変わります

次に、int、上記の int を取り、それを 10 進数に変換する別のヘルプ関数があります。

double turnTimeToDecimal(int timeRaw){

    double decimalTime;

    decimalTime = timeRaw * 0.01;

        return decimalTime;
 }

この機能に対処するために、営業時間は割引がなく、午前 8 時から午前 18 時 30 分までです。0 から 1417 分 (24 時間) までの for ループ内の 2 つのカウンターを更新します。

double myStartDecimal = 0.0;
double myStopDecimal = 0.0;

myStartDecimal = turnTimeToDecimal(myStartRaw);
myStopDecimal = turnTimeToDecimal(myStopRaw);


//hours and minutes start
int  hourStart = (int)floor(myStartDecimal);
int minuteStart = (int)round(100*(myStartDecimal - hourStart));

//hours and minutes stop
int hourStop = (int)floor(myStopDecimal);
int minuteStop = (int) round(100*(myStopDecimal - hourStop));

int totalMinutesPremium = 0;
int totalMinutesDiscount = 0;
int i = 0;

int k = 0;
for(k = (hourStart* 60) + minuteStart; k < (hourStop * 60) + minuteStop + round(((double)minuteStop/100)); k++){


    //will update the corresponding counter depending 
    //on the time stretch, business hours 8.00 - 18.30.
    if(hourStart >= 8 && hourStop < 18.5){
        totalMinutesPremium++;
    }else{
        totalMinutesDiscount++;
    }
}

//will give total minutes
cout << " k is: " << k << endl;

//will give the total number of minutes during the business hours and 
//the total number of minutes during the discount hours(non-bussiness hours)
cout << "Total minutes premium " << round(totalMinutesPremium) << 
        " Total Minutes discount " << round(totalMinutesDiscount) << endl;

ただし、プログラムは、入力されたタイム ストレッチが営業時間内であるかどうかを検出します。ただし、1 つのケースを除きます。たとえば、時間が 7:30 ~ 8:30 (営業時間は 7:59 ~ 18:30) の場合、30 分と予想される営業時間内の分の組み合わせは返されません。割引期間は 07:59 に終了し、18:31 に再開されるため、割引時間も 30 分になると予想されます。

うまくいけば、私は自分自身を明確にしました。

4

3 に答える 3

1

ループ内では、指定された分が営業時間内かどうかではなく、とにfor応じて指定された分を割り当てます。通話が割引時間に割り込む場合は、通話全体が割引されます。hourStarthourStop

于 2013-04-08T13:28:17.683 に答える
0

ループを使用する理由 なぜ計算しないのですか?

完全なコード回答ではありませんが...空白を埋めることができます...

if( startTime >= startOfPremiumPeriod && endTime <= endOfPremiumPeriod )
   totalMinutesPremimum = endTime - startTime;
else if( startTime < startOfPremiumPeriod && endTime < startOfPremimumPeriod )
   totalMinutesDiscount = endTime - startTime;
.... etc. etc. etc.

終了時刻に 24 時間を追加することで、開始時刻が午前 0 時より前で、終了時刻が午前 0 時より後の場合を考慮することができます...

if( endTime < startTime ) endTime += 1440;
于 2013-04-08T13:28:16.630 に答える
0

「ただし、HourStop は int です。同じことが hourStart にも当てはまります」

int次に、ここで行うように sで 10 進数値を使用できない場合、機能しません。

hourStop < 18.5

できますが、思い通りにはいきません。持っている場合はint hourStop = 18.5、小数にすることはできないため、18 に切り捨てられます。次のような別のタイプを使用する必要がありますdouble

また、ループ内の条件は、ループ内で決して変化しないものに依存しhourStartます。hourStop

if(hourStart >= 8 && hourStop < 18.5){

だからあなたはいつも同じif条件にぶつかるでしょう(それが何であれ)

于 2013-04-08T13:36:55.937 に答える