Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouRenan Melo Alterado mais de 10 anos atrás
1
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 6
2
Ludwig Krippahl, 2008 2 Na aula de hoje... Estruturas. Vectores de estruturas (structure arrays). Leitura formatada. Recursividade Gráficos 3D
3
Ludwig Krippahl, 2008 3 Estruturas Vectores e matrizes guardam valores de um só tipo. Estruturas podem guardar valores de vários tipos. Sintaxe: variável.campo
4
Ludwig Krippahl, 2008 4 Estruturas Exemplo: octave:7> prato.nome="filetes"; octave:8> prato.preco=12.5; octave:9> prato.pedidos=[10,2,3,5,9,5,9]; octave:10> prato prato = { nome = filetes pedidos = 10 2 3 5 9 5 9 preco = 12.500 }
5
Ludwig Krippahl, 2008 5 Estruturas prato = { nome = filetes pedidos = 10 2 3 5 9 5 9 preco = 12.500 } Estrutura
6
Ludwig Krippahl, 2008 6 Estruturas prato = { nome = filetes pedidos = 10 2 3 5 9 5 9 preco = 12.500 } Campos
7
Ludwig Krippahl, 2008 7 Estruturas prato = { nome = filetes pedidos = 10 2 3 5 9 5 9 preco = 12.500 } Valores
8
Ludwig Krippahl, 2008 8 Estruturas Recapitulando nome_da_variavel.campo1=val1 nome_da_variavel.campo2=val2 nome_da_variavel.campo3=val3 Cada campo pode ter um valor de tipo diferente, incluindo ser outra estrutura.
9
Ludwig Krippahl, 2008 9 Estruturas Estrutura de estrutura... octave:13> cliente.nome="Vitor Meireles"; octave:14> cliente.prato=prato cliente = { nome = Vitor Meireles prato = { nome = filetes pedidos = 10 2 3 5 9 5 9 preco = 12.500 }
10
Ludwig Krippahl, 2008 10 Structure arrays Podemos criar vectores de estruturas, desde que as estruturas tenham os mesmos campos (os valores podem ser de tipos diferentes) x.a=1 x.b=2 y.a=3 y.b=s V=[x,y]
11
Ludwig Krippahl, 2008 11 Structure arrays Não podemos criar vectores de estruturas se os campos forem diferentes y.c=4(acrescentamos um campo c ao y) V=[x,y](dá erro...)
12
Ludwig Krippahl, 2008 12 Structure arrays Um vector de estruturas funciona como um vector. for f=1:10 x(f).a=f; endfor x(2:2:10) Nota: podemos criar um vector atribuindo valores aos seus elementos: v(1)=1, v(2)=1...
13
Ludwig Krippahl, 2008 13 Structure arrays Se acrescentarmos um campo a um elemento acrescenta a todos, mas vazio. for f=1:10 x(f).a=f; endfor x(2:2:10) x(2).b=0
14
Ludwig Krippahl, 2008 14 Structure arrays Podemos também atribuir um valor a um campo de todos (ou alguns) elementos do vector x(:).b=1 x(1:5).b=2
15
Ludwig Krippahl, 2008 15 Exemplo: massa molecular Uma função que receba uma fórmula química e devolva a massa molecular. massamol(CHCl3) ans = 119.38
16
Ludwig Krippahl, 2008 16 Exemplo: massa molecular Precisamos de: Saber as massas atómicas Decompor a fórmula guardando o número de átomos (e.g. Cl3 são 3 àtomos de Cl) Somar tudo.
17
Ludwig Krippahl, 2008 17 Exemplo: massa molecular Saber as massas atómicas Ficheiro elementos.txt (SQNomeNAMassaGP) AcActinium8922707 AgSilver47107.8682115 AlAluminium1326.9815386133 AmAmericium9524307
18
Ludwig Krippahl, 2008 18 Exemplo: massa molecular Saber as massas atómicas Ficheiro elementos.txt Separado por tabs
19
Ludwig Krippahl, 2008 19 Exemplo: massa molecular Leitura formatada (fscanf) [simb,nome,na,massa,grupo,periodo]= fscanf(id,"%s%s%d%f%d%d","C"); Variáveis onde guardar os valores.
20
Ludwig Krippahl, 2008 20 Exemplo: massa molecular Leitura formatada (fscanf) [simb,nome,na,massa,grupo,periodo]= fscanf(id,"%s%s%d%f%d%d","C"); Identificador do ficheiro
21
Ludwig Krippahl, 2008 21 Exemplo: massa molecular Leitura formatada (fscanf) [simb,nome,na,massa,grupo,periodo]= fscanf(id,"%s%s%d%f%d%d","C"); Formatação dos valores a ler (string, string, inteiro, fraccionário, inteiro, inteiro)
22
Ludwig Krippahl, 2008 22 Exemplo: massa molecular Leitura formatada (fscanf) O fscanf considera qualquer espaço em branco (espaço, tab, nova linha) como separando os valores e ignora-o. Por isso não precisamos dizer onde estão os tabs, etc. Mas se houver um espaço numa string o fscanf pensa que são duas.
23
Ludwig Krippahl, 2008 23 Exemplo: massa molecular Leitura formatada (fscanf) [simb,nome,na,massa,grupo,periodo]= fscanf(id,"%s%s%d%f%d%d","C"); Para os códigos da formatação ver printf (14.2.4)
24
Ludwig Krippahl, 2008 24 Exemplo: massa molecular Leitura formatada (fscanf) [simb,nome,na,massa,grupo,periodo]= fscanf(id,"%s%s%d%f%d%d","C"); Indica que é para funcionar como na linguagem C. É importante não esquecer isto.
25
Ludwig Krippahl, 2008 25 Exemplo: massa molecular function els=lerelementos(nome) id=fopen(nome,"r"); f=1; while !feof(id) [simb,nome,na,massa,grupo,periodo]=fscanf(id,"%s%s%d%f%d%d","C"); els(f).simb=simb; els(f).nome=nome; els(f).na=na; els(f).massa=massa; els(f).grupo=grupo; els(f).periodo=periodo; f=f+1; endwhile fclose(id); endfunction
26
Ludwig Krippahl, 2008 26 Exemplo: massa molecular function els=lerelementos(nome) id=fopen(nome,"r"); f=1; while !feof(id) [simb,nome,na,massa,grupo,periodo]=fscanf(id,"%.... els(f).simb=simb; [...] f=f+1; endwhile fclose(id); endfunction Abre o ficheiro
27
Ludwig Krippahl, 2008 27 Exemplo: massa molecular function els=lerelementos(nome) id=fopen(nome,"r"); f=1; while !feof(id) [simb,nome,na,massa,grupo,periodo]=fscanf(id,"%.... els(f).simb=simb; [...] f=f+1; endwhile fclose(id); endfunction Enquanto não chega ao fim lê cada linha para várias variáveis
28
Ludwig Krippahl, 2008 28 Exemplo: massa molecular function els=lerelementos(nome) id=fopen(nome,"r"); f=1; while !feof(id) [simb,nome,na,massa,grupo,periodo]=fscanf(id,"%.... els(f).simb=simb; [...] f=f+1; endwhile fclose(id); endfunction e constrói o elemento f do vector de estruturas
29
Ludwig Krippahl, 2008 29 Exemplo: massa molecular function els=lerelementos(nome) id=fopen(nome,"r"); f=1; while !feof(id) [simb,nome,na,massa,grupo,periodo]=fscanf(id,"%.... els(f).simb=simb; [...] f=f+1; endwhile fclose(id); endfunction Incrementa f para o próximo elemento
30
Ludwig Krippahl, 2008 30 Exemplo: massa molecular Precisamos de: Saber as massas atómicas Decompor a fórmula guardando o número de átomos Somar tudo.
31
Ludwig Krippahl, 2008 31 Exemplo: massa molecular Decompor a fórmula: Retirar da primeira letra até à primeira maiúscula. Decompor o resto, se sobrar. Função recursiva.
32
Ludwig Krippahl, 2008 32 Exemplo: massa molecular Decompor a fórmula: Retirar da primeira letra até à primeira maiúscula. Decompor o resto, se sobrar. Função recursiva. Decompor CH3Cl é C, e decompor H3Cl
33
Ludwig Krippahl, 2008 33 Recursividade Factorial: N! = N * (N-1) * (N-2) *.. N! = N * (N-1)!
34
Ludwig Krippahl, 2008 34 Recursividade Factorial: function f=factorial(n) if n<=1 f=1; else f=n*factorial(n-1); endif endfunction Condição de paragem. É importante ser primeiro!
35
Ludwig Krippahl, 2008 35 Recursividade Factorial: function f=factorial(n) if n<=1 f=1; else f=n*factorial(n-1); endif endfunction Chamada recursiva. N!= N* (N-1)!
36
Ludwig Krippahl, 2008 36 Exemplo: massa molecular function le=decompor(formula) le=[]; if length(formula)>0 Guarda o 1º elemento, incluindo o número. Em p guarda a posição do próximo elemento if p<=length(formula) le=[le,decompor(formula(p:length(formula)))]; endif endfunction
37
Ludwig Krippahl, 2008 37 Exemplo: massa molecular le(1).el=formula(1); quant=""; p=length(formula)+1; for f=2:length(formula) if isdigit(formula(f)) quant=[quant,formula(f)]; elseif islower(formula(f)) le(1).el=[le(1).el,formula(f)]; else p=f; break; endif endfor Guarda 1ª letra. A quantidade é string vazia e assume que não há próxima
38
Ludwig Krippahl, 2008 38 Exemplo: massa molecular le(1).el=formula(1); quant=""; p=length(formula)+1; for f=2:length(formula) if isdigit(formula(f)) quant=[quant,formula(f)]; elseif islower(formula(f)) le(1).el=[le(1).el,formula(f)]; else p=f; break; endif endfor A partir do 2º caracter, se for digito vai para a string da quantidade
39
Ludwig Krippahl, 2008 39 Exemplo: massa molecular le(1).el=formula(1); quant=""; p=length(formula)+1; for f=2:length(formula) if isdigit(formula(f)) quant=[quant,formula(f)]; elseif islower(formula(f)) le(1).el=[le(1).el,formula(f)]; else p=f; break; endif endfor senão, se for minúscula vai para o elemento.
40
Ludwig Krippahl, 2008 40 Exemplo: massa molecular le(1).el=formula(1); quant=""; p=length(formula)+1; for f=2:length(formula) if isdigit(formula(f)) quant=[quant,formula(f)]; elseif islower(formula(f)) le(1).el=[le(1).el,formula(f)]; else p=f; break; endif endfor Caso contrário há próximo. Guarda-se a posição em p e termina-se este ciclo
41
Ludwig Krippahl, 2008 41 If, caso geral (if, elseif, else) if cond1 se a cond1 for verdadeira elseif cond2 se a cond1 for falsa e a cond2 verdadeira elseif....... else caso nenhuma seja verdadeira endif
42
Ludwig Krippahl, 2008 42 Exemplo: massa molecular if !strcmp(quant,"") le(1).quant=str2num(quant); else le(1).quant=1; endif Terminado o ciclo guarda-se o número na quantidade, ou 1 se nenhuma quantidade foi encontrada
43
Ludwig Krippahl, 2008 43 Exemplo: massa molecular Precisamos de: Saber as massas atómicas Decompor a fórmula guardando o número de átomos Somar tudo.
44
Ludwig Krippahl, 2008 44 Exemplo: massa molecular Encontrar a massa de um elemento na tabela function m=massael(simbolo,lista) m=0; for f=1:length(lista) if strcmp(lista(f).simb,simbolo) m=lista(f).massa; break endif endfor endfunction
45
Ludwig Krippahl, 2008 45 Exemplo: massa molecular Calcular tudo function m=massamol(formula) lista=lerelementos("elementos.txt") c=decompor(formula); m=0; for f=1:length(c) m=m+massael(c(f).el,lista)*c(f).quant; endfor endfunction
46
Ludwig Krippahl, 2008 46 Gráficos 3D Função meshgrid: cria matrizes para x, y [xx,yy]=meshgrid(1:3,4:6) xx = 1 2 3 yy = 4 4 4 5 5 5 6 6 6
47
Ludwig Krippahl, 2008 47 Gráficos 3D Função mesh: traça o gráfico 3D rede x=-10:10; y=-10:10; [xx,yy]=meshgrid(x,y); mesh(xx,yy,xx.^2-yy.^2+xx.*yy)
48
Ludwig Krippahl, 2008 48 Gráficos 3D
49
Ludwig Krippahl, 2008 49 Gráficos 3D Função surf: traça o gráfico 3D sólido x=-10:10; y=-10:10; [xx,yy]=meshgrid(x,y); surf(xx,yy,xx.^2-yy.^2+xx.*yy)
50
Ludwig Krippahl, 2008 50 Gráficos 3D
51
Ludwig Krippahl, 2008 51 Gráficos 3D Resumo: usar meshgrid para criar as matrizes para o x e y a partir dos vectores. calcular o z a partir das matrizes criadas com o meshgrid. mesh(x,y,z) para desenhar a rede surf(x,y,z) para superfície sólida.
52
Ludwig Krippahl, 2008 52 Resumindo... Estruturas e vectores de estruturas Secção 6.1 Data Structures Leitura formatada Secção 14.2 C-Style I/O Functions if – elseif – else Secção 10 Statements (10.1 para o if) Recursividade Gráficos 3D Secção 15.1 Plotting Basics
53
Ludwig Krippahl, 2008 53 Dúvidas
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.