A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 3.

Apresentações semelhantes


Apresentação em tema: "Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 3."— Transcrição da apresentação:

1 Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 3

2 Ludwig Krippahl, 2008 2 Revisão: Funções function res=soma(a,b) res=a+b endfunction Declaração da função

3 Ludwig Krippahl, 2008 3 Revisão: Funções function res=soma(a,b) res=a+b endfunction Nome da função E nome do ficheiro: soma.m

4 Ludwig Krippahl, 2008 4 Revisão: Funções function res=soma(a,b) res=a+b endfunction Argumentos da função.

5 Ludwig Krippahl, 2008 5 Revisão: Funções function res=soma(a,b) res=a+b endfunction Nome da variável (na função) com o valor a devolver

6 Ludwig Krippahl, 2008 6 Revisão: Funções function res=soma(a,b) res=a+b endfunction a e b contém cópias dos valores dados. Todas as variáveis são locais (só existem na função).

7 Ludwig Krippahl, 2008 7 Revisão: Funções function res=soma(a,b) res=a+b; endfunction O ; silencia os cálculos intermédios. É útil omitir durante o desenvolvimento.

8 Ludwig Krippahl, 2008 8 Aulas práticas Antes de perguntar: help nome_da_função consultar o manual experimentar

9 Ludwig Krippahl, 2008 9 Controlo da execução 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

10 Ludwig Krippahl, 2008 10 Controlo da execução 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 Sequência

11 Ludwig Krippahl, 2008 11 Controlo da execução 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 Condição

12 Ludwig Krippahl, 2008 12 Controlo da execução 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 Ciclo

