Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2.

Post on 17-Apr-2015

102 views 0 download

Transcript of Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2.

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