Programação para as
Ciências Experimentais
2007/8
Teórica 2
Ludwig Krippahl, 2008
Na aula de hoje...
Strings: texto e caracteres
Gráficos
Algoritmos
Funções e Variáveis
Ludwig Krippahl, 2008
2
Strings (texto)
Uma string é uma sequência de caracteres,
delimitada por aspas ou plicas.
octave:67> a="string"
a = string
octave:68> b="outra string"
b = outra string
octave:69> c=string
error: `string" undefined near line 69 column 3
error: evaluating assignment expression near line
69, column 2
Ludwig Krippahl, 2008
3
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
4
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
5
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
6
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
7
Funções para strings (exemplos)
octave:76> split("um;dois;três;quatro",";")
ans =
um
dois
três
quatro
octave:77>
Ludwig Krippahl, 2008
8
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
9
Gráficos 2D
plot(x,y)
hold on
(x e y vectores)
para não tirar gráfico
anterior
clearplot
apagar
Subplot(linha, coluna, indice)
Ludwig Krippahl, 2008
10
Gráficos 2D
Exemplo
x=-10:10;
plot(x,x.^3)
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;
subplot(2,1,1)
plot(x,x.^2)
Ludwig Krippahl, 2008
13
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
14
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
15
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
16
«Algoritmo» da torrada
Pegar no pão
Se faca na bancada,
Caso contrário
Cortar fatia, pôr na torradeira, ligar
Enquanto não está pronta
• Pegar na faca
• Ir buscar faca à gaveta
• Esperar
Ludwig Krippahl, 2008
17
Implementação Modular
Pegar no pão
Se faca na bancada,
Caso contrário
Cortar fatia, pôr na torradeira, ligar
Enquanto não está pronta
• Pegar na faca
• Ir buscar faca à gaveta
• Esperar
Ludwig Krippahl, 2008
18
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
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
Procedimento
Cortar fatia
Torrada = Torradeira(Pão)
Função
Ludwig Krippahl, 2008
21
Programação
Resolver problemas complexos um
problema simples de cada vez
Hierarquizar os problemas
Ludwig Krippahl, 2008
22
Implementação Modular
Pegar no pão
Encontrar faca
Procedimento
Cortar fatia
Torrada = Torradeira(Pão)
Função
Como fazer no Octave...
Ludwig Krippahl, 2008
23
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
24
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
25
Implementação Modular
Script
(no teste.m)
(no Octave)
a=2
octave:13> a=4
a=4
octave:14> teste
a=2
octave:15> a
a=2
Ludwig Krippahl, 2008
26
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
27
Implementação Modular
Exemplo conc.m
mmNaCl=58.4
v=0.125
q=2/mmNaCl
c=q/v
Ludwig Krippahl, 2008
28
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
29
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
30
Implementação Modular
Function
• As variáveis são locais e independentes.
definir uma função
(no Octave)
function igualdois
a=2
endfunction
octave:13> a=4
a=4
octave:14> igualdois
a=2
octave:15> a
a=4
Ludwig Krippahl, 2008
31
Implementação Modular
Function
• As variáveis são locais e independentes.
(num ficheiro igualdois.m)
(no Octave)
function igualdois
a=2
endfunction
octave:13> a=4
a=4
octave:14> iguadois
a=2
octave:15> a
a=4
Mesmo nome que o ficheiro
Ludwig Krippahl, 2008
32
Implementação Modular
Function
• As variáveis são locais e independentes.
function igualdois
a=2
endfunction
A variável a da função só
existe dentro da função
Ludwig Krippahl, 2008
33
Implementação Modular
Mas queremos uma torradeira:
• Torrada = Torradeira (Pão)
• Tem que receber e devolver valores.
(no soma.m)
(no Octave)
function res=soma(a,b)
res=a+b
endfunction
octave:16> soma(2,5)
res = 7
ans = 7
octave:17>
Ludwig Krippahl, 2008
34
Implementação Modular
function res=soma(a,b)
res=a+b
Argumentos da função
endfunction
Ludwig Krippahl, 2008
35
Implementação Modular
function res=soma(a,b)
res=a+b
Nome da variável (na
função) com o valor a
endfunction
devolver
Ludwig Krippahl, 2008
36
Implementação Modular
function res=soma(a,b)
res=a+b
a e b são cópias dos valores
endfunction
Ludwig Krippahl, 2008
37
Implementação Modular
function x=incrementa(x)
x=x+1
x é cópia do valor
endfunction
octave:17> x=3
x=3
octave:18> incrementa(x)
x=4
ans = 4
octave:19> x
x=3
Ludwig Krippahl, 2008
38
Implementação Modular
function res=soma(a,b)
res=a+b
endfunction
(no Octave)
Último detalhe:
• Não queremos o res
Ludwig Krippahl, 2008
octave:16> soma(2,5)
res = 7
ans = 7
octave:17>
39
Implementação Modular
function res=soma(a,b)
res=a+b;
endfunction
(no Octave)
Último detalhe:
• Não queremos o res
• ; resolve o problema.
Ludwig Krippahl, 2008
octave:20> soma(2,5)
ans = 7
octave:21>
40
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
41
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
42
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
43
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 undefined
error: evaluating assignment expression near line 24, column 2
Ludwig Krippahl, 2008
44
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
45
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
46
Dúvidas
Ludwig Krippahl, 2008
47