Design subroutines and parameter contracts
Choose a procedure or function
A function returns a value used in an expression. A procedure performs an action, such as changing stock or printing a report. Specify parameter types and the promised result before implementation.
Worked example: a returned calculation
FUNCTION Double(Value : INTEGER) RETURNS INTEGER
RETURN Value * 2
ENDFUNCTION
OUTPUT Double(6)
The caller chooses what to do with 12. OUTPUT inside the function would print a value but would not return it. BYVAL supplies a value; BYREF allows a procedure to change the caller's variable.
Review the interfaces
For each task, say what changes in the caller and what is returned or printed. The checker supplies calls, so write only the requested subroutine. Test both a successful operation and a refused operation; refusal must preserve state.
Write only FUNCTION Charge(Hours : INTEGER) RETURNS INTEGER. For 1 or 2 hours return 3; each hour above 2 adds 2. Hours is positive.
Nhấn Chạy để xem kết quả ở đây.
Write only PROCEDURE Supply(BYREF Stock : INTEGER, Wanted : INTEGER). If Wanted is positive and fits, decrease Stock and output supplied; otherwise output refused.
Nhấn Chạy để xem kết quả ở đây.
P starts at 10. PROCEDURE Add(BYVAL X : INTEGER) sets X ← X + 4. After CALL Add(P), what is P? Enter the number.
Explain your choice of data structure and loop. Identify one boundary case and predict its result. For a subroutine, explain what is returned or changed in the caller.
Saved for this sitting on this browser. Review this yourself or with your teacher; these explanations are not automatically marked.
Review your explanation against these criteria
- My types and data structure match the data and the question.
- I justified the loop and checked its first and last iterations.
- Initial values and rejected operations preserve the intended state.
- My test includes input, purpose and expected result.
- I distinguished returning a value from printing and changing caller state.