57
Informática para Ciências e Engenharias (B) 2016/17 Teórica 3

Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Informática para Ciências e Engenharias (B)

2016/17

Teórica 3

Page 2: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Na aula de hoje

22 Março 2017 Vetores; ciclos FOR 2

l  Vetores.

l  Ciclos FOR. •  Percursos em vetores.

l  Exemplos

Page 3: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Problema dos Contaminantes

l  Para avaliar a qualidade da água de um rio foi medida a concentração de Pb em 50 amostras.

c1, c2, c3, ... , c50

l  Problema: Desenvolver um programa para calcular a concentração média de Pb nas amostras.

22 Março 2017 Vetores; ciclos FOR 3

Page 4: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Resolução – Problema [1]

1.  Compreender totalmente o problema descrito no enunciado.

2.  Caracterizar o problema.

•  Problema: Cálculo de uma média.

•  Entrada: reais c1, ..., c50. •  Saída: a média de c1, ..., c50.

22 Março 2017 Vetores; ciclos FOR 4

µ =150

cii=1

50

Page 5: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Resolução – Problema [2]

3.  Generalizar o problema (sempre que possível)

•  Problema: Cálculo de uma média de n valores.

•  Entrada: reais c1, ..., cn (n ≥ 1) •  Saída: a média de c1, ..., cn.

22 Março 2017 Vetores; ciclos FOR 5

µ =1n

cii=1

n

Page 6: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Resolução – Algoritmo [1]

4.  Desenhar o algoritmo para resolver o problema.

a.  Conceber o algoritmo, decompondo o problema em sub-problemas (se necessário). •  Como calcular a média de c1, ..., cn?

•  Somando os “valores” c1, ..., cn e dividindo pelo seu número.

b.  Identificar, caracterizar e generalizar cada sub-problema. •  Não há sub-problemas.

22 Março 2017 Vetores; ciclos FOR 6

Page 7: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Resolução – Algoritmo [2]

c.  Conceber o algoritmo, assumindo que os sub-problemas estão resolvidos.

Média (c1, ..., cn) :

•  Ideia base: implementa-se uma soma de n parcelas

como uma sequência de n somas de duas parcelas, usando-se sempre o resultado anterior.

22 Março 2017 Vetores; ciclos FOR 7

µ =1n

cii=1

n

Page 8: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Resolução – Algoritmo [3]

l  Cálculo do somatório •  Exemplo para n = 5:

•  soma = 0 •  soma = soma + c1 % soma tem c1

•  soma = soma + c2 % soma tem (c1) + c2

•  soma = soma + c3 % soma tem (c1+c2) + c3 •  soma = soma + c4 % soma tem (c1+c2+c3) + c4 •  soma = soma + c5 % soma tem (c1+c2+c3+c2) + c5

22 Março 2017 Vetores; ciclos FOR 8

µ =1n

cii=1

n

Page 9: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Resolução – Programa

5.  Para cada sub-problema, desenhar o algoritmo para o resolver.

•  Não há sub-problemas.

6.  Para cada sub-problema (começando pelos mais simples), implementar o respetivo algoritmo e testar o “sub-programa”.

•  Não há sub-problemas.

7.  Implementar o algoritmo que resolve o problema e testar o programa pedido.

•  Média (c1, ..., cn)

22 Março 2017 Vetores; ciclos FOR 9

Page 10: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Implementação – Que questões?

l  Como é que se guarda um número (finito mas) arbitrário de valores (do mesmo tipo)? •  No problema: os reais c1, ..., cn, para qualquer n

l  Como é que se pode executar uma instrução um número

arbitrário (mas finito) de vezes? •  No problema: a atribuição no cálculo de um somatório,

para qualquer n.

22 Março 2017 Vetores; ciclos FOR 10

Page 11: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Na aula de hoje

l  Vetores.

l  Ciclos FOR. •  Percursos em vetores.

l  Exemplos

22 Março 2017 Vetores; ciclos FOR 11

Page 12: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Implementação – Que questões?

l  Como é que se guarda um número (finito mas) arbitrário de valores (do mesmo tipo)? •  No problema: os reais c1, ..., cn, para qualquer n

l  Resposta: Num vetor : [ c1 c2 . . . cn ]

l  Mais geral: como usar vetores em Matlab?

22 Março 2017 Vetores; ciclos FOR 12

Page 13: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Vetores em Informática

l  Um vetor é uma estrutura de dados que guarda um número pré-definido de dados do mesmo tipo.

l  Um vetor corresponde a uma sequência de posições de memória. A sequência tem um comprimento fixo.

