//******************************************************** 
// 
// 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.5f 
#define STD_WORK_WEEK 40.0f 
 
// 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( )  { 
    // Variable Declarations 
    long  int  clockNumber[ SIZE]  =  { 98401 ,  526488 ,  765349 ,  34645 ,  127615 } ;  // ID 
    float  grossPay[ SIZE] ;    // Gross pay 
    float  hours[ SIZE] ;       // Hours worked in a given week 
    float  overtimeHrs[ SIZE] ;  // Overtime hours 
    float  wageRate[ SIZE]  =  { 10.60 ,  9.75 ,  10.50 ,  12.25 ,  8.35 } ;  // Hourly wage rate 
    int  i;   // Loop index 
 
    // Process each employee 
    for  ( i =  0 ;  i <  SIZE;  ++ i)  { 
        hours[ i]  =  getHours( clockNumber[ i] ) ; 
        overtimeHrs[ i]  =  calculateOvertime( hours[ i] ) ; 
        grossPay[ i]  =  calculateGrossPay( wageRate[ i] ,  hours[ i] ,  overtimeHrs[ i] ) ; 
    } 
 
    // Print the header info 
    printHeader( ) ; 
 
    // Print out each employee's details 
    for  ( i =  0 ;  i <  SIZE;  ++ i)  { 
        printEmp( clockNumber[ i] ,  wageRate[ i] ,  hours[ i] ,  overtimeHrs[ i] ,  grossPay[ i] ) ; 
    } 
 
    return  0 ; 
} 
 
// Function to get hours worked from user 
float  getHours( long  int  clockNumber)  { 
    float  hoursWorked; 
    printf ( "\n Enter hours worked by emp # %06li: " ,  clockNumber
) ;      scanf ( "%f" ,  & hoursWorked
) ;      return  hoursWorked; 
} 
 
// Function to print the table header 
void  printHeader( void )  { 
    printf ( "\n *** Pay Calculator ***\n \n " ) ;      printf ( "Clock#   Wage  Hours  OT     Gross\n " ) ;      printf ( "------------------------------------\n " ) ;  } 
 
// Function to print employee details 
void  printEmp( long  int  clockNumber,  float  wageRate,  float  hours,  
              float  overtimeHrs,  float  grossPay)  { 
    printf ( "%06li  %.2f  %.2f  %.2f  %.2f\n " ,              clockNumber,  wageRate,  hours,  overtimeHrs,  grossPay) ; 
} 
 
// Function to calculate overtime hours 
float  calculateOvertime( float  hours)  { 
    return  ( hours >  STD_WORK_WEEK)  ?  ( hours -  STD_WORK_WEEK)  :  0.0f ; 
} 
 
