Как мне добавить цикл в эту программу?

#c #loops

#c #циклы #c

Вопрос:

Заданный вопрос о домашнем задании:

В течение налогового сезона, каждую пятницу, бухгалтерская фирма J amp; J предоставляет частную помощь людям, которые сами готовят свои налоговые декларации. Их обязанности заключаются в следующем.

a. Если у человека низкий доход (<= 25 000) и время консультации меньше или равно 30 минутам, плата не взимается; в противном случае плата за обслуживание составляет 40% от обычной почасовой ставки за время свыше 30 минут.

b. Для других, если время консультации меньше или равно 20 минутам, плата за обслуживание не взимается; в противном случае плата за обслуживание составляет 70% от обычной почасовой ставки за время свыше 20 минут.

(Например, предположим, что человек с низким доходом потратил 1 час 15 минут, а почасовая ставка составляет 70,00 долларов. Тогда сумма выставления счета составит 70.00 x 0.40 x (45 / 60) = $21.00.)

Напишите программу, которая предложит пользователю ввести почасовую ставку, общее время консультирования и то, имеет ли данный человек низкий доход. Программа должна вывести сумму выставления счета. Программа должна содержать функцию, которая принимает в качестве входных данных почасовую ставку, общее время консультирования и значение, указывающее, имеет ли человек низкий доход. Функция должна вернуть сумму выставления счета. Программа может предложить пользователю ввести время консультации в минутах.

И это код, который я написал:

 #include <iostream>

using namespace std;

double calculate(char iRate, double cTime, double hRate);

int main()
{
double hRate = 0.0, cTime = 0.0; 
char iRate, l('l'), h('h');

cout << "Please enter the hourly rate: ";
cin >> hRate;
cout << "Please enter total consulting time in minutes: ";
cin >> cTime;
cout << "Is the income rate low or high (l - Low | h - High): ";
cin >> iRate;

cout << calculate(iRate, cTime, hRate) << endl;

system("pause");
return 0;
}

double calculate(char iRate, double cTime, double hRate)
{
    double bAmount = 0.0;
    if (iRate == 'l' amp;amp; cTime > 30)
        bAmount = (hRate * 40) * ((cTime)- 30)/6000;
    else if (iRate == 'h' amp;amp; cTime > 20)
        bAmount = (hRate * 70) * ((cTime)- 30)/6000;

    return bAmount;
}
  

Я не уверен, как я могу добавить к этому цикл, чтобы он выполнялся 3 раза?

Комментарии:

1. Вам следует посмотреть, что такое for или while цикл

Ответ №1:

Что я бы сделал для ясности кода, так это выделил вашу логику из вашей основной в другую функцию

 void gatherInputAndCalculate()
{
    double hRate = 0.0, cTime = 0.0; 
    char iRate, l('l'), h('h');

    cout << "Please enter the hourly rate: ";
    cin >> hRate;
    cout << "Please enter total consulting time in minutes: ";
    cin >> cTime;
    cout << "Is the income rate low or high (l - Low | h - High): ";
    cin >> iRate;

    cout << calculate(iRate, cTime, hRate) << endl;

    system("pause");
}
  

а затем в вашем main выполните цикл вокруг него

 int main()
{
    for(int i = 0; i < 3; i  )
    {
        gatherInputAndCalculate();
    }
    return 0;
}
  

Это не значит, что вы не могли бы просто обернуть весь логический блок в цикл for, но рекомендуется оборачивать консолидированные логические блоки в функции для наглядности / отладки. Это не пригодится для таких простых заданий, как это, но в реальном мире, где ваша кодовая база состоит из сотен тысяч строк, это действительно помогает, так что использование хороших практик сейчас облегчит переход!

Отказ от ответственности: я не проверял ваш код на правильность каким-либо образом, в какой-либо форме. Я просто взял логику, которая была у вас в вашей основной функции, и поместил ее в ее собственную функцию. Все ошибки, ранее существовавшие в ней, будут в функции, которую я предоставил. Что-то подобное выходит за рамки этого вопроса. (Не то чтобы я не указал бы на него, если бы увидел, но есть еще одна проблема, с которой мы, программисты реального мира, сталкиваемся: иногда нам не разрешают исправлять ошибки, потому что нам выделили достаточно средств, чтобы исправить лишь горстку из них, и нам сказали, какие из них исправить. Это может расстраивать, когда вы относитесь к тому типу людей, которые любят все делать правильно, постоянно, каждый раз.)

Комментарии:

1. я понимаю, что ваш код пытается быть как можно более кратким и «по существу», но чтобы у OP не было вредных привычек; любые функции, в которых есть слово «и», вероятно, следует разделить на отдельные функции

2. По какой-то причине я получаю 0 для каждого вывода цикла.

3. @DShook ну, я признаю, что это может быть немного больше, чем необходимо. Я добавил туда, что ничто не мешает OP поместить свою существующую логику в цикл и назвать ее хорошей. Просто пытаюсь передать (мое мнение) лучшие практики. 🙂

4. @Tom Я бы обсудил это. Я согласен с разделением классов, в поведении которых есть «и», но я не обязательно согласен с функциями. Многие программы с графическим интерфейсом имеют createAndShowGUI() вызовы. Я рассматривал идею создания отдельных функций, но если бы мы не должны были создавать struct calculateable { double rate; double time; char highLow; } , это было бы неосуществимо.

5. @ilovenyc можем ли мы посмотреть, что у вас есть, возможно, произошла ошибка копирования / вставки или что-то в этом роде.