13 Ludwig Krippahl, 2008 13 Na aula de hoje... Comparações (Booleanos) Condições (if...then...else Ciclo condicional (while) Ciclo for e break.

14 Ludwig Krippahl, 2008 14 Comparações Igual == (ATT: um igual, =, é atribuição) Maior, menor, ou igual >, =, <= Negação ! Diferente !=

15 Ludwig Krippahl, 2008 15 Booleanos e comparações Booleano (verdadeiro ou falso), exemplos: octave:34> 1==2 ans = 0 octave:35> 1==1 ans = 1 octave:36> [1,2,3]==[3,2,1] ans = 0 1 0(compara cada elemento) octave:37> "paulo"=="paula" ans = 1 1 1 1 0(compara cada elemento)

16 Ludwig Krippahl, 2008 16 Booleanos Booleano (verdadeiro ou falso), 0 é falso. Tudo o resto é verdadeiro Constantes já definidas no Octave: octave:38> true true = 1 octave:39> false false = 0

17 Ludwig Krippahl, 2008 17 Comparar strings Strings são vectores de caracteres. abc==abd ans= 1 1 0 abc==abde *erro* (não têm o mesmo tamanho)

18 Ludwig Krippahl, 2008 18 Comparar strings para comparar strings usar função strcmp(s1,s2) strcmp(ab,abc) ans = 0

19 Ludwig Krippahl, 2008 19 Operadores Booleanos (e, ou) &e |ou Curto-circuito: (só avalia o necessário) &&A && B, se A falso não faz B ||A II B, se A verdadeiro, não faz B

20 Ludwig Krippahl, 2008 20 Controlo condicional: if Executa o bloco de instruções se a expressão for diferente de 0 (0 é falso) if expressão... else... endif

21 Ludwig Krippahl, 2008 21 Controlo condicional: if Exemplo: se x<25 soma y if x<25 x=x+y; endif

22 Ludwig Krippahl, 2008 22 Controlo condicional: if Exemplo: se x e y diferentes de 25, soma y if x!=25 & y!=25 x=x+y; endif

23 Ludwig Krippahl, 2008 23 Controlo condicional: if Exemplo: se s não é vazia e se o primeiro caracter é A if !strcmp(s,) && s(1)==A... endif Importante não verificar a segunda parte se s for vazia (dá erro...): && em vez de &

24 Ludwig Krippahl, 2008 24 Ciclo condicional: while Executa o bloco de instruções enquanto a expressão for diferente de 0 while expressão... endwhile

25 Ludwig Krippahl, 2008 25 Ciclo condicional: while Exemplo: dividir x por dois até ter um número menor que 5 (enquanto >=5) while x>=5 x=x/2; endwhile

26 Ludwig Krippahl, 2008 26 Ciclo for Executa o bloco de instruções uma vez para cada valor da variável. for var = vector... endfor

27 Ludwig Krippahl, 2008 27 Ciclo for Exemplo: somar a x os números 3, 5, e 8. for f = [3, 5, 8] x=x+f endfor

28 Ludwig Krippahl, 2008 28 Ciclo for Exemplo: fazer algo 10 vezes: for f = 1:10 alguma coisa endfor

29 Ludwig Krippahl, 2008 29 Ciclo for Exemplo: Substituir todos os caracteres de s por * for f = 1:length(s) s(f) = *; endfor Nota: não é preciso usar o contador dentro do ciclo.

30 Ludwig Krippahl, 2008 30 Problema Decompor uma fórmula química (string): e.g. CH3COOH Numa tabela com os seus elementos (matriz): C H O

31 Ludwig Krippahl, 2008 31 1º passo: perceber como fazer Percorrer a fórmula CH3COOH Identificar o que é elemento

32 Ludwig Krippahl, 2008 32 1º passo: perceber como fazer Percorrer a fórmula CH3COOH E o que não é elemento (assumir que elemento só tem um caracter)

33 Ludwig Krippahl, 2008 33 1º passo: perceber como fazer Criar a lista C, H, C, O, O, H

34 Ludwig Krippahl, 2008 34 1º passo: perceber como fazer Criar a lista C, H, C, O, O, H Mas pôr só se não estiver já na lista

35 Ludwig Krippahl, 2008 35 2º passo: dividir o problema em problemas mais simples Precisamos de 2 coisas: Tirar o primeiro elemento da fórmula Acrescentar à tabela se não estiver lá.

36 Ludwig Krippahl, 2008 36 Tirar o primeiro elemento Uma função que: Recebe a fórmula Devolve o primeiro elemento e o resto da fórmula

37 Ludwig Krippahl, 2008 37 Tirar o primeiro elemento Uma função que: Recebe a fórmula Devolve o primeiro elemento e o resto da fórmula: CH3COOH

38 Ludwig Krippahl, 2008 38 Tirar o primeiro elemento Uma função que: Recebe a fórmula Devolve o primeiro elemento e o resto da fórmula Podemos usar várias vezes H3COOH

39 Ludwig Krippahl, 2008 39 Tirar o primeiro elemento Uma função que: Recebe a fórmula Devolve o primeiro elemento e o resto da fórmula Podemos usar várias vezes 3COOH COOH

40 Ludwig Krippahl, 2008 40 Tirar o primeiro elemento Uma função que: Recebe a fórmula Devolve o primeiro elemento e o resto da fórmula Podemos usar várias vezes OOH

41 Ludwig Krippahl, 2008 41 Função: vários valores Como declarar a função (Manual, 11.2) function [v1, v2, v3]=nome(arg1, arg2)..... endfunction

42 Ludwig Krippahl, 2008 42 Função: vários valores Exemplo function [s,p]=sumprod(a,b) s=a+b; p=a*b; endfunction

43 Ludwig Krippahl, 2008 43 Função [el, resto]=umelem(s) Aqui também várias coisas: Tirar os números no inicio, se necessário: 3COOH Guardar em el o primeiro caracter, se houver. Guardar em resto os outros, se houver.

44 Ludwig Krippahl, 2008 44 Função [el, resto]=umelem(s) 1: Tirar os números no inicio, se necessário: Enquanto s não for vazio e s(1) for um dígito: s = s(2:length(s)). Não vazio: !strcmp(s,) é algarismo: função isdigit (c)

45 Ludwig Krippahl, 2008 45 Função [el, resto]=umelem(s) 1: Tirar os números no inicio, se necessário: Enquanto s não for vazio e s(1) for um dígito: s = s(2:length(s)). Enquanto: while condição.... endwhile

46 Ludwig Krippahl, 2008 46 Função [el, resto]=umelem(s) 2: Guardar em el o primeiro caracter, se houver Só serve para elementos com 1 caracter. Comentar isso no código (%). Se, então, caso contrário: if condição.... else.... endif

47 Ludwig Krippahl, 2008 47 Função [el, resto]=umelem(s) 3: Guardar o resto se houver mais caracteres em s ou seja, se length(s) > 1 Se, então, caso contrário: if condição.... else.... endif

48 Ludwig Krippahl, 2008 48 Função [el, resto]=umelem(s) Testar: octave:22> [e,r]=umelem("CH3COOH") e = C r = H3COOH octave:23> [e1,r]=umelem(r) e1 = H r = 3COOH octave:24> [e1,r]=umelem(r) e1 = C r = OOH octave:25>

49 Ludwig Krippahl, 2008 49 Função [el, resto]=umelem(s) Entra aqui [e, resto] = umelem(resto)

50 Ludwig Krippahl, 2008 50 Função [el, resto]=umelem(s) Entra aqui [e, resto] = umelem(resto) Sai aqui o novo fragmento

51 Ludwig Krippahl, 2008 51 1º passo: partir em mais simples Precisamos de 2 coisas: Tirar o primeiro elemento da fórmula Acrescentar à tabela se não estiver lá.

52 Ludwig Krippahl, 2008 52 Acrescentar à lista Uma função que: Recebe o elemento e a tabela Acrescenta se não estiver Podemos usar várias vezes C, C

53 Ludwig Krippahl, 2008 53 Acrescentar à lista Uma função que: Recebe o elemento e a tabela Acrescenta se não estiver Podemos usar várias vezes H, C C H

54 Ludwig Krippahl, 2008 54 Acrescentar à lista Uma função que: Recebe o elemento e a tabela Acrescenta se não estiver Podemos usar várias vezes C, [C;H] Já está, não faz nada C H

55 Ludwig Krippahl, 2008 55 Função tabela=addelem(el,tabela) Também várias coisas: Se tabela vazia, fica logo el Caso contrário, ver se há el na tabela. Se não há, acrescenta no fim

56 Ludwig Krippahl, 2008 56 Função tabela=addelem(el,tabela) Se tabela vazia, fica logo el if strcmp(tabela,)... else endif

57 Ludwig Krippahl, 2008 57 Função tabela=addelem(el,tabela) Caso contrário, ver se há na tabela Assumir que não há (usar variável = false) Percorrer todas as linhas Se encontra, afinal há, pára de procurar. for f=1:rows(tabela)... if... break endfor

58 Ludwig Krippahl, 2008 58 Função tabela=separaelems(s) Já temos as peças, agora é juntar Inicializar a tabela a vazio. Enquanto s não for vazio Tirar o primeiro elemento com umelem Guardar na tabela com addelem (se houver) while !strcmp(s,)... endwhile

59 Ludwig Krippahl, 2008 59 Nesta aula Os detalhes (if, for, etc..) são para ir praticando. O importante desta aula é o método: Perceber o problema e conceber o algoritmo Se é complicado, dividir em partes mais simples Fazer o mesmo com as partes mais simples até ter partes triviais.

60 Ludwig Krippahl, 2008 60 Dividir para conquistar separaelem umelem tirar os dígitos guardar o el, se algum guardar o resto, se existe addelem se tabela vazia, basta pôr caso contrário, procura, e põe se não está lá

61 Ludwig Krippahl, 2008 61 Dividir para conquistar separaelem Enquanto fórmula não vazia (while) Retirar um elemento (umelem) Acrescentar à tabela (addelem) A nova fórmula é o que sobra

62 Ludwig Krippahl, 2008 62 Dúvidas


Carregar ppt "Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 3."

Apresentações semelhantes


Anúncios Google