Trabalho Computacional Mecânica de Fluidos Ambiental Dúvidas: [email protected] Ext:3430 Página: https://fenix.ist.utl.pt/homepage/ist146730/mecanicados-fluidos-ambiental-2011-2012 (work in progress...) Guillaume Riflet Objectivos Programming 101 MS-excel macros Visual Basic for Applications (VBA) 101 https://fenix.ist.utl.pt/homepage/ist146730/mecan ica-dos-fluidos-ambiental-2011-2012 (work in progress...) Interesse para engenheiros do ambiente Utilização mais avançadas de ferramentas de folhas de cálculo. Em muitas circunstâncias, o excel (ou derivado) é a melhor ferramenta realizar determinadas tarefas. Qualquer empresa do sector público ou privado usa uma ferramenta de folha de cálculo. Muitas permitem utilizar macros. Linguagens de programação Visual Basic Fortran C/C++ C# Matlab Java (pôr linguagem de programação favorita) Diferenças entre VB e VBA VB VBA Compilado Interpretado IDE próprio (VS2Kx) IDE embebido no Office Bibliotecas e classes externas importadas Bibliotecas e classes nativas de Office Exemplo I Sheet1 Dica: Alt+F11 Exemplo I: glossário Source-code, código-fonte Compiler/interpreter, compilador/interpretador Subroutine, Subrotina String, Sequência de caracteres Propriedade dum objecto Excel macro, Macro de excel Exemplo II Sheet1 Exemplo III Sheet1 Exemplo III: glossário Argument, Argumento Argument passing, Passagem de argumento Argument type, Tipo de argumento Exemplo IV Sheet1 Exemplo IV: glossário Function, Função Function type, Tipo de função Exemplo V Sheet1 Exemplo V: glossário Variable, Variável Variable type, Tipo de variável Variáveis Dim Nome As Tipo Dim Aluno as String Dim Idade as Integer Dim Nota as Single Declaração Implícita/Explícita Function SafeSqr(num) TempVal = Abs(num) SafeSqr = Sqr(TempVal) End Function Function SafeSqr(num) TempVal = Abs(num) Option Explicit SafeSqr = Sqr(TemVal) End Function Tipos de variáveis I Data type Range Byte 0 to 255 Boolean True or False Integer -32,768 to 32,767 Long (long integer) -2,147,483,648 to 2,147,483,647 Single (single-precision floating-point) -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values Double (double-precision floating-point) -1.79769313486232E308 to -4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values Currency (scaled integer) -922,337,203,685,477.5808 to 922,337,203,685,477.5807 Tipos de variáveis II Decimal +/-79,228,162,514,264,337,593,543,950,335 with no decimal point; +/-7.9228162514264337593543950335 with 28 places to the right of the decimal; Date January 1, 100 to December 31, 9999 Object Any Object reference String (variable-length) 0 to approximately 2 billion String 1 to approximately 65,400 (fixed-length) Variant (with numbers) Any numeric value up to the range of a Double Variant (with characters) Same range as for variable-length String User-defined (using Type) The range of each element is the same as the range of its data type. Constantes •Public Const conMaxPlanets As Integer = 9 •Const conReleaseDate = #1/1/95# •Const conPi = 3.14159265358979 Constantes são valores que aparecem várias vezes no programa e que ao contrário das variáveis não alteram o seu valor. Projecto Modulo SubRotina Private Nome as Tipo Public Nome as Tipo Dim Nome as Tipo Sub-procedures & functions Sub Rotinas Funções Sub teste (File As String) Open (File) Function Hypotenuse (A As Integer, B As _ Integer) As Double ReadFirstLine (File) Hypotenuse = Sqr(A ^ 2 + B ^ 2) ... End Sub End Function Call teste (A) strX = Hypotenuse(Width, Height) Arrays Dim Conta(6) As Integer i=0 i=1 i=2 i=3 i=4 i=5 0 i=4 3 i=5 Dim Teste(3,3) As Boolean False True False Teste(0,1) = True ; Teste (2,0) = True False False False True False False Conta(0) = 12 ; Conta(3) = 21; Conta(5) = 3 12 i=0 0 i=1 0 i=2 21 i=3 Exemplo VI Sheet1 Estruturas de loop I Do While ... Loop For Each...Next Do While line < 10 Call ReadLine(line) Loop For Each File In folder.File() Call ReadFile (File) Next File line = line+1 For...Next For i = 0 To 10 For j = 0 to 10 Matriz(i,j) = cos(x) Next Next Exemplo VII Sheet1 Grupo de exercícios 1 1. 2. 3. 4. 5. Criem a função de um argumento de tipo double que retorne 3x*x – 2. Criem uma subrotina que teste a função para x=4 e x=25, escrevendo o resultado numa folha de excel. Concebam um ciclo for numa subrotina que escreva numa folha de excel os resultados de 3x*x*x + 4 para todos os x que pertençam ao intervalo [-30 , 50] com incrementos 2 em 2. Caso não tenham feito, repitam o exercício anterior usando um array. Repitam o exercício anterior, mas desta vez a função é 3x*x*x + 4 se o resultado for positivo e 0 (zero) caso contrário (usem um if). Gravem a macro dum gráfico com os resultados do exercício anterior (com x nas abscissas e os valores da função nas ordenadas). Vejam o código que resultou da gravação da vossa macro. Configurações regionais Atenção no que toca à linguagem nativa do office. SEN (português) ou SIN (inglês). Atenção às definições de separadores de casas decimais (3.14 ou 3,14) e de formatos de data (13/05/1980 ou 1980-05-13 ou...).