55
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Embed Size (px)

Citation preview

Page 1: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009

Programação para as Ciências Experimentais

2008/9

Teórica 13

Page 2: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 2

Na aula de hoje... Excel

Usar dados dinâmicos• Trocar dados com o Octave

“Array formulas”, formulas com vectores ou matrizes.

Gráficos Consulta de tabelas Algumas funções úteis

• Macros, Histogramas, Referência dinâmica (OFFSET), Formatação condicional, goal seek

Page 3: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 3

Excel e Octave

Exemplo: contar microorganismos no ar (ver aula 7)

function cs=colonias(buracos, ufcs, tentativas)

function u=contaufcs(buracos,cs,tentativas)

Page 4: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 4

Contar microorganismos no ar

Bomba aspira ar. Orifícios sobre placa. Contar colónias. Estimar UFCs.

Page 5: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 5

Contar microorganismos no ar

Problema:• Podem entrar vários esporos ou bactérias

pelo mesmo orifício, resultando numa só colónia.

Ar

Page 6: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 6

Excel/Calc e Octave

function cs=colonias(buracos, ufcs, tentativas)

Devolve o número de colónias estimado (média das tentativas) para o numero de UFCs dado

Page 7: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 7

Excel/Calc e Octave

function u=contaufcs(buracos,cs,tentativas)

Estima o numero de UFCs (média das tentativas) a partir no numero de colónias (usa a função anterior para experimentar valores).

Page 8: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 8

Excel/Calc e Octave

Esquema:• Temos os dados no Excel

• Gravamos num ficheiro txt

• O Octave lê, estima os UFCs, e grava um ficheiro

• O Excel actualiza a informação

Page 9: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 9

Excel/Calc e Octave

Exportar dados do Excel• Forma mais prática: seleccionar, paste no

notepad, gravar.

Ler com o Octave• Ter atenção ao formato do ficheiro...

Page 10: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 10

Excel/Calc e Octave

Exportar dados do Excel Copy (ctrl+c)

Page 11: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 11

Excel/Calc e Octave

Exportar dados do Excel Copy (ctrl+c) Paste (ctrl+v) Atenção aos tabs

No wordpad

Ficam duas

colunas

Page 12: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 12

Excel/Calc e Octave

Exportar dados do Excel Copy (ctrl+c) Paste (ctrl+v) Atenção aos tabs Gravar

• Dados.txt

Page 13: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 13

Excel/Calc, ler os dados

