ludwig krippahl, 2009 programação para as ciências experimentais 2008/9 teórica 2

50
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Upload: internet

Post on 17-Apr-2015

102 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009

Programação para as Ciências Experimentais

2008/9

Teórica 2

Page 2: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 2

Na aula de hoje...

Strings: texto e caracteres Gráficos Algoritmos Scripts, Funções e Variáveis

Page 3: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 3

Strings (texto) Uma string é uma sequência de caracteres,

delimitada por aspas ou plicas.octave:67> a="string"a = stringoctave:68> b="outra string"b = outra stringoctave:69> c=stringerror: `string" undefined near line 69 column 3error: evaluating assignment expression near line

69, column 2

Page 4: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 4

Strings (texto)

Excepção para a regra de tamanho quando combinamos vectores:

octave:69> [a;b]

ans =

string

outra string

(linhas ajustadas acrescentando espaços)

Page 5: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 5

Strings (texto)

Excepção para a regra de tamanho quando combinamos vectores:

(linhas ajustadas acrescentando espaços)

octave:73> [[a;b]["-";"-"]]

ans =

string -

outra string-

Page 6: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 6

Funções para strings (experimentem) findstr(s,t) : Encontra todas as posições de da menor na

maior. split(s,t) : Divide uma string num vector (coluna) de

strings separadas por t strrep(s, x, y) : substitui todas as ocorrências de x por y

na string s str2num(s) : converte um número representado numa

string para um número tolower(s) / toupper(s) : converte uma string para

minúsculas/maiúsculas strcmp(s1,s2) : compara as strings s1 com s2, se forem

iguais retorna 1, se diferentes retorna 0

Page 7: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 7

Funções para strings (exemplos)

octave:74> findstr("a","abcababba")

ans =

1 4 6 9

octave:75> findstr("abcababba","a")

ans =

1 4 6 9

Page 8: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 8

Funções para strings (exemplos)

octave:76> split("um;dois;três;quatro",";")

ans =

um

dois

três

quatro

octave:77>

Page 9: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 9

Caracteres especiais

A barra \ serve para indicar caracteres especiais.

E.g.• \b -> backspace, apaga um caracter

• \t -> tab

• \n -> nova linha

• \\ -> para escrever a barra. Importante no cd. Só quando string com "..."

Page 10: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 10

Gráficos 2D

plot(x,y) (x e y vectores) hold on para não tirar gráfico

anterior clearplot apagar subplot(linha, coluna, indice)

Page 11: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 11

Gráficos 2D

Exemplo

x=-10:10;

plot(x,x.^3)

Page 12: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 12

Gráficos 2D

Exemplo

x=-10:10;

plot(x,x.^3)

Page 13: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 13

Gráficos 2D

Exemplo

x=-10:10;

subplot(2,1,1)

plot(x,x.^2)

Page 14: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 14

Gráficos 2D

Exemplo

x=-10:10;

subplot(2,1,1)

plot(x,x.^2)

subplot(2,1,2)

plot(x,100-x.^2)

Page 15: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 15

Algoritmos

Muhammad ibn Mūsā al-Khwārizmī “Compêndio do Cálculo por Completude

e Balanço.” “Cálculo com Numerais Hindu” Algoritmi de numero Indorum (sec. XII)

• Algoritmo

• Algarismo

http://en.wikipedia.org/wiki/Muhammad_ibn_Mūsā_al-Khwārizmī

Page 16: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 16

Algoritmo

Conjunto finito de instruções. No sentido estrito, operações sobre

símbolos (matemática, lógica, programas)

No sentido lato: receitas, procedimentos de emergência, etc...

http://en.wikipedia.org/wiki/Algorithm

Page 17: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 17

«Algoritmo» da torrada

Pegar no pão Se faca na bancada,

• Pegar na faca Caso contrário

• Ir buscar faca à gaveta Cortar fatia, pôr na torradeira, ligar Enquanto não está pronta

• Esperar

Page 18: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 18

Implementação Modular

Pegar no pão Se faca na bancada,

• Pegar na faca Caso contrário

• Ir buscar faca à gaveta Cortar fatia, pôr na torradeira, ligar Enquanto não está pronta

• Esperar

Page 19: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 19

Implementação Modular

Pegar no pão Pôr faca na mão Cortar fatia Pôr na torradeira, ligar Enquanto não está pronta

• Esperar

Page 20: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 20

Implementação Modular

Pegar no pão Pôr faca na mão Cortar fatia Pôr na torradeira, ligar Enquanto não está pronta

• Esperar

Page 21: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 21

Implementação Modular

Pegar no pão Pôr faca na mão Cortar fatia Torrada = Torradeira(Pão)

Procedimento

Função

Page 22: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 22

Programação

Resolver problemas complexos um problema simples de cada vez

Hierarquizar os problemas

Page 23: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 23

Programação

Procedimento• Mostrar valores no ecrã, gravar um ficheiro,

etc.

Função• Devolve um ou mais valores

Page 24: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 24

Implementação Modular

Pegar no pão Pôr faca na mão Cortar fatia Torrada = Torradeira(Pão)

Como fazer no Octave...

Procedimento

Função

Page 25: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 25

Implementação Modular

Script• Conjunto de instruções guardado num

ficheiro

• Ficheiro tem nome.m

• Quando Octave recebe um nome, se não é variável procura o ficheiro

Page 26: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 26

Implementação Modular

Mudar para a pasta de trabalho:(exemplos, confirmar no laboratório)

cd "c:\\documents and settings\\temp\\my documents"

cd 'c:\documents and settings\temp\my documents‘

Correr o editor: edit Gravar o ficheiro: teste.m Gravar antes de correr no Octave

Page 27: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 27

Implementação Modular

Script

(no teste.m)

a=2

(no Octave)

octave:13> a=4a = 4octave:14> testea = 2octave:15> aa = 2

Page 28: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 28

Implementação Modular

Script• Útil para guardar um pequeno programa

reutilizável, mas não é um módulo independente.

• As variáveis no script são as mesmas que fora do script.

Page 29: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 29

Implementação Modular

Exemplo conc.m

mmNaCl=58.4

v=0.125

q=2/mmNaCl

c=q/v

Page 30: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 30

Implementação Modular

Melhorias

mmNaCl=58.4;

v=input("digite o volume em dm3\n")

q=2/mmNaCl;

c=q/v;

disp("a concentração é")

disp(c)

Page 31: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 31

Implementação Modular

Procedimentos e funções:• Procedimento não devolve valores

• Função devolve valores.

• Mas no Octave é tudo function, vamos chamar função a ambos.

Page 32: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 32

Implementação Modular

Function• As variáveis são locais e independentes.

definir uma função

function igualdoisa=2endfunction

(no Octave)

octave:13> a=4a = 4octave:14> igualdoisa = 2octave:15> aa = 4

Page 33: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 33

Implementação Modular

Function• As variáveis são locais e independentes.

(num ficheiro igualdois.m)

function igualdoisa=2endfunction

(no Octave)

octave:13> a=4a = 4octave:14> iguadoisa = 2octave:15> aa = 4

Mesmo nome que o ficheiro

Page 34: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 34

Implementação Modular

Function• As variáveis são locais e independentes.

function igualdoisa=2endfunction

A variável a da função só existe dentro da função

Page 35: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 35

Implementação Modular

Mas queremos uma torradeira:• Torrada = Torradeira (Pão)

• Tem que receber e devolver valores.

(no soma.m)

function res=soma(a,b) res=a+bendfunction

(no Octave)

octave:16> soma(2,5)res = 7ans = 7octave:17>

Page 36: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 36

Implementação Modular

function res=soma(a,b)

res=a+b

endfunctionArgumentos da função

Page 37: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 37

Implementação Modular

function res=soma(a,b)

res=a+b

endfunctionNome da variável (na função) com o valor a devolver

Page 38: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 38

Implementação Modular

function res=soma(a,b)

res=a+b

endfunctiona e b são cópias dos valores

Page 39: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 39

Implementação Modular

function x=incrementa(x)

x=x+1

endfunctionx é cópia do valor

octave:17> x=3x = 3octave:18> incrementa(x)x = 4ans = 4octave:19> xx = 3

Page 40: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 40

Implementação Modular

function res=soma(a,b)

res=a+b

endfunction

Último detalhe:• Não queremos o res

(no Octave)

octave:16> soma(2,5)res = 7ans = 7octave:17>

Page 41: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 41

Implementação Modular

function res=soma(a,b)

res=a+b;

endfunction

Último detalhe:• Não queremos o res

• ; resolve o problema.

(no Octave)

octave:20> soma(2,5)ans = 7octave:21>

Page 42: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 42

Implementação Modular

Importante:• Os argumentos da função são cópias locais

dos valores.

• As variáveis na função são independentes mesmo que haja outras com o mesmo nome.

• Só “sai” da função o que vier antes do nome da função:

function res=soma(x,y)

Page 43: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 43

Implementação Modular

Importante:• O Octave primeiro verifica se há uma variável

com esse nome:

octave:21> soma=0

soma = 0

octave:22> soma(2,5)

error: invalid row index = 2

error: invalid column index = 5

Page 44: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 44

Implementação Modular

Importante:• O Octave primeiro verifica se há uma variável

com esse nome.

• Se fosse ao contrário, um novo ficheiro .m podia estragar um programa já existente...

Page 45: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 45

Implementação Modular

Importante:• A variável (ou variáveis) designada para

guardar o valor devolvido tem que ter um valor atribuído no final da função.function res=soma(a,b) c=a+b;endfunction

octave:24> a=soma(2,5)error: value on right hand side of assignment is undefinederror: evaluating assignment expression near line 24, column 2

Page 46: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 46

Exemplo: separar nomes

Script + função

function res = palavran (frase, n)

m=split(frase, " "); res=m(n,:);

endfunction

Page 47: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 47

Exemplo: separar nomes

Script + funçãoinput(mensagem) avalia expressão

input(mensagen, "s") lê uma string

disp("Separador de nomes");

n=input("Introduza o nome completo:\n", "s");

p=input("Introduza o índice da palavra que quer:\n");palavran(n,p)

Page 48: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 48

Aula de hoje

Strings e gráficos. Decompor problema complexo em

problemas simples. No Octave, usar funções:

• Reutilizáveis (como a torradeira)

• As variáveis locais garantem que só entra e sai o que quisermos (melhor que a torradeira!)

Page 49: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 49

Para estudar isto

Manual Octave• Capitulo 5 (introdução) Strings

• Secção 15.1.1 Gráficos simples 2D

• Secção 15.1.4 Vários gráficos

• Secção 11.1 Funções

Page 50: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2

Ludwig Krippahl, 2009 50

Dúvidas