#include <stdio.h>
/* constants */
#define NUM_EMPL 5
#define OVERTIME_RATE 1.5f
#define STD_WORK_WEEK 40.0f
/* function prototypes */
float getHours(long int clockNumber);
float calcOvertime(float hoursWorked);
float calcGrossPay(float hoursWorked, float wageRate, float overtimeHours);
void printHeader(void);
void printEmp(long int clockNumber, float wageRate, float hours, float overtimeHrs, float grossPay);
int main() {
/* Variable Declarations */
long int clockNumber[NUM_EMPL] = {98401, 526488, 765349, 34645, 127615}; /* ID */
float grossPay[NUM_EMPL]; /* gross pay */
float hours[NUM_EMPL]; /* hours worked in a given week */
int i; /* loop and array index */
float overtimeHrs[NUM_EMPL]; /* overtime hours */
float wageRate[NUM_EMPL] = {10.60, 9.75, 10.50, 12.25, 8.35}; /* hourly wage rate */
/* process each employee */
for (i = 0; i < NUM_EMPL; ++i) {
/* Read in the hours for an employee */
hours[i] = getHours(clockNumber[i]);
/* calculate overtime */
overtimeHrs[i] = calcOvertime(hours[i]);
/* calculate gross pay */
grossPay[i] = calcGrossPay(hours[i], wageRate[i], overtimeHrs[i]);
}
/* print the header info */
printHeader();
/* print out each employee */
for (i = 0; i < NUM_EMPL; ++i) {
/* Print all the employees - call by reference */
printEmp(clockNumber[i], wageRate[i], hours[i], overtimeHrs[i], grossPay[i]);
} /* for */
return (0);
}
float getHours(long int clockNumber) {
float hoursWorked; /* hours worked in a given week */
/* Read in hours for employee */
printf("\nEnter hours worked by emp # %06li: ", clockNumber
); scanf("%f", &hoursWorked
);
/* return hours back to the calling function */
return (hoursWorked);
}
/* function to calculate overtime hours */
float calcOvertime(float hoursWorked) {
float overtimeHrs; /* overtime hours worked */
if (hoursWorked > STD_WORK_WEEK) {
overtimeHrs = hoursWorked - STD_WORK_WEEK; /* calculate overtime */
} else {
overtimeHrs = 0.0; /* no overtime */
}
return overtimeHrs;
}
/* function to print header information */
void printHeader(void) {
printf("\nPay Slip Report\n"); printf("====================================\n"); printf("ID Wage Rate Hours Overtime Gross Pay\n"); printf("------------------------------------\n"); }
/* function to print employee information */
void printEmp(long int clockNumber, float wageRate, float hours,float overtimeHrs, float grossPay) {
printf("%06li $%6.2f %6.1f %6.1f $%8.2f\n",clockNumber
, wageRate
, hours
, overtimeHrs
, grossPay
); }
/* function to calculate gross pay */
float calcGrossPay(float hoursWorked, float wageRate, float overtimeHrs) {
float grossPay; // gross pay for the week
if (overtimeHrs > 0.0) { // if overtime was worked
grossPay = (STD_WORK_WEEK * wageRate) + (overtimeHrs * OVERTIME_RATE * wageRate);
}
else { // no overtime worked
grossPay = hoursWorked * wageRate;
}
return grossPay;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Ci8qIGNvbnN0YW50cyAqLwojZGVmaW5lIE5VTV9FTVBMIDUKI2RlZmluZSBPVkVSVElNRV9SQVRFIDEuNWYKI2RlZmluZSBTVERfV09SS19XRUVLIDQwLjBmCgovKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCmZsb2F0IGdldEhvdXJzKGxvbmcgaW50IGNsb2NrTnVtYmVyKTsKZmxvYXQgY2FsY092ZXJ0aW1lKGZsb2F0IGhvdXJzV29ya2VkKTsKZmxvYXQgY2FsY0dyb3NzUGF5KGZsb2F0IGhvdXJzV29ya2VkLCBmbG9hdCB3YWdlUmF0ZSwgZmxvYXQgb3ZlcnRpbWVIb3Vycyk7Cgp2b2lkIHByaW50SGVhZGVyKHZvaWQpOwp2b2lkIHByaW50RW1wKGxvbmcgaW50IGNsb2NrTnVtYmVyLCBmbG9hdCB3YWdlUmF0ZSwgZmxvYXQgaG91cnMsIGZsb2F0IG92ZXJ0aW1lSHJzLCBmbG9hdCBncm9zc1BheSk7CgppbnQgbWFpbigpIHsKCiAgLyogVmFyaWFibGUgRGVjbGFyYXRpb25zICovCiAgbG9uZyBpbnQgY2xvY2tOdW1iZXJbTlVNX0VNUExdID0gezk4NDAxLCA1MjY0ODgsIDc2NTM0OSwgMzQ2NDUsIDEyNzYxNX07IC8qIElEICovCiAgZmxvYXQgZ3Jvc3NQYXlbTlVNX0VNUExdOyAvKiBncm9zcyBwYXkgKi8KICBmbG9hdCBob3Vyc1tOVU1fRU1QTF07IC8qIGhvdXJzIHdvcmtlZCBpbiBhIGdpdmVuIHdlZWsgKi8KICBpbnQgaTsgLyogbG9vcCBhbmQgYXJyYXkgaW5kZXggKi8KICBmbG9hdCBvdmVydGltZUhyc1tOVU1fRU1QTF07IC8qIG92ZXJ0aW1lIGhvdXJzICovCiAgZmxvYXQgd2FnZVJhdGVbTlVNX0VNUExdID0gezEwLjYwLCA5Ljc1LCAxMC41MCwgMTIuMjUsIDguMzV9OyAvKiBob3VybHkgd2FnZSByYXRlICovCgogIC8qIHByb2Nlc3MgZWFjaCBlbXBsb3llZSAqLwogIGZvciAoaSA9IDA7IGkgPCBOVU1fRU1QTDsgKytpKSB7CgogICAgLyogUmVhZCBpbiB0aGUgaG91cnMgZm9yIGFuIGVtcGxveWVlICovCiAgICBob3Vyc1tpXSA9IGdldEhvdXJzKGNsb2NrTnVtYmVyW2ldKTsKCiAgICAvKiBjYWxjdWxhdGUgb3ZlcnRpbWUgKi8KICAgIG92ZXJ0aW1lSHJzW2ldID0gY2FsY092ZXJ0aW1lKGhvdXJzW2ldKTsKCiAgICAvKiBjYWxjdWxhdGUgZ3Jvc3MgcGF5ICovCiAgICBncm9zc1BheVtpXSA9IGNhbGNHcm9zc1BheShob3Vyc1tpXSwgd2FnZVJhdGVbaV0sIG92ZXJ0aW1lSHJzW2ldKTsKICB9CgogIC8qIHByaW50IHRoZSBoZWFkZXIgaW5mbyAqLwogIHByaW50SGVhZGVyKCk7CgogIC8qIHByaW50IG91dCBlYWNoIGVtcGxveWVlICovCiAgZm9yIChpID0gMDsgaSA8IE5VTV9FTVBMOyArK2kpIHsKCiAgICAvKiBQcmludCBhbGwgdGhlIGVtcGxveWVlcyAtIGNhbGwgYnkgcmVmZXJlbmNlICovCiAgICBwcmludEVtcChjbG9ja051bWJlcltpXSwgd2FnZVJhdGVbaV0sIGhvdXJzW2ldLCBvdmVydGltZUhyc1tpXSwgZ3Jvc3NQYXlbaV0pOwogIH0gLyogZm9yICovCgogIHJldHVybiAoMCk7Cn0KCmZsb2F0IGdldEhvdXJzKGxvbmcgaW50IGNsb2NrTnVtYmVyKSB7CgogIGZsb2F0IGhvdXJzV29ya2VkOyAvKiBob3VycyB3b3JrZWQgaW4gYSBnaXZlbiB3ZWVrICovCgogIC8qIFJlYWQgaW4gaG91cnMgZm9yIGVtcGxveWVlICovCiAgcHJpbnRmKCJcbkVudGVyIGhvdXJzIHdvcmtlZCBieSBlbXAgIyAlMDZsaTogIiwgY2xvY2tOdW1iZXIpOwogIHNjYW5mKCIlZiIsICZob3Vyc1dvcmtlZCk7CgogIC8qIHJldHVybiBob3VycyBiYWNrIHRvIHRoZSBjYWxsaW5nIGZ1bmN0aW9uICovCiAgcmV0dXJuIChob3Vyc1dvcmtlZCk7Cn0KCi8qIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBvdmVydGltZSBob3VycyAqLwpmbG9hdCBjYWxjT3ZlcnRpbWUoZmxvYXQgaG91cnNXb3JrZWQpIHsKICAgIGZsb2F0IG92ZXJ0aW1lSHJzOyAgLyogb3ZlcnRpbWUgaG91cnMgd29ya2VkICovCiAgICBpZiAoaG91cnNXb3JrZWQgPiBTVERfV09SS19XRUVLKSB7CiAgICAgICAgb3ZlcnRpbWVIcnMgPSBob3Vyc1dvcmtlZCAtIFNURF9XT1JLX1dFRUs7ICAvKiBjYWxjdWxhdGUgb3ZlcnRpbWUgKi8KICAgIH0gZWxzZSB7CiAgICAgICAgb3ZlcnRpbWVIcnMgPSAwLjA7ICAvKiBubyBvdmVydGltZSAqLwogICAgfQogICAgcmV0dXJuIG92ZXJ0aW1lSHJzOwp9CgovKiBmdW5jdGlvbiB0byBwcmludCBoZWFkZXIgaW5mb3JtYXRpb24gKi8Kdm9pZCBwcmludEhlYWRlcih2b2lkKSB7CiAgICBwcmludGYoIlxuUGF5IFNsaXAgUmVwb3J0XG4iKTsKICAgIHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKICAgIHByaW50ZigiSUQgIFdhZ2UgUmF0ZSBIb3VycyBPdmVydGltZSBHcm9zcyBQYXlcbiIpOwogICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwp9CgovKiBmdW5jdGlvbiB0byBwcmludCBlbXBsb3llZSBpbmZvcm1hdGlvbiAqLwp2b2lkIHByaW50RW1wKGxvbmcgaW50IGNsb2NrTnVtYmVyLCBmbG9hdCB3YWdlUmF0ZSwgZmxvYXQgaG91cnMsZmxvYXQgb3ZlcnRpbWVIcnMsIGZsb2F0IGdyb3NzUGF5KSB7CiAgICBwcmludGYoIiUwNmxpICQlNi4yZiAlNi4xZiAlNi4xZiAkJTguMmZcbiIsY2xvY2tOdW1iZXIsIHdhZ2VSYXRlLCBob3Vycywgb3ZlcnRpbWVIcnMsIGdyb3NzUGF5KTsKfQoKLyogZnVuY3Rpb24gdG8gY2FsY3VsYXRlIGdyb3NzIHBheSAqLwpmbG9hdCBjYWxjR3Jvc3NQYXkoZmxvYXQgaG91cnNXb3JrZWQsIGZsb2F0IHdhZ2VSYXRlLCBmbG9hdCBvdmVydGltZUhycykgewogICAgZmxvYXQgZ3Jvc3NQYXk7IC8vIGdyb3NzIHBheSBmb3IgdGhlIHdlZWsgCiAgICBpZiAob3ZlcnRpbWVIcnMgPiAwLjApIHsgLy8gaWYgb3ZlcnRpbWUgd2FzIHdvcmtlZCAKICAgICAgICBncm9zc1BheSA9IChTVERfV09SS19XRUVLICogd2FnZVJhdGUpICsgKG92ZXJ0aW1lSHJzICogT1ZFUlRJTUVfUkFURSAqIHdhZ2VSYXRlKTsKICAgIH0gCiAgICBlbHNlIHsgLy8gbm8gb3ZlcnRpbWUgd29ya2VkIAogICAgICAgIGdyb3NzUGF5ID0gaG91cnNXb3JrZWQgKiB3YWdlUmF0ZTsKICAgIH0KICAgIHJldHVybiBncm9zc1BheTsKfQo=