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
Download

Slides