Trabalho Computacional Mecânica de Fluidos Ambiental aula 5 Guillaume Riflet, Dúvidas: [email protected] Ext:3430 Página: https://fenix.ist.utl.pt/homepage/ist146730/mecanica-dosfluidos-ambiental Sumário aula 1 subrotinas, funções, argumentos, variáveis, tipos de variáveis, arrays, ciclos while e for, Alcance (Public, Private) debug. https://fenix.ist.utl.pt/homepage/ist146730/mecanica-dosfluidos-ambiental Exercícios aula 1 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. Sumário aula 2 condições (if), Passagem de argumentos por valor ou por referência Interface Excel-VBA, Tipos eventos, userforms, Gravação de macros, Alguns objectos nativos de VBA para excel Apresentação da equação da difusão. Exercícios aula 2 Com um ciclo for e com uma condição if, escreva numa coluna de excel os valores da função seguinte, definida no intervalo [-50,50] com incrementos de 5 unidades de intervalo: f(x) = x * Sqr(-x) se x pertence a [-50,-10], f(x) = -10 * Sqr(10) + ( x^2 – 10^2) se x pertence a ]-10,20], f(x) = 300 – Sqr(10^3) - x^3 em caso contrário. Conceba uma subrotina que faça o gráfico automático da função a partir da gravação duma macro. Tente alterar a subrotina de criação de gráfico de modo a que receba um argumento contendo o número de linhas da coluna de excel a usar. Repita o primeiro exercício com um incremento de apenas 2 unidades de intervalo. Crie uma userform que peça ao utilizador o intervalo e o incremento da função e que tenha um botão que faça o gráfico correspondente. Exercícios aula 2 Escreva uma subrotina que contenha uma variável inteira a inicializada a 22. Tente incrementar a variável a chamando uma subrotina que use um argumento ByRef e chamando outra subrotina que use um argumento ByVal. Quais das subrotinas que é incrementa de facto a variável a? (recomendação: use o debugger para ver, passo a passo, a evolução das variáveis.) Escreva uma subrotina que contenha um array de reais. Inicialize o array com um ciclo for com valores da função f(x) = A * exp(-x) definidos no intervalo [-3, 4] e com um incremento de 0.3. Chame uma subrotina que inverta a ordem dos valores no array. (Deve usar ByRef ou ByVal?). Escreva os valores do array numa coluna de excel e faça o gráfico da função.. (Recomendação: use o debugger). Sumário aula 3 Aula mudada para LTI lemac (~40 min de atraso) Familiarização com o ambiente de desenvolvimento em VBA. Resolução de exercícios e exemplos em VBA. – – – – Ciclo for Condição if Manipulações de arrays Criação de subrotinas e de funções. Criação duma userform. Criação duma macro para fazer um gráfico. Exercícios aula 3 Programe a função f que varia no espaço e no tempo: f(x,t) = x^2 * t + Sqr(Abs(x)). Programe um array numa subrotina que inicialize a função f(x,t0) onde x pertença ao intervalo [0 1000] com um incremento dx=50 e t0=0.0. Escreva os resultados para vários instantes de t no interval [0.0 10.0] de f(x,t), um instante por linha, usando um ciclo for . Programe o gráfico com várias séries de resultados de f(x,t), (uma série por instante). Crie uma userform onde o utilizador possa inserir os incrementos de espaço e de tempo, (dx e dt) e onde possa definir o comprimento de a duração do domínio de f. Sumário aula 4 Finalização do exercício da aula anterior (userform + gráfico). Ficou por finalizar (aula 5). Métodos numéricos diferenças finitas (explícito, implícito, centrado) para 1a e 2a derivada. Ordem do erro. Conteúdo programado aula 5 Finalização do exercício da aula anterior (gráfico). Dedução da equação algébrica por diferenças finitas (dt e dx constantes) da equação do calor. Condição de positividade (e estabilidade). Condições de fronteira de fluxo diffusivo nulo. Condição inicial. Emissão instantânea. Emissão contínua. Conteúdo das aulas seguintes Programação do trabalho computacional para mfa Alguns excertos úteis de código VBA 0 Manuseamento de strings: Dim texto as string texto = "ba" ‘Escreve na célula « b-a-ba, abcd » Cells(2,2) = "b-a-" & texto & ", abcd" ‘ou ... Cells(2,2) = "b-a-" + texto + ", abcd" Alguns excertos úteis de código VBA I Manuseamento de Userforms: UserForm1.Show (mostra) UserForm1.Hide (esconde) UserForm1.TextBox1.Textlength (tamanho da entrada em unidades de caracteres de texto) UserForm1.TextBox1.Value (valor da entrada) Alguns excertos úteis de código VBA II Delecção de células, linhas e colunas: Range ("A1:B3"). ClearContents (apaga janela de células da tabela indo de A1 até B3). Range("A1:A1").EntireColumn.ClearContents (apaga coluna inteira contendo a célula A1). Range(Range("A1:A1"), Range("A1:A1").End(xlDown)).ClearContents (apaga o conjunto de células contíguas escritas da tabela, a começar da célula A1 para baixo). Range(Range("D3:D3"), Range("D3:D3").End(xlDown).End(xlToRight)).ClearContents (apaga o conjunto de células contíguas escritas na tabela, a começar da célula D3 até à última para baixo e para a direita). Alguns excertos úteis de código VBA III Manuseamento de gráficos: ‘Faz um gráfico simples (finalline é a última linha da tabela que contem os dados. A2 é a primeira linha.) Dim finalline as integer ActiveSheet.Shapes.AddChart.Select ActiveChart.SetSourceData Source:=Range("Sheet1!A2:N" & finalline) ActiveChart.ChartType = xlLine ActiveChart.PlotBy = xlRows ‘Apaga todos os gráficos Dim chart as ChartObject For Each Chart in ActiveSheet.ChartObjects Chart.Delete Next Alguns excertos úteis de código VBA IV Manuseamento de gráficos: ‘Faz um gráfico usando a subrotina makegraphic do ficheiro GraficoSampleCode.xls disponível na página 'Call makegraphic(número de linhas, número de colunas, _ ' índice da primeira linha, índice da primeira coluna, _ ' valor maximo da escala nas ordenadas do gráfico) Call makegraphic(14, 5, 2, 7, 800) 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...).