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

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

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

Apresentações semelhantes


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

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

2 Ludwig Krippahl, Na aula de hoje... Comparações (Booleanos) Controlo condicional if...then...else While Ciclo for, e break.

3 Ludwig Krippahl, Comparações Igual == Maior, menor, ou igual >, =, <= Negação ! Diferente !=

4 Ludwig Krippahl, Booleanos 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)

5 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

6 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

7 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

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

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

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

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

12 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

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

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

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

16 Ludwig Krippahl, Ciclo for Exemplo: Substituir todos os caracteres de s por * for f = 1:length(s) s(f) = *; endfor

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

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

19 Ludwig Krippahl, º passo: perceber como fazer Percorrer a fórmula CH3COOH E o que não é elemento

20 Ludwig Krippahl, º passo: perceber como fazer Criar a lista C, H, C, O, O, H

21 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

22 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á.

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

24 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

25 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

26 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

27 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

28 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.

29 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: s != é digit: função isdigit

30 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

31 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

32 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

33 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>

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

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

36 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á.

37 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

38 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

39 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

40 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

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

42 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... breakInterrompe um ciclo (for ou while) endfor

43 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 s!=... endwhile

44 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.

45 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á

46 Ludwig Krippahl, Dúvidas


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

Apresentações semelhantes


Anúncios Google