ludwig krippahl, 2009 programação para as ciências experimentais 2008/9 teórica 2
TRANSCRIPT
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
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
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)
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-
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
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
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>
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 "..."
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)
Ludwig Krippahl, 2009 11
Gráficos 2D
Exemplo
x=-10:10;
plot(x,x.^3)
Ludwig Krippahl, 2009 12
Gráficos 2D
Exemplo
x=-10:10;
plot(x,x.^3)
Ludwig Krippahl, 2009 13
Gráficos 2D
Exemplo
x=-10:10;
subplot(2,1,1)
plot(x,x.^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)
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ī
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
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
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
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
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
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
Ludwig Krippahl, 2009 22
Programação
Resolver problemas complexos um problema simples de cada vez
Hierarquizar os problemas
Ludwig Krippahl, 2009 23
Programação
Procedimento• Mostrar valores no ecrã, gravar um ficheiro,
etc.
Função• Devolve um ou mais valores
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
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
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
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
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.
Ludwig Krippahl, 2009 29
Implementação Modular
Exemplo conc.m
mmNaCl=58.4
v=0.125
q=2/mmNaCl
c=q/v
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)
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.
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
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
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
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>
Ludwig Krippahl, 2009 36
Implementação Modular
function res=soma(a,b)
res=a+b
endfunctionArgumentos da função
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
Ludwig Krippahl, 2009 38
Implementação Modular
function res=soma(a,b)
res=a+b
endfunctiona e b são cópias dos valores
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
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>
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>
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)
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
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...
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
Ludwig Krippahl, 2009 46
Exemplo: separar nomes
Script + função
function res = palavran (frase, n)
m=split(frase, " "); res=m(n,:);
endfunction
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)
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!)
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
Ludwig Krippahl, 2009 50
Dúvidas