// Function to calculate gross pay 
float  calculateGrossPay( float  wageRate,  float  hours,  float  overtimeHrs)  { 
    float  regularPay =  wageRate *  ( hours -  overtimeHrs) ; 
    float  overtimePay =  overtimeHrs *  ( wageRate *  OVERTIME_RATE) ; 
    return  regularPay +  overtimePay; 
} 
 
				Ci8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8KLy8gQXNzaWdubWVudCA1IC0gRnVuY3Rpb25zCi8vCi8vIE5hbWU6IDxJc2FhYyBCb2FobmRhbz4KLy8KLy8gQ2xhc3M6IEMgUHJvZ3JhbW1pbmcsIDxTcHJpbmcgU2VtZXN0ZXIgYW5kIDIwMjU+Ci8vCi8vIERhdGU6IDwwM18wMl8yNT4KLy8KLy8gRGVzY3JpcHRpb246IFByb2dyYW0gd2hpY2ggZGV0ZXJtaW5lcyBvdmVydGltZSBhbmQgCi8vIGdyb3NzIHBheSBmb3IgYSBzZXQgb2YgZW1wbG95ZWVzIHdpdGggb3V0cHV0cyBzZW50IAovLyB0byBzdGFuZGFyZCBvdXRwdXQgKHRoZSBzY3JlZW4pLgovLwovLyBBbGwgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYnkgdmFsdWUKLy8KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgojaW5jbHVkZSA8c3RkaW8uaD4KCi8vIENvbnN0YW50cwojZGVmaW5lIFNJWkUgNQojZGVmaW5lIE9WRVJUSU1FX1JBVEUgMS41ZgojZGVmaW5lIFNURF9XT1JLX1dFRUsgNDAuMGYKCi8vIEZ1bmN0aW9uIHByb3RvdHlwZXMKZmxvYXQgZ2V0SG91cnMobG9uZyBpbnQgY2xvY2tOdW1iZXIpOwp2b2lkIHByaW50SGVhZGVyKHZvaWQpOwp2b2lkIHByaW50RW1wKGxvbmcgaW50IGNsb2NrTnVtYmVyLCBmbG9hdCB3YWdlUmF0ZSwgZmxvYXQgaG91cnMsIAogICAgICAgICAgICAgIGZsb2F0IG92ZXJ0aW1lSHJzLCBmbG9hdCBncm9zc1BheSk7CmZsb2F0IGNhbGN1bGF0ZU92ZXJ0aW1lKGZsb2F0IGhvdXJzKTsKZmxvYXQgY2FsY3VsYXRlR3Jvc3NQYXkoZmxvYXQgd2FnZVJhdGUsIGZsb2F0IGhvdXJzLCBmbG9hdCBvdmVydGltZUhycyk7CgppbnQgbWFpbigpIHsKICAgIC8vIFZhcmlhYmxlIERlY2xhcmF0aW9ucwogICAgbG9uZyBpbnQgY2xvY2tOdW1iZXJbU0laRV0gPSB7OTg0MDEsIDUyNjQ4OCwgNzY1MzQ5LCAzNDY0NSwgMTI3NjE1fTsgLy8gSUQKICAgIGZsb2F0IGdyb3NzUGF5W1NJWkVdOyAgIC8vIEdyb3NzIHBheQogICAgZmxvYXQgaG91cnNbU0laRV07ICAgICAgLy8gSG91cnMgd29ya2VkIGluIGEgZ2l2ZW4gd2VlawogICAgZmxvYXQgb3ZlcnRpbWVIcnNbU0laRV07IC8vIE92ZXJ0aW1lIGhvdXJzCiAgICBmbG9hdCB3YWdlUmF0ZVtTSVpFXSA9IHsxMC42MCwgOS43NSwgMTAuNTAsIDEyLjI1LCA4LjM1fTsgLy8gSG91cmx5IHdhZ2UgcmF0ZQogICAgaW50IGk7ICAvLyBMb29wIGluZGV4CgogICAgLy8gUHJvY2VzcyBlYWNoIGVtcGxveWVlCiAgICBmb3IgKGkgPSAwOyBpIDwgU0laRTsgKytpKSB7CiAgICAgICAgaG91cnNbaV0gPSBnZXRIb3VycyhjbG9ja051bWJlcltpXSk7CiAgICAgICAgb3ZlcnRpbWVIcnNbaV0gPSBjYWxjdWxhdGVPdmVydGltZShob3Vyc1tpXSk7CiAgICAgICAgZ3Jvc3NQYXlbaV0gPSBjYWxjdWxhdGVHcm9zc1BheSh3YWdlUmF0ZVtpXSwgaG91cnNbaV0sIG92ZXJ0aW1lSHJzW2ldKTsKICAgIH0KCiAgICAvLyBQcmludCB0aGUgaGVhZGVyIGluZm8KICAgIHByaW50SGVhZGVyKCk7CgogICAgLy8gUHJpbnQgb3V0IGVhY2ggZW1wbG95ZWUncyBkZXRhaWxzCiAgICBmb3IgKGkgPSAwOyBpIDwgU0laRTsgKytpKSB7CiAgICAgICAgcHJpbnRFbXAoY2xvY2tOdW1iZXJbaV0sIHdhZ2VSYXRlW2ldLCBob3Vyc1tpXSwgb3ZlcnRpbWVIcnNbaV0sIGdyb3NzUGF5W2ldKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoKLy8gRnVuY3Rpb24gdG8gZ2V0IGhvdXJzIHdvcmtlZCBmcm9tIHVzZXIKZmxvYXQgZ2V0SG91cnMobG9uZyBpbnQgY2xvY2tOdW1iZXIpIHsKICAgIGZsb2F0IGhvdXJzV29ya2VkOwogICAgcHJpbnRmKCJcbkVudGVyIGhvdXJzIHdvcmtlZCBieSBlbXAgIyAlMDZsaTogIiwgY2xvY2tOdW1iZXIpOwogICAgc2NhbmYoIiVmIiwgJmhvdXJzV29ya2VkKTsKICAgIHJldHVybiBob3Vyc1dvcmtlZDsKfQoKLy8gRnVuY3Rpb24gdG8gcHJpbnQgdGhlIHRhYmxlIGhlYWRlcgp2b2lkIHByaW50SGVhZGVyKHZvaWQpIHsKICAgIHByaW50ZigiXG4qKiogUGF5IENhbGN1bGF0b3IgKioqXG5cbiIpOwogICAgcHJpbnRmKCJDbG9jayMgICBXYWdlICBIb3VycyAgT1QgICAgIEdyb3NzXG4iKTsKICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKfQoKLy8gRnVuY3Rpb24gdG8gcHJpbnQgZW1wbG95ZWUgZGV0YWlscwp2b2lkIHByaW50RW1wKGxvbmcgaW50IGNsb2NrTnVtYmVyLCBmbG9hdCB3YWdlUmF0ZSwgZmxvYXQgaG91cnMsIAogICAgICAgICAgICAgIGZsb2F0IG92ZXJ0aW1lSHJzLCBmbG9hdCBncm9zc1BheSkgewogICAgcHJpbnRmKCIlMDZsaSAgJS4yZiAgJS4yZiAgJS4yZiAgJS4yZlxuIiwgCiAgICAgICAgICAgY2xvY2tOdW1iZXIsIHdhZ2VSYXRlLCBob3Vycywgb3ZlcnRpbWVIcnMsIGdyb3NzUGF5KTsKfQoKLy8gRnVuY3Rpb24gdG8gY2FsY3VsYXRlIG92ZXJ0aW1lIGhvdXJzCmZsb2F0IGNhbGN1bGF0ZU92ZXJ0aW1lKGZsb2F0IGhvdXJzKSB7CiAgICByZXR1cm4gKGhvdXJzID4gU1REX1dPUktfV0VFSykgPyAoaG91cnMgLSBTVERfV09SS19XRUVLKSA6IDAuMGY7Cn0KCi8vIEZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBncm9zcyBwYXkKZmxvYXQgY2FsY3VsYXRlR3Jvc3NQYXkoZmxvYXQgd2FnZVJhdGUsIGZsb2F0IGhvdXJzLCBmbG9hdCBvdmVydGltZUhycykgewogICAgZmxvYXQgcmVndWxhclBheSA9IHdhZ2VSYXRlICogKGhvdXJzIC0gb3ZlcnRpbWVIcnMpOwogICAgZmxvYXQgb3ZlcnRpbWVQYXkgPSBvdmVydGltZUhycyAqICh3YWdlUmF0ZSAqIE9WRVJUSU1FX1JBVEUpOwogICAgcmV0dXJuIHJlZ3VsYXJQYXkgKyBvdmVydGltZVBheTsKfQ==