Baixe o app para aproveitar ainda mais
Prévia do material em texto
1TP6 Aplicacionais para Ciências e Engenharia Aplicacionais para Ciências e Engenharia Aula 6 2TP6 Aplicacionais para Ciências e Engenharia Sumário • Programação em Matlab – Instruções condicionais (if e switch) – Instruções repetitivas (for e while) 3TP6 Aplicacionais para Ciências e Engenharia Instruções Condicionais 4TP6 Aplicacionais para Ciências e Engenharia Instruções condicionais – Instruções condicionais são comandos que permitem controlar a execução do código Matlab, enquanto uma expressão for verdadeira (caso do if) ou de forma implícita no while No Matlab temos as seguintes instruções condicionais: if switch 5TP6 Aplicacionais para Ciências e Engenharia if • if-end Exemplo: if expressao % Esta parte (corpo do if) é executada se expressao for verdadeira end x=4; if x>=0 y=sqrt(x); end disp(y) 2 clear x=-4; if x>0 y=sqrt(x); end disp(y) Unrecognized function or variable 'y’. % O corpo do if não é executado 6TP6 Aplicacionais para Ciências e Engenharia if • if-else-end Exemplo: x=4; if x>=0 y=sqrt(x); else y=abs(x); end disp(y) 2 if expressao % Esta parte é executada se expressao for verdadeira else % Esta parte é executada se expressao for falsa end x=-4; if x>=0 y=sqrt(x); else y=abs(x); end disp(y) 2 7TP6 Aplicacionais para Ciências e Engenharia if • if-else-end Podemos usar uma mensagem em caso de situação imprevista if expressao % Esta parte é executada se expressao for verdadeira else % Esta parte é executada se expressao for falsa end x=-2; if x>=0 y=sqrt(x); else disp('Erro: O valor tem de ser >=0') end Erro: O valor tem de ser >=0 8TP6 Aplicacionais para Ciências e Engenharia if (formato geral) • if-elseif-else-end Nota: o número de elseif pode ser qualquer e o else pode ou não ser usado if expressao1 % Esta parte é executada se expressao1 for verdadeira elseif expressao2 % Esta parte é executada se expressao2 for verdadeira % O elseif pode ser usado as vezes necessárias else % Esta parte é executada se expressao1 e expressao2 forem falsas end 9TP6 Aplicacionais para Ciências e Engenharia if (formato geral) • if-elseif-else-end Exemplo: x=input('Introduza um valor inteiro entre 1 e 10: '); if rem(x,3)==0 disp('O número é múltiplo de 3') elseif rem(x,5)==0 disp('O número é múltiplo de 5') elseif rem(x,8)==0 disp('O número é múltiplo de 8') else disp('O número não é múltiplo de 3, 5 ou 8') end 10TP6 Aplicacionais para Ciências e Engenharia switch • switch-case-otherwise-end switch expressao % expressao pode ser um valor numérico ou um array de caracteres case expressao1 instrucoes1 case expressao2 instrucoes2 ... otherwise % Pode não ser usado instrucoes end 11TP6 Aplicacionais para Ciências e Engenharia switch Exemplo 1: x=input('Introduza um valor inteiro entre 1 e 3: '); switch x case 1 fprintf('Introduziu o valor 1\n'); case 2 fprintf('Introduziu o valor 2\n'); case 3 fprintf('Introduziu o valor 3\n'); otherwise fprintf('O valor não está compreendido entre 1 e 3\n'); end Introduza um valor inteiro entre 1 e 3: 3 Introduziu o valor 3 Introduza um valor inteiro entre 1 e 3: 4 O valor não está compreendido entre 1 e 3 12TP6 Aplicacionais para Ciências e Engenharia switch Exemplo 2: x = [10 20 40 30]; TipoGrafico='pie'; switch TipoGrafico case 'bar' bar(x) title('Gráfico de barras') case 'pie' pie(x) title('Gráfico tarte') otherwise warning('Gráfico não previsto.') end 13TP6 Aplicacionais para Ciências e Engenharia switch É possível testar várias hipóteses num case. Para isso os valores / arrays de caracteres devem ser colocados dentro de {} Exemplo3: N=5 switch N case {1, 3, 5, 7, 9} disp('Impar entre 1 e 10') case {2, 4, 6, 8} disp('Par entre 1 e 10') otherwise disp('Não está entre 1 e 10'); end N = 5 Impar entre 1 e 10 14TP6 Aplicacionais para Ciências e Engenharia Instruções Repetitivas 15TP6 Aplicacionais para Ciências e Engenharia Instruções repetitivas – Instruções repetitivas são instruções que permitem repetir tarefas um dado número de vezes ou enquanto uma dada condição se mantiver No Matlab temos as seguintes instruções repetitivas (ciclos): for while 16TP6 Aplicacionais para Ciências e Engenharia for • for-end Utilizado quando se conhece o número de iterações for variavel = valores % valores pode ser um vetor criado com valores específicos ou definidos com o operador : % A variavel é atualizada automaticamente instrucoes end soma=0; for i=1:3 soma=soma+i end soma = 1 soma = 3 soma = 6 for v=[1 5 8] disp(v) end 1 5 8 17TP6 Aplicacionais para Ciências e Engenharia for • Curiosidade relativamente ao ciclo for: A redefinição de uma variável dentro do ciclo é possível sem que o resultado seja afetado total = 0; for i = 1:10 disp(i) total = total + 5*i end disp(total) 1 2 3 4 5 75 18TP6 Aplicacionais para Ciências e Engenharia for total = 0; for i = 1:10 disp(i) i=5*i; disp(i) total = total + i; end disp(total) 1 5 2 10 3 15 4 20 5 25 75 A variável de controlo i tem o mesmo nome da variável i no corpo do ciclo mas são independentes 19TP6 Aplicacionais para Ciências e Engenharia Ciclos encadeados (nested loops) • Os ciclos podem aparecer dentro de outros ciclos Exemplo: Nota: Não funciona bem se as variáveis de controlo dos ciclos tiverem o mesmo nome for i=1:5 % Gera a tabuada de i de 1 a 5 fprintf('Tabuada do %2d: ',i); for j=1:10 fprintf('%2d ',i*j); % Imprime a tabuada i end % % end ligado ao for mais próximo fprintf('\n'); end Tabuada do 1: 1 2 3 4 5 6 7 8 9 10 Tabuada do 2: 2 4 6 8 10 12 14 16 18 20 Tabuada do 3: 3 6 9 12 15 18 21 24 27 30 Tabuada do 4: 4 8 12 16 20 24 28 32 36 40 Tabuada do 5: 5 10 15 20 25 30 35 40 45 50 20TP6 Aplicacionais para Ciências e Engenharia while • while-end Utilizado quando não se conhece a priori o número de iterações while condicao % Esta parte (corpo do ciclo) é executada se condicao for verdadeira % A variávlel da condicao é atualizada através de instruções end s=0; i=1; while i<=10 s=s+i; i=i+1; end disp(s) 55 disp(i) 11 21TP6 Aplicacionais para Ciências e Engenharia break • break é um comando que permite interromper o ciclo no meio de seu corpo. Vejamos a sua utilização no exemplo anterior: s=0; i=1; while (i > 0) % Esta condição é sempre verdadeira. Pode ser substituída por while true s=s+i; i=i+1; if (i > 10) break; end end disp([s i]) 55 11 22TP6 Aplicacionais para Ciências e Engenharia continue • continue é um comando que permite interromper o ciclo no meio de seu corpo e recomeçar do início Vejamos a sua utilização no mesmo exemplo: s=0; i=1; while (i > 0) s=s+i; i=i+1; if (i < 11) continue; end break; end disp([s i]) 55 11 Nota: Os comandos break e continue também podem ser utilizados dentro do ciclo for para interromper ou redirecionar a execução do ciclo 23TP6 Aplicacionais para Ciências e Engenharia Aplicação do for e while Problema: Determinar a soma de todos os valores da sequência tais que % Este problema pode ser facilmente resolvido de forma vetorial da seguinte forma: k=1:10; ak=k.^-k; S=sum(ak(ak>=1e-5)) S = 1.2913 24TP6 Aplicacionais para Ciências e Engenharia Aplicação do for e while Usando o while (versão 1) S=0; k=1; while k<=10 & k^-k>=1e-5 S=S+k^-k; k=k+1; end disp(S) S = 1.2913 25TP6 Aplicacionais para Ciências e Engenharia Aplicação do for e while Usando o while (versão 2) S=0; k=1; while k<=10 a_k=k^-k; if a_k<1e-5 break; end S=S+a_k; k=k+1; end disp(S) S = 1.2913 26TP6 Aplicacionais para Ciências e Engenharia Aplicação do for e while Usando o for S=0; for k=1:10 ak=k^-k; if ak<1e-5 break; end S=S+ak; end disp(S) S = 1.2913 27TP6 Aplicacionais para Ciências e Engenharia Exercício: O valor de (número de Neper) pode ser obtido através da sériede Taylor para ௫ calculada para , ou seja: ஶ ୀ Pretende-se determinar o valor mínimo de para o qual o erro entre o valor de do Matlab e o valor obtido pela sequência dada é menor do que ିଵ . for e while encadeados clear erro=exp(1);N=0; while erro>1E-14 e=0; for n=0:N e=e+1/factorial(n); % e é a aproximação de exp(1) end erro=abs(exp(1)-e); N=N+1; end N=N-1; disp(N) format long disp([exp(1);e]) disp(erro) 15 2.718281828459046 2.718281828459043 2.664535259100376e-15
Compartilhar