l  Acede-se a uma posição do vetor através de um índice, que é um inteiro positivo (1, 2, ..., “comprimento”).

22 Março 2017 Vetores; ciclos FOR 13

V: -5 18 8 -3.5 -5 0 9 1 2 3 4 5 6 7

Page 14: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Vetores – Criação

l  Sintaxe: [ lista de valores ]

•  Os valores na lista podem ser separados por vírgulas [-5, 18, 8, -3.5, -5, 0, 9] •  ... ou por espaços

[-5 18 8 -3.5 -5 0 9] l  Normalmente, o vetor é atribuído a uma variável quando é

criado (o nome da variável é o “nome” do vetor) V = [-5 18 8 -3.5 -5 0 9]

22 Março 2017 Vetores; ciclos FOR 14

V: -5 18 8 -3.5 -5 0 9 1 2 3 4 5 6 7

Page 15: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Vetores – Acesso a uma posição

l  Os elementos do vetor podem ser acedidos individualmente •  Sintaxe: nomeVetor( expressão ) •  O valor da expressão deve ser um inteiro positivo, inferior

ou igual ao comprimento do vetor. •  A função length permite obter o comprimento de um vetor

Exemplos:

22 Março 2017 Vetores; ciclos FOR 15

>> V = [-5, 18, 8, -3.5, -5, 0, 9]; >> V(3) ans = 8 >> length(V) ans = 7 >>

Page 16: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Vetores – Acesso a uma posição

l  Os acessos podem ser feitos não só para para leitura dos elementos de um vetor, mas também para atribuição de novos valores a esses elementos

Exemplos:

22 Março 2017 Vetores; ciclos FOR 16

