ludwig krippahl, 2008 programação para as ciências experimentais 2007/8 teórica 2
TRANSCRIPT
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
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
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)
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-
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
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
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>
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.
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)
Ludwig Krippahl, 2008 11
Gráficos 2D
Exemplo
x=-10:10;
plot(x,x.^3)
Ludwig Krippahl, 2008 12
Gráficos 2D
Exemplo
x=-10:10;
plot(x,x.^3)
Ludwig Krippahl, 2008 13
Gráficos 2D
Exemplo
x=-10:10;
subplot(2,1,1)
plot(x,x.^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)
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ī
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
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
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
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
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
Ludwig Krippahl, 2008 21
Implementação Modular
Pegar no pão Encontrar faca Cortar fatia Torrada = Torradeira(Pão)
Procedimento
Função
Ludwig Krippahl, 2008 22
Programação
Resolver problemas complexos um problema simples de cada vez
Hierarquizar os problemas
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
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
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
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
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.
Ludwig Krippahl, 2008 28
Implementação Modular
Exemplo conc.m
mmNaCl=58.4
v=0.125
q=2/mmNaCl
c=q/v
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)
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.
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
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
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
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>
Ludwig Krippahl, 2008 35
Implementação Modular
function res=soma(a,b)
res=a+b
endfunctionArgumentos da função
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
Ludwig Krippahl, 2008 37
Implementação Modular
function res=soma(a,b)
res=a+b
endfunctiona e b são cópias dos valores
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
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>
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>
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)
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
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...
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
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!)
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
Ludwig Krippahl, 2008 47
Dúvidas