Informática para Ciências e Engenharias (B) 2016/17 Teórica 3
Na aua de hoje Vetores. Cicos FOR. Percursos em vetores. Exempos 22 Março 2017 Vetores; cicos FOR 2
Probema dos Contaminantes Para avaiar a quaidade da água de um rio foi medida a concentração de Pb em 50 amostras. c 1, c 2, c 3,..., c 50 Probema: Desenvover um programa para cacuar a concentração média de Pb nas amostras. 22 Março 2017 Vetores; cicos FOR 3
Resoução Probema [1] 1. Compreender totamente o probema descrito no enunciado. 2. Caracterizar o probema. Probema: Cácuo de uma média. Entrada: reais c 1,..., c 50. Saída: a média de c 1,..., c 50. µ = 1 50 50 c i i=1 22 Março 2017 Vetores; cicos FOR 4
Resoução Probema [2] 3. Generaizar o probema (sempre que possíve) Probema: Cácuo de uma média de n vaores. Entrada: reais c 1,..., c n (n 1) Saída: a média de c 1,..., c n. µ = 1 n n c i i=1 22 Março 2017 Vetores; cicos FOR 5
Resoução Agoritmo [1] 4. Desenhar o agoritmo para resover o probema. a. Conceber o agoritmo, decompondo o probema em subprobemas (se necessário). Como cacuar a média de c 1,..., c n? Somando os vaores c 1,..., c n e dividindo peo seu número. b. Identificar, caracterizar e generaizar cada sub-probema. Não há sub-probemas. 22 Março 2017 Vetores; cicos FOR 6
Resoução Agoritmo [2] c. Conceber o agoritmo, assumindo que os sub-probemas estão resovidos. Média (c 1,..., c n ) : µ = 1 n n c i i=1 Ideia base: impementa-se uma soma de n parceas como uma sequência de n somas de duas parceas, usando-se sempre o resutado anterior. 22 Março 2017 Vetores; cicos FOR 7
Resoução Agoritmo [3] Cácuo do somatório Exempo para n = 5: soma = 0 µ = 1 n n c i i=1 soma = soma + c 1 % soma tem c 1 soma = soma + c 2 % soma tem (c 1 ) + c 2 soma = soma + c 3 % soma tem (c 1 +c 2 ) + c 3 soma = soma + c 4 % soma tem (c 1 +c 2 +c 3 ) + c 4 soma = soma + c 5 % soma tem (c 1 +c 2 +c 3 +c 2 ) + c 5 22 Março 2017 Vetores; cicos FOR 8
Resoução Programa 5. Para cada sub-probema, desenhar o agoritmo para o resover. Não há sub-probemas. 6. Para cada sub-probema (começando peos mais simpes), impementar o respetivo agoritmo e testar o sub-programa. Não há sub-probemas. 7. Impementar o agoritmo que resove o probema e testar o programa pedido. Média (c 1,..., c n ) 22 Março 2017 Vetores; cicos FOR 9
Impementação Que questões? Como é que se guarda um número (finito mas) arbitrário de vaores (do mesmo tipo)? No probema: os reais c 1,..., c n, para quaquer n Como é que se pode executar uma instrução um número arbitrário (mas finito) de vezes? No probema: a atribuição no cácuo de um somatório, para quaquer n. 22 Março 2017 Vetores; cicos FOR 10
Na aua de hoje Vetores. Cicos FOR. Percursos em vetores. Exempos 22 Março 2017 Vetores; cicos FOR 11
Impementação Que questões? Como é que se guarda um número (finito mas) arbitrário de vaores (do mesmo tipo)? No probema: os reais c 1,..., c n, para quaquer n Resposta: Num vetor : [ c 1 c 2... c n ] Mais gera: como usar vetores em Matab? 22 Março 2017 Vetores; cicos FOR 12
Vetores em Informática Um vetor é uma estrutura de dados que guarda um número pré-definido de dados do mesmo tipo. Um vetor corresponde a uma sequência de posições de memória. A sequência tem um comprimento fixo. Acede-se a uma posição do vetor através de um índice, que é um inteiro positivo (1, 2,..., comprimento ). V: -5 18 8-3.5-5 0 9 1 2 3 4 5 6 7 22 Março 2017 Vetores; cicos FOR 13
Vetores Criação Sintaxe: [ ista de vaores ] Os vaores na ista podem ser separados por vírguas V: -5 18 8-3.5-5 0 9 1 2 3 4 5 6 7 [-5, 18, 8, -3.5, -5, 0, 9]... ou por espaços [-5 18 8-3.5-5 0 9] Normamente, o vetor é atribuído a uma variáve quando é criado (o nome da variáve é o nome do vetor) V = [-5 18 8-3.5-5 0 9] 22 Março 2017 Vetores; cicos FOR 14
Vetores Acesso a uma posição Os eementos do vetor podem ser acedidos individuamente Sintaxe: nomevetor( expressão ) O vaor da expressão deve ser um inteiro positivo, inferior ou igua ao comprimento do vetor. A função ength permite obter o comprimento de um vetor Exempos: >> V = [-5, 18, 8, -3.5, -5, 0, 9]; >> V(3) ans = 8 >> ength(v) ans = 7 >> 22 Março 2017 Vetores; cicos FOR 15
Vetores Acesso a uma posição Os acessos podem ser feitos não só para para eitura dos eementos de um vetor, mas também para atribuição de novos vaores a esses eementos Exempos: >> V = [-5, 18, 8, -3.5, -5, 0, 9] -5 18 8-3.5-5 0 9 >> V(6) = 2-5 18 8-3.5-5 2 9 >> p = 1; >> V(p+2) = V( ength(v) ) % A posição 3 fica com 9. -5 18 9-3.5-5 2 9 >> V(p) = V(p+4)^2; % A posição 1 fica com 25. >> V(1) ans = 25 >> 22 Março 2017 Vetores; cicos FOR 16
Vetores Erros Típico de Acesso Quando o índice indicado não é um inteiro positivo, inferior ou igua ao comprimento do vetor, o interpretador reporta um erro. Exempos: >> V(20) % indice maior que o comprimento??? error: A(I): index out of bounds; vaue 20 out of bound 7 >> V(-4) % indice negativo??? error: subscript indices must be either positive integers ess than 2^31 or ogicas >> V(sqrt(2)) % indice não inteiro??? error: subscript indices must be either positive integers ess than 2^31 or ogicas 22 Março 2017 Vetores; cicos FOR 17
Vetores Erros Típico de Acesso Quando o índice indicado não é um inteiro positivo, inferior ou igua ao comprimento do vetor, o interpretador reporta um erro. Exempos: Em Matab, apesar de não ser possíve er um eemento de uma posição de um vetor que não esteja definida, é possíve fazer crescer um vetor e escrever um eemento numa posição ainda não definida. Em Matab, são assim váidas as atribuições da forma: V(pos) = vaor, com pos > ength(v). 22 Março 2017 Vetores; cicos FOR 18
Matab Escrita numa posição Dada uma atribuição V(pos) = vaor (pos > ength(v)) o Matab 1. Cria um novo vetor com comprimento pos. 2. Copia os eementos de V para esse novo vetor, preservando as suas posições. 3. Escreve o vaor na posição pos. 4. Escreve zero nas posições {ength(v)+1,..., pos 1} do novo vetor. 5. O vetor V é destruído. 6. O novo vetor passa a chamar-se V. 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 19
REGRA DE PROGRAMAÇÃO O código deve ser eficiente. Os vetores devem ser criados com o comprimento máximo necessário, para que não se escreva numa posição inexistente (o que obriga a refazer o vetor) Todas as exceções à regra anterior têm de ser muito bem justificadas. Para esse efeito podem ser usadas funções predefinidas para a criação de vetores com o comprimento desejado. 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 20
Vetores Funções de criação V = zeros(1, nºposições) V é um vetor com comprimento nºposições, com zero em todas as posições. V = ones(1, nºposições) V é um vetor com comprimento nºposições, com um em todas as posições. 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 21
Sequências de números [1] Sequências de inteiros podem ser representadas de forma mais compacta: Exempo: 2, 3, 4, 5 pode ser representada por: 2:5 Em Matab, uma sequência é um vetor, e pode ser definida compactamente com a seguinte Sintaxe: primeiroeemento : útimoeempossíve; ou primeiroeemento : passo : útimoeempossíve O vetor é constituído por todos os vaores da série aritmética, com razão igua ao passo começada peo primeiroeemento e cujo útimo eemento não utrapasse o útimoeempossíve. 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 22
Sequências de números [1] Exempos: >> 1:5 % caso mais comum com passo = 1 ans = 1 2 3 4 5 >> 1:2:9 % passo maior que 1 ans = 1 3 5 7 9 >> 1:1.5:7 % passo não inteiro (eementos não inteiros) ans = 1.0 2.5 4.0 5.5 7.0 >> 1:2:6 % utimo eemento não atinge o imite ans = 1 3 5 >> 12:-2:6 % passo negativo ans = 12 10 8 6 >> 12:-2:-3 % igua mas utimo eemento não atinge o imite ans = 12 10 8 6 4 2 0-2 >> 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 23
Vetores Acesso & criação Em Matab, um sub-vetor pode ser obtido de outro através de um terceiro vetor usado para indexar o anterior. Em particuar, é muito comum usarem-se sequências para indexação de vetores Nota: O identificador end representa até ao fim no respectivo contexto >> V = 11:2:24 % criacao de vetor V = 11 13 15 17 19 21 23 >> V(3:5) % indexacao por vetor/sequencia ans = 15 17 19 >> V(5:end) % indexacao por vetor/sequencia ans = 19 21 23 >> I = [1,4,6]; X = V(I) % vetor de indices >> X = 11 17 21 >> 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 24
Questão 1 Como é que se guarda um número (finito mas) arbitrário de vaores (do mesmo tipo)? No probema: os reais c 1,..., c n, para quaquer n Resposta: Num vetor : [ c 1 c 2... c n ] A soução do probema será impementada pea função function res = media( vaores )! em que o parâmetro vaores receberá um vetor como argumento 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 25
Na aua de hoje Vetores. Cicos FOR. Percursos em vetores. Exempos 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 26
Impementação Que questões? Como é que se pode executar uma instrução um número arbitrário (mas finito) de vezes? No probema: a atribuição no cácuo de um somatório, para quaquer n. n v i = v 1 + v 2 +...+ v n i=1 Ideia base: impementa-se uma soma de n parceas como uma sequência de n somas de duas parceas, usando-se sempre o resutado anterior. 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 27
Impementação Que questões? n v i = v 1 + v 2 +...+ v n i=1 soma = 0 soma = soma + v1 % soma tem v1 soma = soma + v2 % soma tem (v1) + v2 soma = soma + v3 % soma tem (v1+v2) + v3 etc 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 28
Cico FOR Sintaxe: for variáve = sequência... instruções end Operacionamente: Se a variáve não existe, é criada. Para cada eemento E da sequência (pea ordem por que os eementos ocorrem): 1. variáve = E; 2. executam-se as instruções. 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 29
Cico FOR Exempo [1] Exempos: >> V = [4 9 8, 2, 5] >> for i = 1:4 i end % mostra os indices i = 1 i = 2 i = 3 i = 4 >> for i = [1,4,2] V(i) end % mostra os vaores de V ans = 4 ans = 2 ans = 9 >> 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 30
Cico FOR Exempo [2] Exempos: Cácuo de somas (e produtos) de vetores >> V = [4 9 8, 2, 5] >> soma = 0, for i = 1:3 soma = soma + V(i) end soma = 0 soma = 0 soma = 4 soma = soma + v1 % soma tem v1 soma = 13 soma = soma + v2 % soma tem (v1) + v2 soma = 21 soma = soma + v3 % soma tem (v1+v2) + v3 >> 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 31
Cico FOR Exempo [2] Exempos: Cácuo de somas (e produtos) de vetores >> V = [4 9 8, 2, 5] >> prod = 1, for i = 1:ength(V) prod = prod * V(i) end prod = 1 prod = 1 prod = 4 prod = prod * v1 % prod tem v1 prod = 36 prod = prod * v2 % prod tem (v1) * v2 prod = 288 prod = prod * v3 % prod tem (v1*v2) * v3 prod = 576 etc prod = 2880 >> soma = 0; for i = 1:ength(V) soma = soma + V(i); end >> soma soma = 28 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 32
Função Média Exempo: Definição da função média function res = media( vaores )! % res = media(vaores)! % Cacua a media dos eementos do vetor vaores.! end! soma = 0;! n = ength(vaores)! for i = 1 : n! end! soma = soma + vaores(i);! res = soma / n;! 1 n n v i i=1 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 33
Função Média Geométrica Exempo: Definição da função média geométrica function res = media_geometrica( vaores )! % res = media(vaores)! % Cacua a media geometrica dos eementos! % do vetor vaores.! end! prod = 1;! n = ength(vaores)! for i = 1 : n! prod = prod * vaores(i);! end! res = prod ^ (1/n);! n i=1 V(i) 1 n 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 34
Função Média % res = media(vaores) % Cacua a media dos eementos do vetor vaores. function res = media( vaores ) end soma = 0; for i = 1 : ength(vaores) end soma = soma + vaores(i); res = soma / ength(vaores); i vaores(i) soma (antes) 1 5 0 2 3 3 7 n 6 1 n n i=1 v i soma (depois) 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 35
Função Média % res = media(vaores) % Cacua a media dos eementos do vetor vaores. function res = media( vaores ) end soma = 0; for i = 1 : ength(vaores) end soma = soma + vaores(i); res = soma / ength(vaores); i vaores(i) soma (antes) soma (depois) 1 5 0 5 3 7 n 6 1 n n i=1 v i 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 36
Função Média % res = media(vaores) % Cacua a media dos eementos do vetor vaores. function res = media( vaores ) end soma = 0; for i = 1 : ength(vaores) end soma = soma + vaores(i); res = soma / ength(vaores); i vaores(i) soma (antes) soma (depois) 1 5 0 5 2 3 5 7 n 6 1 n n i=1 v i 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 37
Função Média % res = media(vaores) % Cacua a media dos eementos do vetor vaores. function res = media( vaores ) end soma = 0; for i = 1 : ength(vaores) end soma = soma + vaores(i); res = soma / ength(vaores); i vaores(i) soma (antes) soma (depois) 1 5 0 5 2 3 5 8 7 n 6 1 n n i=1 v i 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 38
Função Média % res = media(vaores) % Cacua a media dos eementos do vetor vaores. function res = media( vaores ) end soma = 0; for i = 1 : ength(vaores) end soma = soma + vaores(i); res = soma / ength(vaores); i vaores(i) soma (antes) 1 n n i=1 soma (depois) 1 5 0 5 2 3 5 8 v i 3 7 8 15 n 6 999 1005 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 39
Média Exempos de execução Aguns exempos de execução da função media O que acontece quando o vetor é vazio??? >> V = [4 9 8, 2, 5] >> m = media(v) m = 5.6 >> X = [4] X = 4 >> m = media(x) m = 4 >> Z = [] >> m = media(z) warning: division by zero m = NaN 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 40
Probema dos Contaminantes (2) Em gera a média de um conjunto de vaores não nos fornece toda a informação úti para descrever esse conjunto. Nomeadamente não nos dá ideia da variabiidade dos vaores do conjunto A média de 0 e 10 é a mesma de 5 e 5, mas a útima é equiibrada. Para medir a variação é vugar utiizar-se o desvio padrão, e portanto pode reformuar-se o probema anterior para:...faça um programa para cacuar a média e o desvio padrão daquees vaores. 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 41
Probema dos Contaminantes (2) Este probema mais compexo é naturamente decomposto em dois subprobemas: Cácuo da média já feito Cácuo do desvio padrão a impementar tendo em conta a sua definição σ = Nota-se imediatamente que para este cácuo é conveniente dispor da média do vetor V, µ. n (V(i) µ) i=1 n 2 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 42
Probema dos Contaminantes (2) Vamos pois resover este probema com 3 funções com assinaturas function res = estatistica(v) function res = media (V)! function res = desviopadrao(v, med)! sendo a primeira função impementada a partir das duas útimas. A função média já foi definida, peo que podemos passar para a impementação do função desviopadrao, que é muito semehante 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 43
Função Desvio Padrão Exempo: Definição da função desvio padrão function res = desviopadrao(v, med)! % res = desviopadrao(v, med)! % Cacua o desvio padrao de um vetor! % dada a sua media, med.! n num = 0;! n = ength(v)! σ = for i = 1 : n! num = num +(V(i)-med)^2;! end! res = sqrt(num / n);! end! (V(i) µ) i=1 n 2 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 44
Probema da Cerâmica (2) FIM Uma vez impementadas as funções mais simpes, a função estatística é impementada através da combinação das outras. function res = estatistica(v)! % [med,dvp] = estatistica(v, med)! % Cacua a media e o desvio padrao do vetor V! med = media(v);! dvp = desviopadrao(v,med)! end! res = [med,dvp]! De notar que o resutado desta função é um vetor, já que a função retorna dois vaores (a média e o desvio padrão). 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 45
Na aua de hoje Vetores. Cicos FOR. Percursos em vetores. Exempos 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 46
Função Quadrado de um Vetor A função que cacua o quadrado de um vetor pode ser impementada percorrendo os seus eementos num cico FOR function U = quadrado(v)! % U = quadrado(v)! % U é o vetor como o quadrado dos eementos de V! n = ength(v);!!u = zeros(1,n);! for i = 1:ength(V)! U(i) = V(i)^2;! end! end! Nota: Para evitar a criação de n vetores U, o vetor deve ser iniciaizado com a função zeros (ou ones) 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 47
Média Exempos de execução De notar que as variáveis n e U são ocais e desaparecem após a execução da função. >> V = [4 9 8] >> quadrado(v) ans = 16 81 64 >> U error: 'U' undefined near ine 1 coumn 1 >> Q = quadrado(v) Q = 16 81 64 >> V V = 4 9 8 >> V = quadrado(v) V = 16 81 64 function U = quadrado(v)! n = ength(v);!!u = zeros(1,n);! for i = 1:ength(V)! U(i) = V(i)^2;! end! end! 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 48
Vetor Fibonacci Os eementos da série de Fibonacci 0, 1, 1, 2, 3, 5, 8,... são definidos como a soma dos 2 anteriores. Desta forma a construção de um vetor de Fibonacci com n eementos (n 2) pode ser construido a partir da função function F = fibonaccivetor(n)! % F = fibonaccivetor(n)! % O vetor F contem os primeiros n eementos da! % série de Fibonacci! F = zeros(1,n);! F(2) = 1;! for i = 3:n! F(i) = F(i-2) + F(i-1);! end! end! 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 49
Fibonacci Exempos de execução >> Fn = fibonnacivetor(5) F = 0 0 0 0 0 F = 0 1 0 0 0 F = 0 1 1 0 0 F = 0 1 1 2 0 F = 0 1 1 2 3 Fn = 0 1 1 2 3 >> Fn Fn = 0 1 1 2 3 >> F F = zeros(1,n)! F(2) = 1! for i = 3:n! F(i) = F(i-2) + F(i-1)! end! error: F' undefined near ine 1 coumn 1 >> 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 50
Vetor Fibonacci De notar que uma função semehante cacuar o n-ésimo eemento de Fibonacci sem necessitar do vetor. Mas neste caso, terão de ser usadas variáveis auxiiares que se vão actuaizando ao ongo do cico FOR (como as usadas nas práticas) function fn = fibonaccieem(n)! % F = fibonaccieem(n)! % fn é o n-esimo eementos da série de Fibonacci! fantant = 0! fant = 1! for i = 3:n! fn = fant+fantant! fantant = fant! fant = fn! end! end! 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 51
Fibonacci Exempos de execução >> f5 = fibonnacieem(5) fantant = 0! fant = 1! fn = 1 fantant = 1! fant = 1! fn = 2 fantant = 1! fant = 2! fn = 3 fantant = 2! fant = 3! f5 = 3! >> fn! error: fn' undefined near ine 1 coumn 1 >>!! fantant = 0! fant = 1! for i = 3:n! fn = fant+fantant! fantant = Fant! fant = fn! end! 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 52
Inversão de uma String Em Matab, uma string é impementada através de um vetor de carateres, em que cada caracter é representado peo seu código (ASCII ou UTF). Apesar de haver várias funções pré-definidas para strings que serão abordadas mais à frente, podemos usar a matéria de cicos FOR e vetores para inverter uma string (escrevê-a de trás para a frente ). Para esse efeito poderemos escrever como anteriormente uma função com assinatura function inv = inverter(str)! 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 53
Inversão de uma String A sua impementação com um cico for é semehante à anterior Notar que a string invertida é iniciaizada com a função banks, semehante às funções zeros e ones, mas que cria um vetor de caracteres espaço. function inv = inverte(str)! % inv = inverte(str)! % A string inv é a inversão da string str! n = ength(str);! inv = banks(n)! for i = 1:n! inv(i) = str(n-i+1) % indice compementar! end % 1<- n; 2<- n-1 ;... ; n<- 1! end! 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 54
Inversão de uma String Ta como anteriormente poderemos testar esta função (de uma forma não exaustiva) >> inverte( abcd ) inv =! inv = d! inv = dc inv = dcb! inv = dcba! ans = dcba >> inv inv = banks(n)! for i = 1:n! inv(i) = str(n-i+1)! end! error: inv' undefined near ine 1 coumn 1 >> s = abcd >> s = inverte(s) s = dcba >>!! 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 55
Inversão de uma String De notar que a utiização de indexação apropriada num vetor, neste caso numa string, permite inverter uma string numa só instrução, eeiminando-se a necessidade de usar uma função. >> str = abcd str = abcd >> n = ength(str) n = 4 >> inv = str(n:-1:1)! inv = dcba >>!!!?!? 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 56
Para Estudar a Aua de Hoje Recomendado Physica Modeing in MATLAB Capítuos 3 e 4 Opciona Manua do Octave Capítuo 4.1 Matrizes Vetores são matrizes (matéria das próximas auas) Capítuo 4.2 e 10.5 20 Março 2017 ICE-c Aua 3: Vetores; cicos FOR 57