ludwig krippahl, 2007 programação para as ciências experimentais 2006/7 teórica 3

Post on 17-Apr-2015

103 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Ludwig Krippahl, 2007

Programação para as Ciências Experimentais

2006/7

Teórica 3

Ludwig Krippahl, 2007 2

Na aula de hoje...

Comparações (Booleanos) Controlo condicional

• if...then...else

• While

Ciclo for, e break.

Ludwig Krippahl, 2007 3

Comparações

Igual • ==

Maior, menor, ou igual • >, <, >=, <=

Negação ! Diferente

• !=

Ludwig Krippahl, 2007 4

Booleanos Booleano (verdadeiro ou falso), exemplos: octave:34> 1==2ans = 0octave:35> 1==1ans = 1octave: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)

Ludwig Krippahl, 2007 5

Booleanos

Booleano (verdadeiro ou falso), • 0 é falso.

• Tudo o resto é verdadeiro Constantes já definidas no Octave: octave:38> truetrue = 1octave:39> falsefalse = 0

Ludwig Krippahl, 2007 6

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

Ludwig Krippahl, 2007 7

Controlo condicional: if

Executa o bloco de instruções se a expressão for diferente de 0 (0 é falso)

if expressão

...

else

...

endif

Ludwig Krippahl, 2007 8

Controlo condicional: if

Exemplo: se x<25 soma y

if x<25

x=x+y;

endif

Ludwig Krippahl, 2007 9

Controlo condicional: if

Exemplo: se x e y diferentes de 25, soma y

if x!=25 & y!=25

x=x+y;

endif

Ludwig Krippahl, 2007 10

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 &

Ludwig Krippahl, 2007 11

Ciclo condicional: while

Executa o bloco de instruções enquanto a expressão for diferente de 0

while expressão

...

...

endwhile

Ludwig Krippahl, 2007 12

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

Ludwig Krippahl, 2007 13

Ciclo for

Executa o bloco de instruções uma vez para cada valor da variável.

for variável = vector

...

...

endfor

Ludwig Krippahl, 2007 14

Ciclo for

Exemplo: somar a x os números 3, 5, e 8.

for f = [3, 5, 8]

x=x+f

endfor

Ludwig Krippahl, 2007 15

Ciclo for

Exemplo: fazer algo 10 vezes:

for f = 1:10

alguma coisa

endfor

Ludwig Krippahl, 2007 16

Ciclo for

Exemplo: Substituir todos os caracteres de s por *

for f = 1:length(s)

s(f) = “*”;

endfor

Ludwig Krippahl, 2007 17

Problema

Decompor uma fórmula química (string):• e.g. CH3COOH

Numa tabela com os seus elementos (matriz):C

H

O

Ludwig Krippahl, 2007 18

1º passo: perceber como fazer

Percorrer a fórmula• CH3COOH

Identificar o que é elemento

Ludwig Krippahl, 2007 19

1º passo: perceber como fazer

Percorrer a fórmula• CH3COOH

E o que não é elemento

Ludwig Krippahl, 2007 20

1º passo: perceber como fazer

Criar a lista• C, H, C, O, O, H

Ludwig Krippahl, 2007 21

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

Ludwig Krippahl, 2007 22

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

Ludwig Krippahl, 2007 23

Tirar o primeiro elemento

• Uma função que:• Recebe a fórmula

• Devolve o primeiro elemento e o resto da fórmula

Ludwig Krippahl, 2007 24

Tirar o primeiro elemento

• Uma função que:• Recebe a fórmula

• Devolve o primeiro elemento e o resto da fórmula:

• CH3COOH

• C H3COOH

Ludwig Krippahl, 2007 25

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

• H 3COOH

Ludwig Krippahl, 2007 26

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

• C OOH

Ludwig Krippahl, 2007 27

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

• O OH

Ludwig Krippahl, 2007 28

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.

Ludwig Krippahl, 2007 29

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

Ludwig Krippahl, 2007 30

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

Ludwig Krippahl, 2007 31

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

Ludwig Krippahl, 2007 32

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

Ludwig Krippahl, 2007 33

Função [el, resto]=umelem(s) Testar:octave:22> [e,r]=umelem("CH3COOH")e = Cr = H3COOHoctave:23> [e1,r]=umelem(r)e1 = Hr = 3COOHoctave:24> [e1,r]=umelem(r)e1 = Cr = OOHoctave:25>

Ludwig Krippahl, 2007 34

Função [el, resto]=umelem(s)

Entra aqui

[e, resto] = umelem(resto)

Ludwig Krippahl, 2007 35

Função [el, resto]=umelem(s)

Entra aqui

[e, resto] = umelem(resto)

Sai aqui o novo fragmento

Ludwig Krippahl, 2007 36

1º passo: partir em mais simples

Precisamos de 2 coisas:• Tirar o primeiro elemento da fórmula

• Acrescentar à tabela se não estiver lá.

Ludwig Krippahl, 2007 37

Acrescentar à lista

• Uma função que:• Recebe o elemento e a tabela

• Acrescenta se não estiver

• Podemos usar várias vezes

• C, “”

• C

Ludwig Krippahl, 2007 38

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

Ludwig Krippahl, 2007 39

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

Ludwig Krippahl, 2007 40

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

Ludwig Krippahl, 2007 41

Função tabela=addelem(el,tabela)

Se tabela vazia, fica logo el

if tabela==“”...

else

endif

Ludwig Krippahl, 2007 42

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 Interrompe um ciclo (for ou while)

endfor

Ludwig Krippahl, 2007 43

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

Ludwig Krippahl, 2007 44

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.

Ludwig Krippahl, 2007 45

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á

Ludwig Krippahl, 2007 46

Dúvidas

top related