#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 можем ли мы посмотреть, что у вас есть, возможно, произошла ошибка копирования / вставки или что-то в этом роде.