• Nenhum resultado encontrado

Informática para Ciências e Engenharias (B) 2015/16. Teórica 3

N/A
N/A
Protected

Academic year: 2021

Share "Informática para Ciências e Engenharias (B) 2015/16. Teórica 3"

Copied!
72
0
0

Texto

(1)

Informática para Ciências e

Engenharias (B)


(2)
(3)

Ciclo For

(4)

Ciclo For

•  Instrução muito útil se precisarmos de repetir algo um número conhecido de vezes

conhecido na altura em que o código for executado, não necessariamente quando o código é escrito.

(5)

Ciclo For

•  Sintaxe mais geral

for var = vector ...

(corpo do for) ...

end

(6)

Vectores

l  um vector é uma estrutura de dados que guarda um número

pré-definido de valores do mesmo tipo.

l  corresponde a uma sequência de posições de memória,

o comprimento do vector é fixo.

l  acede-se a cada posição do vector indicando o índice desse

elemento

(7)

Criação de Vectores

l  Criação de um vector

Opção 1:

•  enumerar os elementos, separados por vírgula ou espaço, entre parênteses rectos

octave:40> v = [1, 3, 8, -6, -9] v =

(8)

Criação de Vectores

l  Criação de um vector

Opção 1:

•  enumerar os elementos, separados por vírgula ou espaço, entre parênteses rectos

octave:40> v = [1, 3, 8, -6, -9] v =

(9)

Criação de Vectores

l  Criação de um vector

Opção 1:

•  enumerar os elementos, separados por vírgula ou espaço, entre parênteses rectos

octave:40> v = [1, 3, 8, -6, -9] v =

(10)

Criação de Vectores

l  Criação de um vector

Opção 1:

•  enumerar os elementos, separados por vírgula ou espaço, entre parênteses rectos

octave:40> v = [1, 3, 8, -6, -9] v =

(11)

Criação de Vectores

l  Criação de um vector

Opção 2:

•  indicar uma sequência com:

•  início : passo : fim

(12)

Criação de Vectores

l  Criação de um vector

Opção 2:

•  Nota 1: o passo é opcional (por omissão vale 1)

•  Nota 2: o valores podem ser reais

octave:7> v2 = 1:5

v2 = 1 2 3 4 5

octave:6> v6=0:pi/3:pi v6 =

(13)

Acesso a Vectores

l  Aceder a elementos de um vector

indicar o índice do elemento entre parênteses curvos

•  v(3)

o índice tem de ser um inteiro entre 1 e o comprimento do vector

(14)
(15)

Acesso a Vectores

l  Exemplo:

v =

1 3 8 20 -9 octave:44> v(12)

error: A(I): index out of bounds; value 12 out of bound 5

octave:44> v(length(v))

ans = -9

octave:45> v(end)

(16)

Acesso a Vectores

l  Aceder a elementos de um vector

indicar o índice do elemento entre parênteses

indicar vários índices como vector

•  v([1,2,5])

•  v(3:length(v))

•  v(3:end)

