====== Differences ====== This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
gibson:teaching:fall-2014:math445:lecture8-diary [2014/10/08 11:43] gibson |
gibson:teaching:fall-2014:math445:lecture8-diary [2014/10/09 17:01] (current) gibson [Example: if-elseif-else and multiple args and return val] |
||
---|---|---|---|
Line 7: | Line 7: | ||
* ''switch'' statements | * ''switch'' statements | ||
- | Let's illustrate in the context of this problem: 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 ''u'' which specifies the units as either K, C, or F and three return values, ''tK, tC, tF''. | + | ====Multiple arguments and return values==== |
+ | The declaration of a function ''f'' with multiple arguments and multiple return values has general form | ||
+ | <code matlab> | ||
+ | function [rtn1, rtn2, rtn3, ...] = f(arg1, arg2, arg3, ...) | ||
+ | </code> | ||
+ | |||
+ | ====if-elseif-else statement==== | ||
+ | |||
+ | The general form of an ''if-elseif-else'' statement is | ||
+ | <code matlab> | ||
+ | if condition1 | ||
+ | action1 | ||
+ | elseif condition2 | ||
+ | action2 | ||
+ | elseif condition3 | ||
+ | action3 | ||
+ | else | ||
+ | action4 | ||
+ | end | ||
+ | </code> | ||
+ | though of course you can have as many ''elseif'' statements as you like. | ||
+ | |||
+ | ====Example: if-elseif-else and multiple args and return val==== | ||
+ | |||
+ | 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. | ||
+ | <code matlab> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | ====switch statement==== | ||
+ | |||
+ | 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 | ||
+ | <code matlab> | ||
+ | switch expression | ||
+ | case value1 | ||
+ | action1 | ||
+ | case value2 | ||
+ | action2 | ||
+ | case value3 | ||
+ | action3 | ||
+ | otherwise | ||
+ | action4 | ||
+ | end | ||
+ | </code> | ||
+ | |||
+ | Here's a solution to the problem using a ''switch'' statement. | ||
+ | <code matlab> | ||
+ | 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 | ||
+ | </code> |