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, Revisão: Funções function res=soma(a,b) res=a+b endfunction Declaração da função

3 Ludwig Krippahl, 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, Revisão: Funções function res=soma(a,b) res=a+b endfunction Argumentos da função.

5 Ludwig Krippahl, 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, 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, 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, Aulas práticas Antes de perguntar: help nome_da_função consultar o manual experimentar

9 Ludwig Krippahl, 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, 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, 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, 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, Na aula de hoje... Comparações (Booleanos) Condições (if...then...else Ciclo condicional (while) Ciclo for e break.

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

15 Ludwig Krippahl, 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 = (compara cada elemento)

16 Ludwig Krippahl, 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, Comparar strings Strings são vectores de caracteres. abc==abd ans= abc==abde *erro* (não têm o mesmo tamanho)

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

19 Ludwig Krippahl, 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, 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, Controlo condicional: if Exemplo: se x<25 soma y if x<25 x=x+y; endif

22 Ludwig Krippahl, 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, 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, Ciclo condicional: while Executa o bloco de instruções enquanto a expressão for diferente de 0 while expressão... endwhile

25 Ludwig Krippahl, 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, Ciclo for Executa o bloco de instruções uma vez para cada valor da variável. for var = vector... endfor

27 Ludwig Krippahl, 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, Ciclo for Exemplo: fazer algo 10 vezes: for f = 1:10 alguma coisa endfor

29 Ludwig Krippahl, 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, Problema Decompor uma fórmula química (string): e.g. CH3COOH Numa tabela com os seus elementos (matriz): C H O

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

32 Ludwig Krippahl, º 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, º passo: perceber como fazer Criar a lista C, H, C, O, O, H

34 Ludwig Krippahl, º 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, º 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, 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, 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, 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, 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, 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, Função: vários valores Como declarar a função (Manual, 11.2) function [v1, v2, v3]=nome(arg1, arg2)..... endfunction

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

43 Ludwig Krippahl, 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, 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, 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, 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, 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, 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, Função [el, resto]=umelem(s) Entra aqui [e, resto] = umelem(resto)

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

51 Ludwig Krippahl, º 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, 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, 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, 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, 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, Função tabela=addelem(el,tabela) Se tabela vazia, fica logo el if strcmp(tabela,)... else endif

57 Ludwig Krippahl, 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, 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, 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, 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, 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, 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