•  quando usada para indexar elementos de um vector, o end corresponde ao índice do último (ao

(17)
(18)

Ciclo For

l  Sintaxe mais geral

A variável toma, a cada iteração, o valor do elemento correspondente do vector

l  O vector pode ser criado/referido de várias formas:

• 

1:N % criado

• 

vec % referido

• 

3:length(vec)-1 % criado (e restringido)

for var = vector ...

(19)
(20)

Acesso a Vectores

l  Exemplo:

Fazer algo 5 vezes (escrever um texto)

•  não é preciso usar a variável do ciclo dentro do ciclo.

(21)

Acesso a Vectores

l  Exemplo:

Substituir todos os caracteres de s por *

•  uma string é um vector de caracteres

•  length(v) devolve o comprimento de v

•  1:length(v) cria vector [1, 2, 3, … length(v)]

(22)
(23)

Fibonacci

l  Obter uma sequência de Fibonacci (os primeiros n termos)

(24)

Fibonacci

l  Várias repetições do mesmo código

(25)

Fibonacci

l  Esta repetição pode ser feita com um ciclo

(26)

Fibonacci

l  Esta repetição pode ser feita com um ciclo

(27)

Fibonacci

l  Esta repetição pode ser feita com um ciclo

Mais vale prevenir para o caso N < 2!

em geral, convém garantir que a variável com o valor a devolver é sempre bem definida,

(28)

Inverter uma String

Exemplo 2:

(29)

Inverter uma String

l  Criar uma função, inverte, que

recebe uma string

devolve a string escrita do fim para o princípio

(30)

Inverter uma String

l  Em MATLAB as strings são vectores de (códigos de)

caracteres.

na função inverte nada obriga a que seja uma string octave:23> inverte([1,2,3,4,5])

ans =

(31)

Inverter uma String

l  Dimensionar o vector

em MATLAB, o interpretador dimensiona o vector automaticamente

Mas cada vez que o faz tem de

•  reservar novo espaço em memória •  copiar o conteúdo do original

Não convém fazer muitas vezes, se evitável

octave:22> vec(5)=12 vec =

(32)

Inverter uma String

l  Dimensionar o vector

Se soubermos qual o tamanho final, o melhor é reservar inicialmente a memória necessária

•  blanks(N) string com N espaços

•  zeros(1,M) vector (1 linha) com M zeros •  ones(1,M) vector (1 linha) com M uns

No nosso exemplo, podemos usar

(33)

Inverter uma String

l  Implementação (opção 1)

Obter os elementos da string 1 a 1

Obter os índices da string inversa a partir dos da inicial

(34)

Inverter uma String

l  Forma mais simples de inverter

(35)

Inverter uma String

l  Forma mais simples de inverter (opção 2)

para inverter podemos pedir os elementos desde o último ao primeiro

octave:27> s='gnirts amu retrevnI' s = gnirts amu retrevnI

(36)

Inverter uma String

l  Forma mais simples de inverter (opção 2)

para inverter podemos pedir os elementos desde o último ao primeiro

podemos usar a variável end dentro dos parênteses para indicar o último índice do vector.

octave:27> s='gnirts amu retrevnI' s = gnirts amu retrevnI

octave:28> s(end:-1:1)

(37)

Quadrado dum Vector

Exemplo 3:

(38)

Quadrado dum Vector

l  Queremos uma função que recebe um vector e devolve um

vector com os quadrados dos elementos do argumento

function res = quadrado(vec)

l  Precisamos

dimensionar res

ciclo de um até ao comprimento de res

(39)

Quadrado dum Vector

l  Pode ser implementada desta forma ?

l  O que está errado?

a variável vec é local, e

(40)

Quadrado dum Vector

l  O erro anterior pode ser corrigido?

a variável res é declarada localmente; mas agora

(41)

Quadrado dum Vector

l  Mas mais prático assim

a variável vec, “passada” para a saída da função,

(42)

Quadrado dum Vector

l  A função pode ser testada, na forma habitual (texto)

l  Ou, em alternativa, através do seu aspecto gráfico

(43)

Quadrado dum Vector

l  Nota: Gráficos em MATLAB serão abordados mais tarde octave:45> x=-1:0.1:1;

(44)

Média e Desvio Padrão

Estatísticas:

(45)

Problema

Problema: O vector contaminantes contém a concentração medida de Pb num rio, em ppb, em 50 amostras

l  Qual a média e desvio padrão dos valores?

Questões:

•  Como calcular os dois valores numa função? •  Como fazer essa função devolver 2 valores?

(46)

Problema

l  Objectivo mais geral: programa que

recebe um vector com N valores •  (assumimos que N>1)

devolve média e desvio padrão •  dois valores reais

Como devolver os 2 valores?

function res = nome (arg1, arg2, … )

(47)

Problema

l  Decompor o problema

Três tarefas, três funções

•  calcular a média do vector

•  calcular o desvio padrão do vector

(48)

Problema

l  Perceber, abstrair e generalizar

média de um vector

desvio padrão de um vector •  precisamos da média

d.p. da amostra

(49)

Média e Desvio Padrão

l  Primeira abordagem

function aMedia = media(vec) function desviopad =(vec)

function [aMedia,dPad] = mediadp(vec)

usa media(vec) para calcular a média

usa desviopad(vec) para calcular o desvio padrão

Utiliza as duas funções em mediadp(vec)

(50)

Média e Desvio Padrão

l  Para evitar repetir cálculos

function aMedia = media(vec)

function dPad = desviopadaux(vec, aMedia)

desviopadaux recebe a média previamente calculada

não é genérica; noutros casos não é útil dar a média. •  O sufixo “aux” é usado para identifcar isto.

function [aMedia,desvPad] = mediadp(vec)

usa media(vec) para calcular a média

(51)

Média

function aMedia = media(vec)

somar todos os elementos de vec

(52)

Média

function aMedia = media(vec)

somar todos os elementos de vec num ciclo for var = 1:length(vec)

• 

somar vec(f) ???

ou, melhor,

for var = vec e somar f.

Mas somar onde?

•  noutra variável, começando a zero

(53)

Média

(54)

Média

function aMedia = media(vec)

A variável do ciclo, umValor, adopta sequencialmente o valor de cada elemento de vec.

Em alternativa, podia identificar-se esse valor pelo seu índice for j = 1:length(vec)

… umVal = vec(j) … end

for umVal = vec … umVal …

(55)

Média

function aMedia = media(vec)

A função deve ser testada individualmente (testes unitários)

octave:26> media([1,2,3,4,5]) ans = 3

(56)

Desvio Padrão

function desviopadaux.m

(57)

Desvio Padrão

function desviopadaux(vec, amedia)

A função deve ser testada individualmente (testes unitários)

Deveriam ser feitos mais testes. Quais? octave:7> vtest = ones(1,6)

vtest =

1 1 1 1 1 1

octave:8> med = media(vtest) med = 1

(58)

Média e Desvio Padrão

l  As duas funções anteriores podem agora ser combinadas na

função

function [amedia, desvPad] = mediadp(vec)

(59)

Média e Desvio Padrão

l  Alguns testes unitários podem ser feitos

octave:13> vtest = ones(1,6) vtest =

1 1 1 1 1 1

octave:14> [med,dp] = mediadp(vtest) med = 1

dp = 0

(60)

Média e Desvio Padrão

l  Alguns testes unitários podem ser feitos (cont.)

octave:17> vtest = [1, 2, 3] vtest =

1 2 3

octave:18> [med,dp] = mediadp(vtest) med = 2

dp = 1

(61)

Média e Desvio Padrão

l  Um teste mais complexo (a partir de uma vector amostras)

(62)

Média e Desvio Padrão

l  Um teste mais complexo (a partir de uma vector amostras)

Nota: para receber ambos os valores é preciso fornecer duas variáveis

octave:25> mediadp(amostras) ans = 7.1556

octave:24> [med,dp] = mediadp(amostras) med = 7.1556

(63)

Média e Desvio Padrão

l  Na implementação anterior, o cálculo do desvio padrão é feito numa

função auxiliar.

l  Mas poderia ser feito numa variante pública:

desviopad(vec)

(64)

Resumo

l  Funções que devolvem vários valores

têm de ser chamadas com variáveis suficientes para todos os valores

function [a,b,c …] = nome( arg1, arg2, … )

ou então só recebemos os primeiros n [x,y] = nome(v1, v2, v3 …) nome(v1, v2, v3 …)

(65)

Resumo

l  Ciclos for

a variável do ciclo toma, por ordem, o valor de cada elemento do vector

•  numérico, string, etc

o corpo do ciclo é repetido para cada valor

for variavel = vector (corpo)

(66)

Resumo

l  Ciclos for

se usamos o ciclo para preencher um vector devemos criar primeiro o vector com o tamanho certo

•  só é preciso dimensionar o vector em memória uma vez

(67)

Resumo

l  Vectores

podemos definir especificando cada elemento

•  v= [1,2,3]; s='abc'

ou pelo intervalo

•  v=1:30 s='a':'z'

podemos aceder a cada elemento ou conjunto de elementos especificando os índices como vector entre parênteses

•  v([1,3,4]) s(10:end)

(68)

Resumo

l  Decomposição de um problema

pensar nas várias tarefas

•  abstrair do problema concreto e generalizar

perceber o que têm de cumprir e como implementar

fazer o mesmo para cada tarefa complexa

(69)

Resumo

l  Decomposição de um problema

só implementar a função quando essa tarefa for suficientemente simples

só implementar a função quando for claro como se vai executar essa tarefa

•  só depois de saber a assinatura da função

(70)

Desafio: Cálculo da Massa Molecular

l  O que já sabemos fazer

operações, variáveis (números e strings)

funções, guardar e reutilizar código

decompor problemas

vectores (de números e de caracteres)

(71)

Para estudar a aula de hoje

l  Recomendado

Physical Modeling in MATLAB

• 

Capítulos 3 e 4

l  Opcional

Manual do Octave •  4.1 Matrizes

(72)

Referências

Documentos relacionados

M ATERIAIS RESTAURADORES DEFINITIVOS : RESINAS COMPOSTAS FOTOPOLIMERIZÁVEIS  Usadas para todas as classes de cavidades  Sistema de polimerização física-luz.  Compostas

Observe que os componentes estão em série, assim, calculando pela Lei de Kirchhoff das Tensões (LKT), obtemos a corrente no LED.. Dispondo apenas do amperímetro ideal

UDESC UDESC Camada de rede Camada de rede Tabela de rotas Protocolos de Roteamento Seleçao de caminho •RIP, OSPF, BGP Protocolo IP •convenções de endereçamento •Formato

Considerando o caso ótimo de rastreamento, onde apenas 1 atacante é encontrado, a análise dos filtros mostra que o Filtro de Bloom convencional em seu caso ótimo, onde

A folha adulta é de tamanho médio, orbicular, com cinco lóbulos; limbo verde-escuro, plano, bolhosidade elevada; página inferior com baixa densidade de pêlos

Ainda, em relação ao tempo total de contatos, foi medido o tempo de expressão do comportamento de “bri- ga”, expresso em porcentagem (Fig. Observa-se uma atividade

E perceberás, então, como o Cristo fustigado na cruz, que os teus mais acirrados perseguidores são apenas crianças de curto entendimento e de

A Coordenação do Programa de Ensino, Pesquisa e Extensão em Informação, Tecnologia e Inovação da UFSCar (ITI UFSCar) torna público a abertura das inscrições para o Processo