Programação em MATLAB • Estruturas de Repetição • Ciclo FOR • Ciclos FOR encadeados • Pré-alocação de variáveis • Combinar ciclos FOR com a instrução IF Instituto Superior Técnico, Dep. de Engenharia Mecânica - ACCAII Estruturas de repetição no MATLAB • Estruturas de repetição disponíveis no MATLAB: • Estruturas de repetição: • instrução for • O ciclo FOR permite que uma sequência de instruções seja executada mais do que uma vez. • O ciclo FOR repete um bloco de instruções um determinado número de vezes. Esse número de vezes é especificado antes do ciclo ser executado. • instrução while • O ciclo WHILE repete o bloco de instruções enquanto a condição associada for verdadeira. Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 2 Instrução for Descrição: Repete um bloco de instruções um número específico de vezes. Sintaxe: for variable = expression statement_1 . . statement_n end Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 3 Instrução for exemplo1 >> exemplo1 1 ao quadrado = 1 2 ao quadrado = 4 3 ao quadrado = 9 4 ao quadrado = 16 5 ao quadrado = 25 6 ao quadrado = 36 7 ao quadrado = 49 8 ao quadrado = 64 9 ao quadrado = 81 10 ao quadrado = 100 >> Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 4 Instrução for FLUXOGRAMA: Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 5 Instrução for exemplo2 Problema: Escreva uma função que retorne o valor do somatório de i = 1 até i = n Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 6 Instrução for exemplo2 Problema: Escreva uma função que retorne o valor do somatório de i = 1 até i = n >> somatorio(5) ans = 15 Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 7 Instrução for exemplo3 Problema: Escreva uma função que retorne o factorial de n (ou seja: n!) >> fact(0) ans = 1 >> fact(1) ans = 1 >> fact(2) ans = 2 >> fact(4) ans = 24 Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 8 As funções sum e factorial As funções sum e factorial estão pré-definidas no MATLAB: >> sum([1 2 3 4 5]) ans = 15 >> factorial(4) ans = 24 Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 A pré-alocação de um array A pré-alocação de espaço em memória para um array permite uma maior eficiência na execução! Concatenação: Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 PORQUÊ ? A pré-alocação de um array Pré-alocação: Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 A pré-alocação de um array Exemplo de execução: >> somaAcumulada([1 2 3 4]) ans = 1 3 6 10 >> somaAcumulada2([1 2 3 4]) Mais eficiente em termos de tempo de cálculo ans = 1 3 Miguel Pedro Silva – José Borges 6 10 Computação e Programação 2009 / 2010 Combinando ciclos com decisões Problema: Escreva uma função que recebe um vector e que devolve o seu valor mínimo. Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 Combinando ciclos com decisões Exemplo de execução: >> minimo([53 45 3 45 2 44]) ans = 2 Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 Ciclos FOR encadeados • O corpo de instruções de um ciclo FOR pode conter outro ciclo FOR; • Quando tal acontece, diz-se que se possui ciclos FOR encadeados; • Os ciclos FOR encadeados são geralmente utilizados para aceder a estruturas de dados com mais de que uma dimensão. Por exemplo, uma matriz. Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 Ciclos FOR encadeados Problema: Escreva uma função que receba uma matriz com valores aleatórios entre zero e um, que devolva uma matriz constituída por zeros e uns. A função deve converter os valores entre [0 ,0.5[ em zero, e os valores entre [0.5,1] em um. Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 Ciclos FOR encadeados Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 Ciclos FOR encadeados Exemplo de execução: >> >> A=rand(3,4) A = 0.9572 0.1419 0.4854 0.4218 0.8003 0.9157 >> B=binariza(A) B = 1 0 1 0 0 1 1 1 1 Miguel Pedro Silva – José Borges 0.7922 0.9595 0.6557 0.0357 0.8491 0.9340 0 1 1 Computação e Programação 2009 / 2010 Referências • Capítulo 4 de Stormy Attaway (2009), “Matlab: A Practical Introduction to Programming and Problem Solving”, Elsevier. Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 19