//********************************************************
//
// Assignment 5 - Functions
//
// Name: <Isaac Boahndao>
//
// Class: C Programming, <Spring Semester and 2025>
//
// Date: <03_02_25>
//
// Description: Program which determines overtime and
// gross pay for a set of employees with outputs sent
// to standard output (the screen).
//
// All functions are called by value
//
//********************************************************
#include <stdio.h>
// Constants
#define SIZE 5
#define OVERTIME_RATE 1.5
#define STD_WORK_WEEK 40.0
// Function prototypes
float getHours( long int clockNumber) ;
void printHeader( void ) ;
void printEmp( long int clockNumber, float wageRate, float hours, float overtimeHrs, float grossPay) ;
float calculateOvertime( float hours) ;
float calculateGrossPay( float wageRate, float hours, float overtimeHrs) ;
int main( ) {
// Employee data
long int clockNumber[ SIZE] = { 98401 , 52648 , 76534 , 34645 , 12761 } ;
float grossPay[ SIZE] ;
float hours[ SIZE] ;
float overtimeHrs[ SIZE] ;
float wageRate[ SIZE] = { 10.60 , 9.75 , 10.50 , 12.25 , 8.35 } ;
// Process each employee
for ( int i = 0 ; i < SIZE; i++ ) {
// Read hours for employee
hours[ i] = getHours( clockNumber[ i] ) ;
// Calculate overtime hours
overtimeHrs[ i] = calculateOvertime( hours[ i] ) ;
// Calculate gross pay
grossPay[ i] = calculateGrossPay( wageRate[ i] , hours[ i] , overtimeHrs[ i] ) ;
}
// Print the header info
printHeader( ) ;
// Print all employees
for ( int i = 0 ; i < SIZE; i++ ) {
printEmp( clockNumber[ i] , wageRate[ i] , hours[ i] , overtimeHrs[ i] , grossPay[ i] ) ;
}
return 0 ;
}
// Function: getHours
// Purpose: Obtains input from user, the number of hours worked per employee and stores the result.
float getHours( long int clockNumber) {
float hoursWorked;
printf ( "Enter hours worked for employee ID %ld: " , clockNumber
) ; scanf ( "%f" , & hoursWorked
) ; return hoursWorked;
}
// Function: printHeader
// Purpose: Prints the header for the employee summary output
void printHeader( void ) {
printf ( "\n Employee Summary:\n " ) ; printf ( "---------------------------------------------------------\n " ) ; printf ( "Employee ID | Wage Rate | Hours Worked | Overtime Hours | Gross Pay\n " ) ; printf ( "---------------------------------------------------------\n " ) ; }
// Function: printEmp
// Purpose: Prints the details for each employee
void printEmp( long int clockNumber, float wageRate, float hours, float overtimeHrs, float grossPay) {
printf ( "%10ld | %9.2f | %12.2f | %14.2f | %9.2f\n " , clockNumber
, wageRate
, hours
, overtimeHrs
, grossPay
) ; }
// Function: calculateOvertime
// Purpose: Calculates the overtime hours worked
float calculateOvertime( float hours) {
if ( hours > STD_WORK_WEEK) {
return hours - STD_WORK_WEEK;
}
return 0.0 ;
}
// Function: calculateGrossPay
// Purpose: Calculates the gross pay based on wage rate, hours worked, and overtime
float calculateGrossPay( float wageRate, float hours, float overtimeHrs) {
float regularPay = wageRate * ( hours - overtimeHrs) ;
float overtimePay = overtimeHrs * wageRate * OVERTIME_RATE;
return regularPay + overtimePay;
}
Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLwovLyBBc3NpZ25tZW50IDUgLSBGdW5jdGlvbnMKLy8KLy8gTmFtZTogPElzYWFjIEJvYWhuZGFvPgovLwovLyBDbGFzczogQyBQcm9ncmFtbWluZywgPFNwcmluZyBTZW1lc3RlciBhbmQgMjAyNT4KLy8KLy8gRGF0ZTogPDAzXzAyXzI1PgovLwovLyBEZXNjcmlwdGlvbjogUHJvZ3JhbSB3aGljaCBkZXRlcm1pbmVzIG92ZXJ0aW1lIGFuZCAKLy8gZ3Jvc3MgcGF5IGZvciBhIHNldCBvZiBlbXBsb3llZXMgd2l0aCBvdXRwdXRzIHNlbnQgCi8vIHRvIHN0YW5kYXJkIG91dHB1dCAodGhlIHNjcmVlbikuCi8vCi8vIEFsbCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSB2YWx1ZQovLwovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgojaW5jbHVkZSA8c3RkaW8uaD4KCi8vIENvbnN0YW50cwojZGVmaW5lIFNJWkUgNQojZGVmaW5lIE9WRVJUSU1FX1JBVEUgMS41CiNkZWZpbmUgU1REX1dPUktfV0VFSyA0MC4wCgovLyBGdW5jdGlvbiBwcm90b3R5cGVzCmZsb2F0IGdldEhvdXJzKGxvbmcgaW50IGNsb2NrTnVtYmVyKTsKdm9pZCBwcmludEhlYWRlcih2b2lkKTsKdm9pZCBwcmludEVtcChsb25nIGludCBjbG9ja051bWJlciwgZmxvYXQgd2FnZVJhdGUsIGZsb2F0IGhvdXJzLCBmbG9hdCBvdmVydGltZUhycywgZmxvYXQgZ3Jvc3NQYXkpOwpmbG9hdCBjYWxjdWxhdGVPdmVydGltZShmbG9hdCBob3Vycyk7CmZsb2F0IGNhbGN1bGF0ZUdyb3NzUGF5KGZsb2F0IHdhZ2VSYXRlLCBmbG9hdCBob3VycywgZmxvYXQgb3ZlcnRpbWVIcnMpOwoKaW50IG1haW4oKSB7CiAgICAvLyBFbXBsb3llZSBkYXRhCiAgICBsb25nIGludCBjbG9ja051bWJlcltTSVpFXSA9IHs5ODQwMSwgNTI2NDgsIDc2NTM0LCAzNDY0NSwgMTI3NjF9OwogICAgZmxvYXQgZ3Jvc3NQYXlbU0laRV07CiAgICBmbG9hdCBob3Vyc1tTSVpFXTsKICAgIGZsb2F0IG92ZXJ0aW1lSHJzW1NJWkVdOwogICAgZmxvYXQgd2FnZVJhdGVbU0laRV0gPSB7MTAuNjAsIDkuNzUsIDEwLjUwLCAxMi4yNSwgOC4zNX07CiAgICAKICAgIC8vIFByb2Nlc3MgZWFjaCBlbXBsb3llZQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTSVpFOyBpKyspIHsKICAgICAgICAvLyBSZWFkIGhvdXJzIGZvciBlbXBsb3llZQogICAgICAgIGhvdXJzW2ldID0gZ2V0SG91cnMoY2xvY2tOdW1iZXJbaV0pOwogICAgICAgIAogICAgICAgIC8vIENhbGN1bGF0ZSBvdmVydGltZSBob3VycwogICAgICAgIG92ZXJ0aW1lSHJzW2ldID0gY2FsY3VsYXRlT3ZlcnRpbWUoaG91cnNbaV0pOwogICAgICAgIAogICAgICAgIC8vIENhbGN1bGF0ZSBncm9zcyBwYXkKICAgICAgICBncm9zc1BheVtpXSA9IGNhbGN1bGF0ZUdyb3NzUGF5KHdhZ2VSYXRlW2ldLCBob3Vyc1tpXSwgb3ZlcnRpbWVIcnNbaV0pOwogICAgfQoKICAgIC8vIFByaW50IHRoZSBoZWFkZXIgaW5mbwogICAgcHJpbnRIZWFkZXIoKTsKICAgIAogICAgLy8gUHJpbnQgYWxsIGVtcGxveWVlcwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTSVpFOyBpKyspIHsKICAgICAgICBwcmludEVtcChjbG9ja051bWJlcltpXSwgd2FnZVJhdGVbaV0sIGhvdXJzW2ldLCBvdmVydGltZUhyc1tpXSwgZ3Jvc3NQYXlbaV0pOwogICAgfQoKICAgIHJldHVybiAwOwp9CgovLyBGdW5jdGlvbjogZ2V0SG91cnMKLy8gUHVycG9zZTogT2J0YWlucyBpbnB1dCBmcm9tIHVzZXIsIHRoZSBudW1iZXIgb2YgaG91cnMgd29ya2VkIHBlciBlbXBsb3llZSBhbmQgc3RvcmVzIHRoZSByZXN1bHQuCmZsb2F0IGdldEhvdXJzKGxvbmcgaW50IGNsb2NrTnVtYmVyKSB7CiAgICBmbG9hdCBob3Vyc1dvcmtlZDsKICAgIHByaW50ZigiRW50ZXIgaG91cnMgd29ya2VkIGZvciBlbXBsb3llZSBJRCAlbGQ6ICIsIGNsb2NrTnVtYmVyKTsKICAgIHNjYW5mKCIlZiIsICZob3Vyc1dvcmtlZCk7CiAgICByZXR1cm4gaG91cnNXb3JrZWQ7Cn0KCi8vIEZ1bmN0aW9uOiBwcmludEhlYWRlcgovLyBQdXJwb3NlOiBQcmludHMgdGhlIGhlYWRlciBmb3IgdGhlIGVtcGxveWVlIHN1bW1hcnkgb3V0cHV0CnZvaWQgcHJpbnRIZWFkZXIodm9pZCkgewogICAgcHJpbnRmKCJcbkVtcGxveWVlIFN1bW1hcnk6XG4iKTsKICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKICAgIHByaW50ZigiRW1wbG95ZWUgSUQgfCBXYWdlIFJhdGUgfCBIb3VycyBXb3JrZWQgfCBPdmVydGltZSBIb3VycyB8IEdyb3NzIFBheVxuIik7CiAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Cn0KCi8vIEZ1bmN0aW9uOiBwcmludEVtcAovLyBQdXJwb3NlOiBQcmludHMgdGhlIGRldGFpbHMgZm9yIGVhY2ggZW1wbG95ZWUKdm9pZCBwcmludEVtcChsb25nIGludCBjbG9ja051bWJlciwgZmxvYXQgd2FnZVJhdGUsIGZsb2F0IGhvdXJzLCBmbG9hdCBvdmVydGltZUhycywgZmxvYXQgZ3Jvc3NQYXkpIHsKICAgIHByaW50ZigiJTEwbGQgfCAlOS4yZiB8ICUxMi4yZiB8ICUxNC4yZiB8ICU5LjJmXG4iLCBjbG9ja051bWJlciwgd2FnZVJhdGUsIGhvdXJzLCBvdmVydGltZUhycywgZ3Jvc3NQYXkpOwp9CgovLyBGdW5jdGlvbjogY2FsY3VsYXRlT3ZlcnRpbWUKLy8gUHVycG9zZTogQ2FsY3VsYXRlcyB0aGUgb3ZlcnRpbWUgaG91cnMgd29ya2VkCmZsb2F0IGNhbGN1bGF0ZU92ZXJ0aW1lKGZsb2F0IGhvdXJzKSB7CiAgICBpZiAoaG91cnMgPiBTVERfV09SS19XRUVLKSB7CiAgICAgICAgcmV0dXJuIGhvdXJzIC0gU1REX1dPUktfV0VFSzsKICAgIH0KICAgIHJldHVybiAwLjA7Cn0KCi8vIEZ1bmN0aW9uOiBjYWxjdWxhdGVHcm9zc1BheQovLyBQdXJwb3NlOiBDYWxjdWxhdGVzIHRoZSBncm9zcyBwYXkgYmFzZWQgb24gd2FnZSByYXRlLCBob3VycyB3b3JrZWQsIGFuZCBvdmVydGltZQpmbG9hdCBjYWxjdWxhdGVHcm9zc1BheShmbG9hdCB3YWdlUmF0ZSwgZmxvYXQgaG91cnMsIGZsb2F0IG92ZXJ0aW1lSHJzKSB7CiAgICBmbG9hdCByZWd1bGFyUGF5ID0gd2FnZVJhdGUgKiAoaG91cnMgLSBvdmVydGltZUhycyk7CiAgICBmbG9hdCBvdmVydGltZVBheSA9IG92ZXJ0aW1lSHJzICogd2FnZVJhdGUgKiBPVkVSVElNRV9SQVRFOwogICAgcmV0dXJuIHJlZ3VsYXJQYXkgKyBvdmVydGltZVBheTsKfQ==