2017-01-23 13 views
-1

私はC++で解決しようとしているプログラミングの練習があります(私はそれが初めてです)。演習では、バス(公共交通機関)の毎日の利益を計算し、最高の利益を出したバスの名前と、毎日の利益とすべてのバスによる総利益の合計を印刷する必要があります。ただし、乗客に応じて異なるタイプ(1,2,3,4,5または6)があります.1が満員の場合は3、2の場合は教師= 25.5、3の場合は学生= 22.10および4,5 6人は無料です。 はここに私のコードです:それは受け入れられていないので、C++バスの毎日の利益を計算する(マイナーミス?)

#include <iostream> 
#include <string.h> 
#include <iomanip> 

using namespace std; 

int main() 
{ 
    int n, j; 
    double full_ticket=0, teacher_ticket=0, std_ticket=0, foreign_ticket=0, polis_card=0, elderly_card=0; //declare tickets 
    char ticket, c; 
    string bus, hBus; //declare strings for bus names 
    double fuel_amount, fuel_price, daily_profit,busProfit, hAmount, total_amount; 

    cin>>n>>fuel_price; 
    for (j=1;j<=n;j++) 
    { 
     cin>>bus>>fuel_amount; //read string and amount of fuel consumed 
     do 
     { 
      cin>>ticket>>c; //read ticket type and c is comma, after each ticket there **needs** to be a comma 
      if(ticket=='1') 
      { 
       full_ticket=full_ticket+30;     
       total_amount=total_amount+full_ticket; 
      } 
      if(ticket=='2') 
      { 
       teacher_ticket=teacher_ticket+25.5;    
       total_amount=total_amount+teacher_ticket; 
      } 
      if(ticket=='3') 
      { 
       std_ticket=std_ticket+22.10;      
       total_amount=total_amount+std_ticket; 
      } 
      if(ticket=='4') 
      { 
       foreign_ticket=foreign_ticket+0;      
       total_amount=total_amount+foreign_ticket; 
      } 
      if(ticket=='5') 
      { 
       polis_card=polis_card+0;       
       total_amount=total_amount+polis_card; 
      } 
      if(ticket=='6') 
      { 
       elderly_card=elderly_card+0;      
       total_amount=total_amount+elderly_card; 
      } 
     }while(c!=';'); //termination of do-while loop when it reads a semicolon 


        //calculate sum per each bus 
     busProfit=(full_ticket+teacher_ticket+std_ticket+foreign_ticket+polis_card+elderly_card)-(fuel_amount*fuel_price); 

     daily_profit=daily_profit+busProfit; //calculate daily profit of buses 

     if(busProfit>hAmount) //set condition for highest bus 
     { 
      hAmount=busProfit;    
      hBus=bus; 
     } 


     full_ticket=0; teacher_ticket=0; std_ticket=0; foreign_ticket=0;polis_card=0;elderly_card=0; 
     //set variables to 0 before loop starts again 

    } 

      cout<<fixed<<setprecision(2);  
      cout<<hBus<<" "<<hAmount<<endl;   //print highest bus and highest amount 
      cout<<daily_profit;      //print daily profit 

    return 0; 

} 

このコードは、全ての基本のテストに合格すると思われる、しかしそれと間違って何かがあります。私が間違いを見つけるのを助けることができれば、とても感謝しています。

+0

コードでデバッガを使用することができたら大いに感謝します。各ステートメントを一度に1つずつ実行し、変数値を監視します。問題の原因となっている理由と理由を示す投稿を編集してください。 –

+0

@ThomasMatthewsは正しいです、デバッガは問題の原因となっているコードの特定の行を指摘します。デバッガを実行し、問題の原因となっている行をポストします。 –

+0

'switch'ステートメントは、複数の' if'ステートメントより読みやすくなります。 –

答えて

2

2つの問題、私は計算を超えてtotal_amountのない使用を参照していないため、2番目のは適切ではないかもしれませんが。

daily_profitを使用する前に初期化されることはありません。

total_amountのためのあなたの値は以下に行う不正確になるだろう:上記のコードで

if(ticket=='1') 
    { 
     full_ticket=full_ticket+30;     
     total_amount=total_amount+full_ticket; 
    } 

、あなたは私がから作られたお金の実行中の合計であると仮定したものにfull_ticketのコストを追加します完全なチケットを販売する。その値をtotal_amountに追加します。問題は、1つのチケットの価値ではなく、追加するたびに販売されるすべてのチケットの価値を計算するので、実際にはtotal_amountに30を追加するだけです。

まずチケット:full_ticket = 30, total_amount = 30 セカンドチケット:full_ticket = 60, total_amount = 90 サードチケット:full_ticket = 90, total_amount = 180

このパターンは、他のチケットの価格のために繰り返されます。

+0

あなたの答えは本当に有益でした、ありがとう!私は必要な変更を加えました。それが受け入れられることを願っています。 – WoO

関連する問題