1 c++ functions. // the function computes and returns the gross pay // based on the pay rate and...
TRANSCRIPT
1
C++ Functions
// The function computes and returns the gross pay
// based on the pay rate and hours. Hours over
// 40 will be paid 1.5 times the regular pay rate.
float GrossPay(float payRate, float hours)
{
float total;
if (hours > REG_HOURS)
total = (hours - REG_HOURS)* OVER_TIME * payRate +
REG_HOURS * payRate;
else
total = hours * payRate;
return total;
}
// No input for payRate and hours
// Parameters receive values on function call!
2
Passing Parameters
const float REG_HOURS = 40.0;const float OVER_TIME = 1.5;
int main(){ float hours, rate, gross;
cin >> rate >> hours; // rate: 12.5 // hours: 50 gross = GrossPay(rate, hours);
// display result
return 0;}
int GrossPay(float payRate, float hours){ float total; if (hours > REG_HOURS) total = (hours - REG_HOURS) * OVER_TIME * payRate + REG_HOURS * payRate; else total = hours * payRate; return total;}
main() GrossPay()
Function call
Passing parameters
12.5 50
Returning to main()
With return value
3
IN Parameter
The value of the actual parameter is passed into the function and assigned to the formal parameters.
float GrossPay(float payRate, float hours);
int main(){ ... cin >> rate >> hours; // rate: 12.5 // hours: 45.5 gross = GrossPay(rate, hours); ...}
4
IN Parameters
int Largest(int num1, int num2, int num3);
cin >> score1 >> score2 >> score3;max = Largest(score1, score2, score3);
void DisplayResult(float avg, float max,
float min);
// Input scores and compute the highest, // lowest and average
DisplayResult(avg, highest, lowest);// The function does output, but IN parameters!
float sqrt(float x);
5
Function Parameters
In The value of the actual parameter is
passed into the function and assigned to the formal parameter.
Out The value of formal parameter is
passed out of the function and assigned to the actual parameter.
InOut Both In and Out.
6
float GrossPay(float payRate, float hours);
int main(){ float hours, rate, gross;
// Input values in main() cin >> rate >> hours;
gross = GrossPay(rate, hours);
// display result
return 0;}
// Q: Can we use a function to input rate and hours?
7
Write a function to input rate and hours
Function Prototype
Name: GetInput
Type: void Cannot pass two values using the return statement
Parameters: rate (payRate), hours (hoursWorked) type: float (Passing values back to calling function) (OUT parameters!) (&)
void GetInput(float& payRate, float& hoursWorked);
8
float GrossPay(float payRate, float hours);void GetInput(float& payRate, float& hoursWorked);
int main(){ float hours, rate, gross;
// Call function GetInput() to get two values GetInput(rate, hours);
// Call function GrossPay to get one value gross = GrossPay(rate, hours);
// display result
return 0;}
9
Function Definition// -------------------------------------------------// The function inputs payRate and hoursWorked and// pass both values back to the calling function.// Parameters: (out, out)// -------------------------------------------------void GetInput(float& payRate, float& hoursWorked){ cout << "Enter pay rate: "; cin >> payRate; cout << "Enter hours: "; cin >> hoursWorked;
return;}
// The function does input with prompt, but OUT parameters!// How can it pass two values back?// Out Parameters: &// Statement return can pass only one value back!
10
// -------------------------------------------------
// The function computes and returns the gross pay
// based on the pay rate and hours. Hours over
// 40 will be paid 1.5 times the regular pay rate.
// Parameters: (in, in)
// -------------------------------------------------
float GrossPay(float payRate, float hours)
{
if (hours > REG_HOURS)
payRate = (hours - REG_HOURS) * OVER_TIME * payRate +
REG_HOURS * payRate;
else
payRate = hours * payRate;
return payRate;
}
// No local variable
// payRate is used to store the result
11
Reference and Value Parametersfloat GrossPay(float payRate, float hours);
void GetInput(float& payRate, float& hoursWorked);
Value parameter: No &
The value of actual parameter is passed to the formal parameter
Reference Parameter: &
The address of actual parameter is passed to the formal parameter
Does the actual parameter change its value when the corresponding formal parameter changes its value?
Value parameter (no &): NO
Reference parameter (&): YES
12
Value and Reference Parameters
const float REG_HOURS = 40.0;const float OVER_TIME = 1.5;
int main(){ float hours, rate, gross;
GetInput(rate, hours);
gross = GrossPay(rate, hours);
// display result
return 0;}
float GrossPay(float payRate, float hours){ if (hours > REG_HOURS) payRate = (hours - REG_HOURS) * OVER_TIME * payRate + REG_HOURS * payRate; else payRate = hours * payRate; return payRate;}
main()
GetInput()
void GetInput(float& payRate, float& hoursWorked){ cout << "Enter pay rate: "; cin >> payRate; cout << "Enter hours: "; cin >> hoursWorked;
return;}
GrossPay()Passing parameters
12.5 50
Passing parameters
Addresses of rate and hours
Return control
With value
Return control
13
Tracing FunctionsInput: 10 45
HiCNotes\HiC\GrossPayInOutFuns.cpp
14
Tracing FunctionsInput: 10 45
GetInput(rate, hours); // Reference parametersgross = GrossPay(rate, hours);// Value parameters
main() GetInput() GrossPay() hours rate gross & payRate & hoursWorked hours payRate ? ? ? ? ? ? ? Addr of Addr of rate hours 10.0 45.0 45.0 10.0 475.0 475.0
15
Schedule
• Program 2
Grace Time: 9:30 PM, Today
Style!
Name conversion
• Quiz 4-2
Due 5 pm Monday
• Program 3
Two points Quiz Wednesday
Two points progress Lab Thursday
Discuss Friday
16
17
Prog2 Winner
// The new route is the winner
if (totalDistance < minTotalDistance &&
numDeiveries > maxDeiveries)
// update winnerNum,
// minTotalDistance and maxDeiveries
// No winner for now
else if (totalDistance =< minTotalDistance ||
numDeiveries >= maxDeiveries)
// update winnerNum to -1
// minTotalDistance and maxDeiveries
// The previous winner still winner
else
// do nothing
18
Prog2 Winner
if (totalDistance < minTotalDistance &&
numDeiveries > maxDeiveries)
. . .
// No winner for now
else if (totalDistance =< minTotalDistance ||
numDeiveries >= maxDeiveries)
{
winnerNum = -1;
minTotalDistance = -1;
maxDeiveries = -1;
}
Incorrect!
Not Style!
19
Prog2 Winner
// No winner for now
else if (totalDistance =< minTotalDistance ||
numDeiveries >= maxDeiveries)
{
winnerNum = -1;
if (totalDistance < minTotalDistance)
minTotalDistance = totalDistance;
if (numDeiveries > maxDeiveries)
maxDeiveries = numDeiveries;
}
Correct!
Update your Prog2 and submit again!
20
Prog2 Winner: Another Wayif (totalDistance < minTotalDistance &&
numDeiveries > maxDeiveries)
. . .
else
{
if (totalDistance =< minTotalDistance)
{
winnerNum = -1;
minTotalDistance = totalDistance;
}
// No else !
if (numDeiveries >= maxDeiveries)
{
winnerNum = -1;
maxDeiveries = numDeiveries;
}
}
21
Prog2 Winner: Another Wayif (routeNum == 1)
{
distWinnerNum = routeNum;
delWinnerNum = routeNum;
minTotalDistance = totalDistance;
maxDeiveries = numDeiveries;
}
else
{
if (totalDistance < minTotalDistance)
{
distWinnerNum = routeNum;
minTotalDistance = totalDistance;
}
else if (totalDistance == minTotalDistance)
{
distWinnerNum = routeNum;
}
// else prev distWinnerNum still winner
// same if – else if for delWinnerNum
}
Exercise
Tracing Functions with In and Out Parameters
GrossPayInOutParam.doc
22
Tracing FunctionsInput: 10 45
GetInput(rate, hours); // Reference parametersgross = GrossPay(rate, hours);// Value parameters
main() GetInput() GrossPay() hours rate gross & payRate & hoursWorked hours payRate ? ? ? ? ? ? ? Addr of Addr of rate hours 10.0 45.0 45.0 10.0 475.0 475.0
23