Instituto Superior Técnico, Dep. de Engenharia Mecânica - ACCAII
Programação em MATLAB
•Estruturas de Selecção (conclusão)
•Caso de Estudo: Cálculo de Áreas
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Estruturas genéricas de selecção
2222
• Determina a instrução, ou conjunto de instruções, a executar:
se condição 1 acção 1 ...
se condição n acção n caso contrário
acção terminar
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Estruturas de selecção no MATLAB
3333
• Funções pré-definidas disponíveis no MATLAB:
• Estruturas de selecção:
• instruções if
• instruções if-else
• instruções if-elseencadeadas
• instruções switch
• Expressões lógicas específicas de execução eficiente:
• funções is*
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Função if-else
4444
Descrição: determina a instrução, ou conjunto de instruções, a ser executada.
Sintaxe: if expression statements_1 else
statements_2 end
Se expressão lógica = verdade
Caso contrário
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Função if-else
5555
>> aleatorio num =
0.2311
It was less than .5!
>> aleatorio num =
0.6068
It was not less than .5!
>> aleatorio num =
0.4860
It was less than .5!
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Função if-else
6666
>> checkradius
Please enter the radius: -4
Sorry; -4.00 is not a valid radius
>> checkradius
Please enter the radius: 5.5
For a circle with a radius of 5.50, the area is 95.03
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Função if-else encadeada
7777
Descrição: determina a instrução, ou conjunto de instruções, a ser executada de entre um conjunto de opções possíveis.
Sintaxe: if expression_1 statements_1 elseif expression_2
statements_2 elseif expression_3
statements_3 . . .
else
statements_n end
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Função if-else encadeada
8888
>> calcy(-2) ans =
1
>> calcy(0.5) ans =
0.2500
>> calcy(3) ans =
4
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Exemplos
9999
Determinar se argumento de entrada é escalar, vector ou matriz.
>> findargtype( rand ) ans =
scalar
>> findargtype( zeros(1,5) ) ans =
vector
>> findargtype( ones(5) ) ans =
matrix
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Exemplos
10 1010 10
>> pauta_if(21) ans =
Valor inválido!
>> pauta_if(8) ans =
RE
>> pauta_if(9.5) ans =
10
>> pauta_if(18) ans =
18
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Função switch
11 1111 11
Descrição: determina a instrução, ou conjunto de instruções, a ser executada de entre um conjunto de opções possíveis.
Sintaxe: switch switch_expr case case_expr,
statement(s)
case {case_expr1, case_expr2, ...}
statement(s) ...
otherwise, statement(s) end
switch_expr é igual a case_expr?
switch_expr pertence a {case_expr1, case_expr2,...}?
operando contável (por exemplo, dos tipos inteiro, lógico ou carácter)
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Exemplos
12 1212 12
>> aleatorio_sw num =
0.2311
It was less than .5!
>> aleatorio_sw num =
0.6068
It was not less than .5!
>> aleatorio_sw num =
0.4860
It was less than .5!
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Exemplos
13 1313 13
>> pauta_sw(21) ans =
Valor inválido!
>> pauta_sw(8) ans =
RE
>> pauta_sw(9.5) ans =
10
>> pauta_sw(18) ans =
18
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Exemplos
14 1414 14
>> diasmes('Fevereiro') ans =
28 ou 29 dias
>> m_actual = 'Novembro‘;
>> dias = diasmes(m_actual) dias =
30 dias
>> diasmes('Mai')
??? Error using ==> diasmes Mês inválido!
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Função menu
15 1515 15
Descrição: apresenta uma janela com opções de menu.
Sintaxe: option = menu(header,label1,label2,...) ou
labels = {label1,label2,...}
option = menu(header,labels)
>> opcoes = {'um','dois','três'};
>> option = menu('Menu de Opções',opcoes) ans =
3
option = 0
option = {1 ... 3}
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Função menu
16 1616 16
>> pickpizza mypick =
3
Order a sausage pizza
>> pickpizza mypick =
0
No pizza for us today
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Conjunto de funções is*
17 1717 17
Descrição: funções pré-definidas no MATLAB que implementam expressões lógicas específicasde modo eficiente. São genericamente referenciadas pelo prefixo is*, seguido de um sufixo representativo da função.
>> isletter('a') ans =
1
>> meu_isletter('a') ans =
1
>> isletter('4') ans =
0
isletter('a')
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Exemplos
18 1818 18
>> x = 4; isint(x) ans =
1
>> x = 3.9999; isint(x) ans =
0
>> x = 3.9999999999999999999999999999;
>> isint(x) ans =
1
Erro de arredondamento!
Alternativa: x == int32(x)
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Exemplos de funções is*
19 1919 19
Comando Descrição
ischar Determine if input is character array isdir Determine if input is directory isempty Determine if input is empty array
isequal Determine if arrays are numerically equal isfinite Detect finite elements of array
isfloat Determine if input is floating-point array ishold Determine if graphics hold state is on isinf Detect infinite elements of array isinteger Determine if input is integer array
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Exemplos de funções is*
20 2020 20
Comando Descrição
iskeyword Determine if input is MATLAB keyword islogical Determine if input is logical array
isnan Detect elements of array that are not a number (NaN)
isnumeric Determine if input is numeric array
isreal Determine if all array elements are real numbers isscalar Determine if input is scalar
isspace Detect space characters in array isvector Determine if input is vector
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Exemplos
21 2121 21
>> x=6;
>> ischar(x) ans =
0
>> isempty(x) ans =
0
>> isequal(x,6) ans =
1
>> isfinite(x) ans =
1
>> isfloat(x) ans =
1
>> isinf(x) ans =
0
>> isinteger(x) ans =
0
>> islogical(x) ans =
0
>> isnumeric(x) ans =
1
>> isreal(x) ans =
1
>> isscalar(x) ans =
1
>> isvector(x) ans =
1
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Exemplos
22 2222 22
>> vector = []; isempty(vector) ans =
1
>> vector = [4;5;6]; isempty(vector) ans =
0
>> clear; isempty(vector)
??? Reference to a cleared variable vector.
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Palavras reservadas do MATLAB
23 2323 23
>> iskeyword('sin') ans =
0
>> iskeyword('switch') ans =
1
>> iskeyword ans =
'break' 'case' 'catch' 'continue' 'else'
'elseif' 'end' 'for' 'function' 'global' 'if'
'otherwise' 'persistent' 'return' 'switch' 'try' 'while'
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Palavras reservadas do MATLAB
24 2424 24
>> iskeyword('pi') ans =
0
>> pi ans =
3.1416
>> pi = -3 ans =
-3
>> iskeyword('case') ans =
1
>> case = -3
??? case = -3
|
Error: Illegal use of reserved keyword "case".
José Borges
José Borges -- Miguel Miguel Pedro SilvaPedro Silva Computação e Programação 2009 / 2010Computação e Programação 2009 / 2010
Referências
25 2525 25
• Capítulo 3 de Stormy Attaway (2009), “Matlab: A Practical Introduction to Programming and Problem Solving”, Elsevier.