function [orif,cols]=lerdados(fich)fid=fopen(fich,"r");orif=fscanf(fid,"Orificios\t%i\n“,”C”);cols=[];fgetl(fid); while !feof(fid)

c=fscanf(fid,"%i“,”C”);cols=[cols,c];

endwhilefclose(fid);endfunction

Abre o ficheiro e lê o número de orifícios.

Page 14: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 14

Excel/Calc, ler os dados

function [orif,cols]=lerdados(fich)fid=fopen(fich,"r");orif=fscanf(fid,"Orificios\t%i\n“,”C”);cols=[];fgetl(fid); while !feof(fid)

c=fscanf(fid,"%i“,”C”);cols=[cols,c];

endwhilefclose(fid);endfunction

Salta “Colónias:”

Page 15: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 15

Excel/Calc, ler os dados

function [orif,cols]=lerdados(fich)fid=fopen(fich,"r");orif=fscanf(fid,"Orificios\t%i\n“,”C”);cols=[];fgetl(fid); while !feof(fid)

c=fscanf(fid,"%i“,”C”);cols=[cols,c];

endwhilefclose(fid);endfunction

Lê os valores

Page 16: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 16

Excel/Calc e Octave, calcular

function calculaegrava(orif,tentat,fich,cols)

fid=fopen(fich,"w");

for f=1:length(cols)

u=contaufcs(orif,cols(f),tentat);

fprintf(fid,"%i\t%i\r\n",cols(f),u);

endfor

fclose(fid);

endfunction

Calcula os UFCs para cada valor no vector de colónias, e grava no ficheiro

Page 17: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 17

Excel/Calc e Octave, calcular

function calculaegrava(orif,tentat,fich,cols)

fid=fopen(fich,"w");

for f=1:length(cols)

u=contaufcs(orif,cols(f),tentat);

fprintf(fid,"%i\t%i\r\n",cols(f),u);

endfor

fclose(fid);

endfunction

Mudar de linha em DOS e Windows (em Linux só é preciso \n)

Page 18: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 18

Excel/Calc e Octave, calcular

Page 19: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 19

Excel/Calc e Octave, actualizar

Basta agora um script para actualizar (actualiza.m), que lê os dados de dados.txt, calcula com 20 tentativas cada e grava em ufcs.txt:

[orif,d]=lerdados("dados.txt")

calculaegrava(orif,20,"ufcs.txt",d)

Page 20: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 20

Excel/Calc e Octave, actualizar

Agora temos que importar os resultados na folha de cálculo.

Page 21: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 21

Excel/Calc e Octave, actualizar

Importar os resultados

Page 22: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 22

Excel/Calc e Octave, actualizar

Importar os resultados

Page 23: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 23

Excel/Calc e Octave, actualizar

Importar os resultados

Page 24: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 24

Excel/Calc e Octave, actualizar

Advanced para conversão do formato. Por exemplo . em vez de , nos números.

Page 25: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 25

Excel/Calc e Octave, actualizar

Advanced para conversão do formato. Por exemplo . em vez de , nos números.

Page 26: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 26

“Array formulas”

Dois tipos:• Fórmulas que operam sobre um vector ou

matriz de elementos

• Fórmulas que devolvem uma matriz de elementos

Page 27: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 27

“Array formulas”

Fórmulas que operam sobre um vector ou matriz de elementos

Exemplo: Quantos alunos melhoraram do primeiro para o segundo teste.• Teste 1 em A3:A13, teste 2 em B3:B13

• =SUM(IF(B3:B13>A3:A13;1;0))

• ctrl+shift+enter para indicar que é uma fórmula para vectores

Page 28: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 28

“Array formulas”

• Teste 1 em A3:A13, teste 2 em B3:B13

• =SUM(IF(B3:B13>A3:A13;1;0))

• ctrl+shift+enter para indicar que é uma fórmula para vectores

• Percorre todas as células, comparar elemento a elemento, somar 1 cada vez que a condição é verdadeira e devolve a soma.

Page 29: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 29

“Array formulas”

Fórmulas que devolvem uma matriz de elementos

Exemplo: a inversa de uma matriz: MINVERSE

Page 30: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 30

“Array formulas”

Exemplo: a inversa de uma matriz em A1:B3• Seleccionar as células onde aparecerá o

resultado

• =MINVERSE(A1:B3)

• ctrl+shift+enter

Page 31: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 31

Gráficos

Para fazer um gráfico basta seleccionar as células e carregar no botão• Alguns detalhes:

• Com valores de X e Y tem que ser sempre o XY(Scatter)

• Se temos valores em colunas com formatos diferentes, ou vários conjuntos X e Y o mais prático é fazer o gráfico para a primeira série e depois acrescentar outras com copy e paste special

Page 32: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 32

Gráficos

Exemplo: comparar x2 com x3

• Calcular pontos x, y

• Seleccionar os do x2, traçar gráfico

• Seleccionar os do x3, copy

• Seleccionar gráfico, Edit, Paste Special (no Excel)

• Ou adicionar série

Page 33: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 33

Gráficos

Exemplo: comparar x2 com x3

• Seleccionar gráfico, Edit, Paste Special

• Especificar nova série com valores de x na primeira coluna:

Page 34: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 34

Consultar tabelas (VLOOKUP)

VLOOKUP(Valor a encontrar;

Tabela;

Índice da coluna a devolver;

Procura por intervalo (True/False))

Exemplo: encontrar a nota de um aluno

Page 35: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 35

Consultar tabelas (VLOOKUP)

Exemplo: encontrar a nota de um aluno =VLOOKUP(C9;A1:B6;2;FALSE)

• Não queremos que devolva um valor dentro do intervalo, mas apenas o valor exacto

Page 36: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 36

Consultar tabelas (VLOOKUP)

Exemplo: Altura versus peso =VLOOKUP(H10;I3:J7;2;TRUE) Se não for esse o valor exacto para a

altura, queremos o peso aproximado Neste caso dá o último que encontrou

antes de passar o valor pedido.

80

Page 37: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 37

Outras funções úteis

SUM, AVERAGE, SUMIF, COUNT, COUNTIF

AND, OR (para usar no IF, por exemplo) LINEST para regressão linear Receita:

• Seleccionar 2x3

• Linest(Ys, Xs, True, True), ctrl+shift+enter

Page 38: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 38

Outras funções úteis

LINEST para regressão linear• Seleccionar 2x3

• Linest(Ys, Xs, True, True), ctrl+shift+enter

• Ver no help

80

m b

erro m erro b

r^2 erro y

Page 39: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 39

Outras funções úteis

Como usar funções que não conhecem:• Ver no help.

• Usar Insert, Function, e seguir as instruções.

• Procurar no Google.

Page 40: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 40

Macros

«Macro-instrução»• Conjunto de instruções que é executado

como uma só (significado inicial, 1970s).

• Hoje em dia tem um significado mais geral, refere-se a qualquer programa escrito numa linguagem usada para controlar uma aplicação. No caso do Excel, Visual Basic.

Page 41: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 41

Macros

Gravar macro:

Page 42: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 42

Macros

Gravar macro:• Tools->Macro->Record new Macro

• Dar nome (e.g. Ordenar).

Page 43: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 43

Macros

Gravar macro:• Tools->Macro->Record new Macro

• Dar nome (e.g. Ordenar).

• No final, carregar no stop

Page 44: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 44

Macros

Alternativas para correr a macro:• Tools->Macro->Macros->Run

• Usar a combinação de teclas definida quando gravámos (ou definir uma em Tools->Macro->Macros->Options

• Atribuir a macro a um objecto na folha (um botão, um desenho). Para um desenho, click botão da direita e “Assign Macro”.

Page 45: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 45

Macros

Bom para tarefas repetitivas de formatação, ordenação, reposicionar dados, etc.

Page 46: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 46

Macros

Para ver o código:• Tools->Macro->Visual Basic Editor

• Modules

Page 47: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 47

Macros

Sub Ordena()

Columns("A:B").Select

Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _

OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

DataOption1:=xlSortNormal

End Sub

Page 48: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 48

Histogramas

Função FREQUENCY(• Dados;

• Separadores)

É uma função que devolve um vector de dimensão igual a um mais o número de separadores, com as contagens dos elementos entre os separadores (ou maiores que o último)

Page 49: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 49

HistogramasDados Separadores

FREQUENCY

Page 50: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 50

Referências dinâmicas

OFFSET(• Célula de referência, a partir da qual

contamos as linhas e colunas;

• Linhas;

• Colunas;

• Altura;

• Largura) Tem de ser usada como argumento de

outra função (e.g. SUM, AVERAGE...)

Page 51: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 51

Referências dinâmicas

Exemplo: OFFSET(A1,3,5,2,4)

• Grupo de 2x4 (altura x largura) células a começar da 3ª linha e 5ª coluna a contar da A1.

Page 52: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 52

Referências dinâmicas

Exemplo:

Page 53: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 53

Referências dinâmicas

É útil para fazer depender a referência de um valor calculado. • Por exemplo, com COUNTA, que conta o

número de células não vazias. Exemplo

• =SUM(OFFSET(A1;1;1;COUNTA(B:B)-1;1))

• Soma a coluna dos gastos, qualquer que seja o numero de entradas (o -1 desconta o cabeçalho “Gastos”).

Page 54: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 54

Formatação Condicional

Seleccionar células Format->Conditional Formatting Especificar condições e formatação se

as condições forem preenchidas (Exemplo: a vermelho e bold se o gasto for maior que €100).

Page 55: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 13

Ludwig Krippahl, 2009 55

Dúvidas

Trabalho 2 Octave