(a) Four separate subprograms for a banking system:
PROCEDURE Deposit(BYREF Balance : REAL, Amount : REAL)
IF Amount > 0 THEN
Balance ← Balance + Amount
OUTPUT "Deposited: ", Amount, ". New balance: ", Balance
ELSE
OUTPUT "Invalid amount"
ENDIF
ENDPROCEDURE
Deposit uses a procedure with BYREF to modify the balance directly. It validates that the amount is positive. [1]
FUNCTION Withdraw(BYREF Balance : REAL, Amount : REAL) RETURNS BOOLEAN
IF Amount <= 0 THEN
OUTPUT "Invalid amount"
RETURN FALSE
ENDIF
IF Amount > Balance THEN
OUTPUT "Insufficient funds. Balance: ", Balance
RETURN FALSE
ENDIF
Balance ← Balance - Amount
OUTPUT "Withdrawn: ", Amount, ". New balance: ", Balance
RETURN TRUE
ENDFUNCTION
Withdraw checks both validity and sufficient funds before deducting. It returns a Boolean indicating success. [1]
PROCEDURE CheckBalance(Balance : REAL)
OUTPUT "Current balance: ", Balance
ENDPROCEDURE
CheckBalance passes Balance by value (read-only) since it only displays the value. [1]
FUNCTION CalculateInterest(Balance : REAL) RETURNS REAL
RETURN Balance * 0.02
ENDFUNCTION
CalculateInterest is a function because it computes and returns a value (2% of the balance) without modifying the balance itself. [1]