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