47
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

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

Embed Size (px)

Citation preview

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

Ludwig Krippahl, 2008

Programação para as Ciências Experimentais

2007/8

Teórica 2

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

Ludwig Krippahl, 2008 2

Na aula de hoje...

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

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

Ludwig Krippahl, 2008 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, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 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, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 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, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 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 separados 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, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 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, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 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, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 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.

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

Ludwig Krippahl, 2008 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, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 11

Gráficos 2D

Exemplo

x=-10:10;

plot(x,x.^3)

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

Ludwig Krippahl, 2008 12

Gráficos 2D

Exemplo

x=-10:10;

plot(x,x.^3)

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

Ludwig Krippahl, 2008 13

Gráficos 2D

Exemplo

x=-10:10;

subplot(2,1,1)

plot(x,x.^2)

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

Ludwig Krippahl, 2008 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, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 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, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 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, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 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, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 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, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 19

Implementação Modular

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

• Esperar

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

Ludwig Krippahl, 2008 20

Implementação Modular

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

• Esperar

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

Ludwig Krippahl, 2008 21

Implementação Modular

Pegar no pão Encontrar faca Cortar fatia Torrada = Torradeira(Pão)

Procedimento

Função

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

Ludwig Krippahl, 2008 22

Programação

Resolver problemas complexos um problema simples de cada vez

Hierarquizar os problemas

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

Ludwig Krippahl, 2008 23

Implementação Modular

Pegar no pão Encontrar faca Cortar fatia Torrada = Torradeira(Pão)

Como fazer no Octave...

Procedimento

Função

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

Ludwig Krippahl, 2008 24

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 25: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 25

Implementação Modular

Mudar para a pasta de trabalho:

cd “c:\\documents and settings\\temp\\my documents”

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

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

Ludwig Krippahl, 2008 26

Implementação Modular

Script

(no teste.m)

a=2

(no Octave)

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

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

Ludwig Krippahl, 2008 27

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 28: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 28

Implementação Modular

Exemplo conc.m

mmNaCl=58.4

v=0.125

q=2/mmNaCl

c=q/v

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

Ludwig Krippahl, 2008 29

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 30: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 30

Implementação Modular

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

vamos ver estes)

• Função devolve valores.

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

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

Ludwig Krippahl, 2008 31

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 32: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 32

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 33: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 33

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 34: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 34

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 35: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 35

Implementação Modular

function res=soma(a,b)

res=a+b

endfunctionArgumentos da função

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

Ludwig Krippahl, 2008 36

Implementação Modular

function res=soma(a,b)

res=a+b

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

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

Ludwig Krippahl, 2008 37

Implementação Modular

function res=soma(a,b)

res=a+b

endfunctiona e b são cópias dos valores

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

Ludwig Krippahl, 2008 38

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 39: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 39

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 40: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 40

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 41: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 41

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 42: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 42

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 43: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 43

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 44: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 44

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 45: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 45

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 46: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 46

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 47: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2

Ludwig Krippahl, 2008 47

Dúvidas