#c #visual-c
#c #visual-c
Вопрос:
я знаю, что мое утверждение if где-то неверно, но я не знаю, где именно? или, может быть, это просто логическая ошибка?
По истечении 8 часов все отработанные часы будут оплачены в полтора раза. То есть, учитывая заработную плату за час, умноженную на 1,5. Эта заработная плата выплачивается за часы после 8 часов.
По истечении 10 часов все отработанные часы будут оплачиваться в двойном размере. То есть, учитывая почасовую заработную плату, умноженную на 2,0. Эта заработная плата выплачивается за часы после 10 часов. Пожалуйста, покажите: (Пример вывода)
Заработная плата за час: 12,37 Отработанных часов: 10,3
Оплата за (от 0 до 8 часов): 98,96
Оплата за часы с 8 по 10) : 37,11
Оплата за часы (10 и более): 7,42
Общая заработная плата брутто : 143,49
// Example program
#include <iostream>
#include <string>
using namespace std;
double HoursWorked;
double WagePerHour;
double TotalWages;
double TimeAndHalf;
double Overtime;
char ContinueChar;
//test cases: 10.5 hours @ 12/hour = $96.00, 2 hours at 1.5 rate = $36.00, .5 hour at 2.0 rate = $12.00
// 6.3 hours @ 12/hour = 75.6, no hours of overtime or double time
//12.5 hours @ 14.34/ hour = $114.72, 2 hours at 1.5 rate = 43.02, 2.5 hours at 2.0 rate = $71.70
//3.7 hours @ 19/hour = $70.30
// 14 hours @ 23.50/hour = $188, 2 hours at 1.5 rate = $70.50, 4 hours at 2.0 rate = $188
//I tested with test test cases and the program had the same results.
int main()
{
cout << "Ticket #64220n";
cout << "CMPR-120n";
cout << "Instructor : Joel Kirschern";
cout << "Student: Seyed Shariatn";
cout << "Payroll Overtime";
cout << "nn";
do {
cout << "How many hours did you work this pay period: n";
cin >> HoursWorked;
cout << "What wage do you get paid per hour?: n";
cin >> WagePerHour;
cout << "So you your paycheck will be: " << HoursWorked * WagePerHour << " before taxes are taken out. n";
if (HoursWorked > 8 amp;amp; <= 10)
cout << "For the hours you worked over 8, and less than or equal to 10 you made: " << HoursWorked * 1.5 * WagePerHour << " n";
else (HoursWorked >10);
cout << "For the hours you worked over 10: " << HoursWorked * 2.0 * WagePerHour << " n";
cout << "Do you want this to run again? (y=Yes): ";
cin >> ContinueChar;
} while (ContinueChar == 'y' || ContinueChar == 'Y');
cin.get();
return 0;
}
Комментарии:
1. я знаю, что мое утверждение if где-то неверно, но я не знаю где? или, может быть, это просто логическая ошибка? Для этого и нужен отладчик. Поскольку этот файл помечен как Visual c , у вас есть доступ к хорошему отладчику, который позволит вам выполнить один шаг по коду, просматривая переменные на каждом шаге, чтобы увидеть, где выполнение вашего кода отличается от ваших ожиданий.
2. Выводимый пример дает вам отличную подсказку о том, как подойти к решению. Сначала учитываются первые восемь часов, затем следующие два, затем любая сумма, превышающая 10, и суммируются три, чтобы получить общее количество. Похоже, что ваш подход заключается в попытке выбрать один из трех разных курсов в зависимости от общего количества отработанных часов. Я полагаю, что проще думать об этом не как о «одном из A, B или C, применимом к этому случаю», а как о «A может применяться, и если это так, B также может применяться, и если это так, C также может применяться»
3. Подсказка:
int hoursBetween = HoursWorked - 8;
4. Для каждой части вам нужно определить, сколько часов нужно оплатить. Первой частью будет число от 0 до 8. Вам нужно убедиться, что оно не превышает 8. Для второй части (полтора часа) вам нужно число от 0 до 2. Добавьте оплату за эти два часа к сумме за первые 8. Для заключительной части…. каков максимальный показатель? Возможно, это выходит за рамки вопроса. В любом случае, сколько бы часов они ни проработали сверх 10, платите им двойную ставку за эти часы.
5. Проблема в том, что вы вычисляете слишком много часов для TimeAndHalf и DoubleTime. Вы не используете HoursWorked, потому что это общее количество часов. Это скорее математическая проблема, чем программная.
Ответ №1:
Для этого существует много подходов. Вот один из них. Комментарии могут помочь вам понять мои рассуждения. К счастью, математика, стоящая за этим, не очень сложна.
/*
We need to find the area under this pay rate / hours worked graph.
The following approach divides the graph into three rectangles as shown below
2.0 | --
| | |
1.5 | - --|
| | |
1.0 ------- ----|
| |
0.5 | |
| |
0.0 ------------
0 8 10
*/
// Calculate basic pay before any overtime consideration
Pay = HoursWorked * HourlyRate;
// Hours above 8 earn half-again more than the standard wage.
// (This will be only positive if more than 8 hours were worked.)
OvertimePay = (HoursWorked - 8.0) * HourlyRate * 0.5;
if(OvertimePay > 0.0)
Pay = OvertimePay;
// Hours above 10 earn an additional 50% extra
// (This will be only positive if more than 10 hours were worked.)
OvertimePay = (HoursWorked - 10.0) * HourlyRate * 0.5;
if(OvertimePay > 0.0)
Pay = OvertimePay;