Today we'll look at slightly more complex functions, with
if-elseif-else
statementsswitch
statements
The declaration of a function f
with multiple arguments and multiple return values has general form
function [rtn1, rtn2, rtn3, ...] = f(arg1, arg2, arg3, ...)
The general form of an if-elseif-else
statement is
if condition1 action1 elseif condition2 action2 elseif condition3 action3 else action4 end
though of course you can have as many elseif
statements as you like.
Write a Matlab function temp2kcf
converts a temperature t
in any one of the three units Kelvin, Celsius, or Farenheit, and returns the temperature in all three units. The function should have two arguments, the temperature t
and a character units
which specifies the units as either K, C, or F and three return values, tK, tC, tF
.
Here's a decent solution to the problem using an if-elseif-else
statement.
function [tK, tC, tF] = temp2kcf(t, units); % convert temperature t in units 'C', 'F', or 'K' to all three of those units % convert input temp to Kelvin if units == 'F' tK = 5/9*t + 255.37; elseif units == 'C' tK = t + 273.15; elseif units == 'K' tK = t; else fprintf('error: unknown units %c, returning absolute zero\n', units); tK = 0; end % convert Kelvin to output temps tC = tK - 273.15; tF = 9/5*tC + 32; end
The above problem is actually better done with a switch statement. Switch statements perform conditional execution based on the value of a variable or an expression. The general form is
switch expression case value1 action1 case value2 action2 case value3 action3 otherwise action4 end
Here's a solution to the problem using a switch
statement.
function [tK, tC, tF] = temp2kcf(t, units); % convert temperature t in units 'C', 'F', or 'K' to all three of those units % convert input temp to Kelvin switch units case 'F' tK = 5/9*(t-32) + 273.15; case 'C' tK = t + 273.15; case 'K' tK = t; otherwise fprintf('error: unknown units %c, returning absolute zero\n', units); tK = 0; end % convert Kelvin to output temps tC = tK - 273.15; tF = 9/5*tC + 32; end