2017-01-23 3 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

Мы будем очень признательны, если вы сможете использовать отладчик в своем коде. Выполняйте каждую инструкцию по одному и наблюдайте значения переменных. Пожалуйста, отредактируйте свое сообщение, указывающее, какая из этих заявлений вызывает проблему и почему. –

+0

@ThomasMatthews верен, отладчик укажет на определенную строку кода, вызывающую проблему. Запустите отладчик и опубликуйте строку, которая вызывает проблемы. –

+0

Оператор 'switch' может быть более читаемым, чем несколько операторов' if'. –

ответ

2

Две проблемы, хотя второй не может быть уместным, потому что я не вижу использование total_amount помимо расчетов:

daily_profit никогда не инициализирован перед использованием.

Ваше значение total_amount будет неправильно сделать на следующее:

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

В приведенном выше коде, вы добавляете стоимости full_ticket к тому, что я предполагаю, что ваша текуща сумма денег производится из продажа полных билетов. Затем вы добавляете это значение в total_amount. Проблема в том, что вы действительно хотите добавить только 30 к total_amount, так как вы считаете ценность КАЖДОГО билета, продаваемого каждый раз, когда вы добавляете, а не стоимость одного билета.

Первый билет: full_ticket = 30, total_amount = 30 Второй билет: full_ticket = 60, total_amount = 90 Третий билет: full_ticket = 90, total_amount = 180

Эта схема повторяется для других цен на билеты.

+0

Ваш ответ был действительно полезен, спасибо вам большое! Я внес необходимые изменения. Надеюсь, это будет принято. – WoO