>> 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( length(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 >>

Page 17: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Vetores – Erros Típico de Acesso

l  Quando o índice indicado não é um inteiro positivo, inferior ou igual ao comprimento do vetor, o interpretador reporta um erro.

Exemplos:

22 Março 2017 Vetores; ciclos FOR 17

>> V(20) % indice maior que o comprimento ??? error: A(I): index out of bounds; value 20 out of bound 7 >> V(-4) % indice negativo ??? error: subscript indices must be either positive integers

less than 2^31 or logicals >> V(sqrt(2)) % indice não inteiro ??? error: subscript indices must be either positive integers

less than 2^31 or logicals

Page 18: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Vetores – Erros Típico de Acesso

l  Quando o índice indicado não é um inteiro positivo, inferior ou igual ao comprimento do vetor, o interpretador reporta um erro.

Exemplos:

l  Em Matlab, apesar de •  não ser possível ler um elemento de uma posição de um

vetor que não esteja definida, •  é possível fazer “crescer” um vetor e escrever um elemento

numa posição ainda não definida.

l  Em Matlab, são assim válidas as atribuições da forma: V(pos) = valor, com pos > length(V).

22 Março 2017 Vetores; ciclos FOR 18

Page 19: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Matlab – Escrita numa posição

l  Dada uma atribuição V(pos) = valor (pos > length(V)) o Matlab 1.  Cria um novo vetor com comprimento pos.

2.  Copia os elementos de V para esse novo vetor, preservando as suas posições.

3.  Escreve o valor na posição pos.

4.  Escreve zero nas posições {length(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 Aula 3: Vetores; ciclos FOR 19

Page 20: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

REGRA DE PROGRAMAÇÃO

l  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.

l  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 Aula 3: Vetores; ciclos FOR 20

Page 21: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Vetores – Funções de criação

l  V = zeros(1, nºPosições) •  V é um vetor com comprimento nºPosições, com zero em

todas as posições.

l  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 Aula 3: Vetores; ciclos FOR 21

Page 22: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Sequências de números [1]

l  Sequências de inteiros podem ser representadas de forma mais compacta:

•  Exemplo: 2, 3, 4, 5 pode ser representada por: 2:5

l  Em Matlab, uma sequência é um vetor, e pode ser definida compactamente com a seguinte

•  Sintaxe: primeiroElemento : últimoElemPossível; ou

primeiroElemento : passo : últimoElemPossível

•  O vetor é constituído por todos os valores da série aritmética, com razão igual ao passo começada pelo primeiroElemento e cujo último elemento não “ultrapasse” o últimoElemPossível.

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 22

Page 23: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Sequências de números [1]

l  Exemplos:

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 23

>> 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 (elementos não inteiros) ans = 1.0 2.5 4.0 5.5 7.0 >> 1:2:6 % ultimo elemento não atinge o limite ans = 1 3 5 >> 12:-2:6 % passo negativo ans = 12 10 8 6 >> 12:-2:-3 % igual mas ultimo elemento não atinge o limite ans = 12 10 8 6 4 2 0 -2 >>

Page 24: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Vetores – Acesso & criação

l  Em Matlab, um sub-vetor pode ser obtido de outro através de um terceiro vetor usado para indexar o anterior.

l  Em particular, é muito comum usarem-se sequências para indexação de vetores •  Nota: O identificador end representa “até ao fim” no respectivo contexto

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 24

>> 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 >>

Page 25: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Questão 1

l  Como é que se guarda um número (finito mas) arbitrário de valores (do mesmo tipo)? •  No problema: os reais c1, ..., cn, para qualquer n

l  Resposta: Num vetor : [ c1 c2 . . . cn ]

l  A solução do problema será implementada pela função

function res = media( valores ) !l  em que o parâmetro valores receberá um vetor como argumento

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 25

Page 26: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Na aula de hoje

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 26

l  Vetores.

l  Ciclos FOR. •  Percursos em vetores.

l  Exemplos

Page 27: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Implementação – Que questões?

l  Como é que se pode executar uma instrução um número arbitrário (mas finito) de vezes? •  No problema: a atribuição no cálculo de um somatório,

para qualquer n.

l  Ideia base: implementa-se uma soma de n parcelas como uma sequência de n somas de duas parcelas, usando-se sempre o resultado anterior.

vii=1

n

∑ = v1 + v2 + ...+ vn

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 27

Page 28: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Implementação – Que questões?

•  soma = 0

•  soma = soma + v1 % soma tem v1

•  soma = soma + v2 % soma tem (v1) + v2

•  soma = soma + v3 % soma tem (v1+v2) + v3

•  etc…

vii=1

n

∑ = v1 + v2 + ...+ vn

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 28

Page 29: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Ciclo FOR

l  Sintaxe: for variável = sequência ... instruções end

l  Operacionalmente: •  Se a variável não existe, é criada. •  Para cada elemento E da sequência (pela ordem por que

os elementos ocorrem): 1.  variável = E; 2.  executam-se as instruções.

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 29

Page 30: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Ciclo FOR – Exemplo [1]

l  Exemplos:

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 30

>> 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 valores de V ans = 4 ans = 2 ans = 9 >>

Page 31: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Ciclo FOR – Exemplo [2]

l  Exemplos: Cálculo de somas (e produtos) de vetores

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 31

>> V = [4 9 8, 2, 5] >> soma = 0, for i = 1:3 soma = soma + V(i) end soma = 0 soma = 4 soma = 13 soma = 21 >>

soma = 0 soma = soma + v1 % soma tem v1 soma = soma + v2 % soma tem (v1) + v2 soma = soma + v3 % soma tem (v1+v2) + v3

Page 32: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

l  Exemplos: Cálculo de somas (e produtos) de vetores

Ciclo FOR – Exemplo [2]

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 32

>> V = [4 9 8, 2, 5] >> prod = 1, for i = 1:length(V) prod = prod * V(i) end prod = 1 prod = 4 prod = 36 prod = 288 prod = 576 prod = 2880 >> soma = 0; for i = 1:length(V) soma = soma + V(i); end >> soma soma = 28

prod = 1 prod = prod * v1 % prod tem v1 prod = prod * v2 % prod tem (v1) * v2 prod = prod * v3 % prod tem (v1*v2) * v3 etc…

Page 33: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

l  Exemplo: Definição da função média

function res = media( valores )!% res = media(valores)!% Calcula a media dos elementos do vetor valores.! soma = 0;! n = length(valores)! for i = 1 : n! soma = soma + valores(i);! end! res = soma / n;!end!

Função Média

1n

vii=1

n

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 33

Page 34: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

l  Exemplo: Definição da função média geométrica

function res = media_geometrica( valores )!% res = media(valores)!% Calcula a media geometrica dos elementos !% do vetor valores.! prod = 1;! n = length(valores)! for i = 1 : n! prod = prod * valores(i);! end! res = prod ^ (1/n);!end!

Função Média Geométrica

V (i)i=1

n

∏⎛

⎝⎜

⎠⎟

1n

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 34

Page 35: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Função Média

% res = media(valores) % Calcula a media dos elementos do vetor valores. function res = media( valores ) soma = 0; for i = 1 : length(valores) soma = soma + valores(i); end res = soma / length(valores); end

1n

vii=1

n

i valores(i) soma (antes)

soma (depois)

1 5 0

2 3

3 7

… …

n 6

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 35

Page 36: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

% res = media(valores) % Calcula a media dos elementos do vetor valores. function res = media( valores ) soma = 0; for i = 1 : length(valores) soma = soma + valores(i); end res = soma / length(valores); end

Função Média

i valores(i) soma (antes)

soma (depois)

1 5 0 5

3

7

… …

n 6

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 36

1n

vii=1

n

Page 37: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

% res = media(valores) % Calcula a media dos elementos do vetor valores. function res = media( valores ) soma = 0; for i = 1 : length(valores) soma = soma + valores(i); end res = soma / length(valores); end

Função Média

i valores(i) soma (antes)

soma (depois)

1 5 0 5

2 3 5

7

… …

n 6

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 37

1n

vii=1

n

Page 38: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

% res = media(valores) % Calcula a media dos elementos do vetor valores. function res = media( valores ) soma = 0; for i = 1 : length(valores) soma = soma + valores(i); end res = soma / length(valores); end

Função Média

i valores(i) soma (antes)

soma (depois)

1 5 0 5

2 3 5 8

7

… …

n 6

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 38

1n

vii=1

n

Page 39: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

% res = media(valores) % Calcula a media dos elementos do vetor valores. function res = media( valores ) soma = 0; for i = 1 : length(valores) soma = soma + valores(i); end res = soma / length(valores); end

Função Média

i valores(i) soma (antes)

soma (depois)

1 5 0 5

2 3 5 8

3 7 8 15

… … …

n 6 999 1005

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 39

1n

vii=1

n

Page 40: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Média – Exemplos de execução

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 40

>> 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

l  Alguns exemplos de execução da função media •  O que acontece quando o vetor é vazio???

Page 41: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Problema dos Contaminantes (2)

l  Em geral a média de um conjunto de valores não nos fornece toda a informação útil para descrever esse conjunto.

l  Nomeadamente não nos dá ideia da variabilidade dos valores do conjunto •  A média de 0 e 10 é a mesma de 5 e 5, mas a última é

equilibrada.

l  Para medir a variação é vulgar utilizar-se o desvio padrão, e portanto pode reformular-se o problema anterior para:

l  ...Faça um programa para calcular a média e o desvio padrão daqueles valores.

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 41

Page 42: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Problema dos Contaminantes (2)

l  Este problema mais complexo é naturalmente decomposto em dois subproblemas:

•  Cálculo da média – já feito

•  Cálculo do desvio padrão – a implementar tendo em conta a sua definição

l  Nota-se imediatamente que para este cálculo é conveniente

dispor da média do vetor V, µ.

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 42

σ =2(V(i)−µ)

i=1

n

∑n

Page 43: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Problema dos Contaminantes (2)

l  Vamos pois resolver este problema com 3 funções com assinaturas function res = estatistica(V) function res = media (V)!

function res = desvioPadrao(V, med)!

sendo a primeira função implementada a partir das duas últimas.

l  A função média já foi definida, pelo que podemos passar para a implementação do função desvioPadrao, que é muito semelhante

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 43

Page 44: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

l  Exemplo: Definição da função desvio padrão

function res = desvioPadrao(V, med)!% res = desviopadrao(V, med)!% Calcula o desvio padrao de um vetor!% dada a sua media, med.! num = 0;! n = length(V)! for i = 1 : n! num = num +(V(i)-med)^2;! end! res = sqrt(num / n);!end!

Função Desvio Padrão

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 44

σ =2(V(i)−µ)

i=1

n

∑n

Page 45: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Problema da Cerâmica (2) – FIM

l  Uma vez implementadas as funções mais simples, a função estatística é implementada através da combinação das outras.

l  De notar que o resultado desta função é um vetor, já que a função

retorna dois valores (a média e o desvio padrão).

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 45

function res = estatistica(V)!% [med,dvp] = estatistica(V, med)!% Calcula a media e o desvio padrao do vetor V! med = media(V);! dvp = desvioPadrao(V,med)! res = [med,dvp] !end!

Page 46: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Na aula de hoje

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 46

l  Vetores.

l  Ciclos FOR. •  Percursos em vetores.

l  Exemplos

Page 47: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Função Quadrado de um Vetor

l  A função que calcula o quadrado de um vetor pode ser implementada percorrendo os seus elementos num ciclo FOR

l  Nota: Para evitar a criação de n vetores U, o vetor deve ser inicializado com a função zeros (ou ones)

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 47

function U = quadrado(V)!% U = quadrado(V)!% U é o vetor como o quadrado dos elementos de V! n = length(V);!

!U = zeros(1,n);! for i = 1:length(V)! U(i) = V(i)^2;! end!end!

Page 48: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

l  De notar que as variáveis n e U são locais e desaparecem após a execução da função.

Média – Exemplos de execução

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 48

>> V = [4 9 8] >> quadrado(V) ans = 16 81 64 >> U error: 'U' undefined near line 1 column 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 = length(V);!

!U = zeros(1,n);! for i = 1:length(V)! U(i) = V(i)^2;! end!end!

Page 49: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

l  Os elementos da série de Fibonacci 0, 1, 1, 2, 3, 5, 8, ... são definidos como a soma dos 2 anteriores.

l  Desta forma a construção de um vetor de Fibonacci com n elementos (n ≥ 2) pode ser construido a partir da função

Vetor Fibonacci

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 49

function F = fibonacciVetor(n)!% F = fibonacciVetor(n)!% O vetor F contem os primeiros n elementos 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!

Page 50: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Fibonacci – Exemplos de execução

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 50

>> 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 error: ’F' undefined near line 1 column 1 >>

F = zeros(1,n)! F(2) = 1! for i = 3:n! F(i) = F(i-2) + F(i-1)! end!

Page 51: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

l  De notar que uma função semelhante calcular o n-ésimo elemento de Fibonacci sem necessitar do vetor. •  Mas neste caso, terão de ser usadas variáveis auxiliares que se vão

actualizando ao longo do ciclo FOR (como as usadas nas práticas)

Vetor Fibonacci

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 51

function fn = fibonacciElem(n)!% F = fibonacciElem(n)!% fn é o n-esimo elementos da série de Fibonacci! fAntAnt = 0! fAnt = 1! for i = 3:n! fn = fAnt+fAntAnt! fAntAnt = fAnt! fAnt = fn! end!end!

Page 52: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

Fibonacci – Exemplos de execução

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 52

>> f5 = fibonnaciElem(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 line 1 column 1 >> !!

fAntAnt = 0! fAnt = 1! for i = 3:n! fn = fAnt+fAntAnt! fAntAnt = Fant! fAnt = fn! end!

Page 53: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

l  Em Matlab, uma string é implementada através de um vetor de carateres, em que cada caracter é representado pelo seu código (ASCII ou UTF).

l  Apesar de haver várias funções pré-definidas para strings que serão abordadas mais à frente, podemos usar a matéria de ciclos FOR e vetores para inverter uma string (escrevê-la “de trás para a frente”).

l  Para esse efeito poderemos escrever como anteriormente uma função com assinatura

function inv = inverter(str)!

Inversão de uma String

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 53

Page 54: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

l  A sua implementação com um ciclo for é semelhante à anterior •  Notar que a string invertida é inicializada com a função blanks,

semelhante às funções zeros e ones, mas que cria um vetor de caracteres “espaço”.

Inversão de uma String

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 54

function inv = inverte(str)!% inv = inverte(str)!% A string inv é a inversão da string str! n = length(str);! inv = blanks(n)! for i = 1:n! inv(i) = str(n-i+1) % indice complementar! end % 1<- n; 2<- n-1 ; ... ; n<- 1!end!

Page 55: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

l  Tal como anteriormente poderemos testar esta função (de uma forma não exaustiva)

Inversão de uma String

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 55

>> inverte(‘abcd’) inv = !inv = d!inv = dc inv = dcb!inv = dcba!ans = dcba >> inv error: ’inv' undefined near line 1 column 1 >> s = ‘abcd’ >> s = inverte(s) s = dcba >> !!

inv = blanks(n)! for i = 1:n! inv(i) = str(n-i+1)! end !

Page 56: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

l  De notar que a utilização de indexação apropriada num vetor, neste caso numa string, permite inverter uma string numa só instrução, eleiminando-se a necessidade de usar uma função.

Inversão de uma String

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 56

>> str = ‘abcd’ str = abcd >> n = length(str) n = 4 >> inv = str(n:-1:1)!inv = dcba >> !!

! ? ! ?

Page 57: Informática para Ciências e Engenharias (B) 2016/17iceb.ssdi.di.fct.unl.pt/1617/teoricas/T03/iceb_t03.pdf · 2017-03-22 · Vetores – Erros Típico de Acesso l Quando o índice

l  Recomendado •  Physical Modeling in MATLAB •  Capítulos 3 e 4

l  Opcional

•  Manual do Octave •  Capítulo 4.1 – Matrizes

•  Vetores são matrizes (matéria das próximas aulas) •  Capítulo 4.2 e 10.5

Para Estudar a Aula de Hoje

20 Março 2017 ICE-c Aula 3: Vetores; ciclos FOR 57