Ciclos e Funções Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2008/2009.

Slides:



Advertisements
Apresentações semelhantes
Movimento em I dimensão
Advertisements

Programação em Java Prof. Maurício Braga
Amintas engenharia.
Amintas engenharia.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 4.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 9.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 2.
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 4.
29 Outubro 2005Funções: Zeros, Máximos e Mínimos1 Jorge Cruz DI/FCT/UNL Programação para as Ciências Experimentais 1º Semestre 2005/2006.
9 de Março de 2006Trajectória de um Projéctil1 Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2005/2006.
Introdução aos Computadores e à Programação DI-FCT-UNL-2005/2006 Introdução 1.1 Octave Funções, Condições e Ciclos.
Integração Numérica – Áreas e Equações
16 Março 2006Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Pedro Barahona DI/FCT/UNL.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 11.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 4.
Vectores (e Listas) : Pesquisa e Ordenação
6 Outubro de 2005Trajectória de um Projéctil1 Jorge Cruz DI/FCT/UNL Introdução aos Computadores e à Programação 1º Semestre 2005/2006.
2 Dezembro de 2005Simulação com Modelos Diferenciais1 Jorge Cruz DI/FCT/UNL Programação para as Ciências Experimentais 1º Semestre 2005/2006.
17 Novembro 2006Algoritmos de Ordenação e Pesquisa Aplicação a Listas de Registos 1 Jorge Cruz DI/FCT/UNL Introdução aos Computadores e à Programação 1º
1 Funções Trajectória de Projéctil DI/FCT/UNL 1º Semestre 2004/2005.
Funções, Execução Condicional, Recursividade e Iteração
24 Novembro 2006Folha de Cálculo 11 Jorge Cruz DI/FCT/UNL Introdução aos Computadores e à Programação 1º Semestre 2006/2007.
Recursividade e Iteração Factorial, Fibonacci e Maior Divisor Comum
Ciclos, Vectores e Gráficos Simulação da Queda de Corpos II
11 de Maio de 2006Listas e Ordenação1 Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2005/2006.
31 de Março de 2005Trajectória de um Projéctil - Gráficos e Funções1 Trajectória de Projéctil –Gráficos e Funções Pedro Barahona DI/FCT/UNL Março 2005.
Vectores, Gráficos e Funções Trajectória de um Projéctil
Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Introdução 1.1 Octave Introdução.
1 Funções, Expressões e Excepções Trajectórias Óptimas DI/FCT/UNL 1º Semestre 2004/2005.
Ciclos e Funções Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2007/2008.
9 Março 2007Matrizes e Gráficos - Trajectória de um Projéctil1 Matrizes e Gráficos Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores.
Introdução aos Computadores e à Programação DI-FCT-UNL-2005/2006 Introdução 1.1 Octave Introdução.
Funções, Condições e Ciclos 3.1Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Octave Funções, Condições e Ciclos.
Integração Numérica: Equações Diferenciais
1 Introdução (Informal) à Programação DI/FCT/UNL 1º Semestre 2004/2005.
Pesquisa e Ordenação de Vectores
Introdução (Informal) à Programação
16 Dezembro 2005Folha de Cálculo - Conclusão1 Folha da Cálculo - Conclusão Jorge Cruz DI/FCT/UNL Programação para as Ciências Experimentais 1º Semestre.
2 de Junho de 2005Conclusão1 Pedro Barahona DI/FCT/UNL Junho 2005.
5 Março 2007Ciclos e Funções - Trajectória de um Projéctil1 Ciclos e Funções Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores.
Matrizes e Gráficos Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 1º Semestre 2007/2008.
1 Conclusão DI/FCT/UNL 1º Semestre 2004/ Ciclos de Simulação A técnica usada no exemplo da queda livre pode ser utilizada para trajectórias a duas.
Introdução aos Computadores e à Programação
Matrizes e Gráficos Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2008/2009.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
EQUAÇÕES POLINOMIAIS Prof. Marlon.
FUNÇÃO MODULAR.
Programação Baseada em Objectos Desenho de TAD
Classes e objetos P. O. O. Prof. Grace.
Progressão Aritmética (PA) Professor : Eduardo Jatobá
Comunicação Inclusiva Acessibilidade e Programação Web
Cálculo Numérico / Métodos Numéricos
Movimentos sob a acção de uma força resultante constante
Introdução teórica A modulação em freqüência consiste na variação da freqüência da portadora proporcionalmente ao sinal de informação. Dado o sinal modulador.
Introdução aos Computadores e Programação DI-FCT-UNL-2003/2004
20/21 Abril de 2004Funções, Expressões e Excepções1 Pedro Barahona DI/FCT/UNL Abril 2004.
Linguagem e Ambiente Scratch
Campus de Caraguatatuba Aula 2: Somatório e Produtório
Planilha Eletrônica - Excel
Programação e Aplicações Gráficas
Introdução aos Computadores e Programação DI-FCT-UNL-2003/2004
23/24 Março de 2004Simulação da Queda de Corpos1 Pedro Barahona DI/FCT/UNL Março 2004.
Fundamentos de linguagens de programação
1 Simulação da Queda de Corpos DI/FCT/UNL 1º Semestre 2004/2005.
17 Março de 2005Simulação da Queda de Corpos1 Pedro Barahona DI/FCT/UNL Março 2004.
7 de Abril de 2005Funções, Expressões e Excepções1 Pedro Barahona DI/FCT/UNL Abril 2004.
13/14 Abril de 2004Trajectória de um Projéctil1 Trajectória de Projéctil - Funções Pedro Barahona DI/FCT/UNL Março 2004.
Transcrição da apresentação:

Ciclos e Funções Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2008/2009

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 2 Funções Em geral, as linguagens de programação, além de oferecerem funções pré-definidas (ex: sqrt(x), cos(x),…) permitem que o programador defina as suas próprias funções. A ideia é abstrair numa função (com nome, inputs e outputs) todos os procedimentos necessários para calcular os resultados pretendidos, isto é, calcular os outputs a partir dos inputs. Esta forma de proceder, tem muitas vantagens, já que permite: –Estruturar um programa em componentes básicos; –Reutilizar esses componentes básicos noutros programas. De notar que qualquer linguagem contem várias funções pré-definidas, como por exemplo as funções max/2 e sqrt/1 já utilizadas. função EntradaResultados

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 3 Funções e Passagem de Parâmetros Numa linguagem de programação uma função tem de ser definida, para poder ser invocada (chamada) posteriormente, normalmente em vários pontos de um programa ou de outra função. Nos casos mais simples podemos considerar numa função –Os seus parâmetros de entrada –O valor da função, obtido a partir dos parâmetros Existem duas formas clássicas de passagem de parâmetros: –Por valor –Por referência Em Octave, os parâmetros são geralmente passados por valor (com uma excepção - nomes de funções), pelo que começamos por analizar este modo de passagem de parâmetros.

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 4 Passagem de Parâmetros por Valor Exemplo: Consideremos a função triplo (que, como o nome indica, calcula o triplo do parâmetro de entrada). A sua definição (em Octave) é feita através da especificação function v = triplo(u) v = 3*u endfunction; Se chamada com o valor 5, normalmente o valor que uma determinada variável tem na altura da chamada da função, esse valor é triplicado e retornado. Por exemplo, se invocarmos a função na sequência (pode ser ao terminal) x = 5, y = 7, y = triplo(x); x, y,... os valores de x e y reportados no terminal são x = 5 y = 7 x = 5 y = 15.

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 5 Passagem de Parâmetros por Valor Exemplo: A computação da função triplo pode ser assim explicada: 1.Quando começa a ser executada a função triplo, são criadas duas novas variáveis, u e v, que são locais à função f. 2.O valor inicial da variável (local) u é o valor do parâmetro de chamada. Neste caso, é o valor da variável (do programa) x. 3.A instrução v = 3*u apenas envolve as variáveis locais u e v. 4.Após a execução da função, a variável v, contem o valor a ser retornado ao programa principal. 5.No programa principa esse valor é atribuído à variável (de programa) y...., x = 5; y = 7; y = triplo(x); x, y,... function v = triplo(u) v = 3*u; endfunction;

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 6 Passagem de Parâmetros por Valor NOTA: As variáveis que aparecem na definição da função são locais a essa função. Num programa grande, com várias funções, é inevitável que variáveis em funções diferentes tenham o mesmo nome (embora os nomes das variáveis devam ser escolhidos para evitar essas coincidências). Assim, elas podem ter o mesmo nome das variáveis de programa, que não serão confundidas com elas.( as variáveis x, y do programa principal não se confundem com as variáveis x, y da função) x = 5, y = 7 e z = , x = 5; y = 7; z = triplo(x); x, y, z,... function y = triplo(x) x = 3 * x; y = x; endfunction;

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 7 Passagem de Parâmetros por Referência Outras linguagens (Pascal, C, C ++,...) permitem a passagem de parâmetros por referência. Neste caso, o que é passado à função é uma referência (apontador) à variável do programa principal, que pode ser alterada pela função. Por exemplo se o parâmetro x fosse passado por referência (indicado com uma notação fictícia)..., x = 5; z = f(x); x, z,... function y = f(ref x) x = 2*x; y = x; endfunction; os valores de x e z reportados no terminal, após a chamada da função, seriam x = 10 (sendo passada por referência, a variável x referida na função é a mesma variável que a variável x do programa); e z = 10 (como anteriormente, o valor da função é atribuído à variável z do programa principal)

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 8 Funções em Octave Em geral, a especificação de uma função tem de ser visível do programa de onde a função é chamada. Em várias linguagens de programação, a função e o programa podem ser especificados no mesmo ficheiro, garantindo-se essa visibilidade. Quando são especificados em ficheiros separados, no ficheiro programa são especificados os ficheiros onde estão especificadas as funções utilizadas. Em Octave, a situação é diferente. A especificação de uma função com nome deve ser feita num ficheiro chamado, que deve ser colocado na pasta (folder) corrente. Essa pasta pode ser modificada atarvés da instrução cd (change directory). Por exemplo, se pretendermos trabalhar com uma pasta my_files, mantida numa caneta flash, e se a caneta for instalada no computador como o dispositivo E:, então para especificar essa pasta como a pasta corrente deverá usar-se o comando cd E:\my_files.

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 9 Funções de Funções em Octave Uma vez especificada, uma função pode ser utilizada na especificação de outras funções, ou nos próprios parâmetros de entrada de outras ou da mesma função. Por exemplo, definidas as funções dobro e triplo, nos respectivos ficheiros dobro.m e triplo.m Pode fazer-se a chamada z = dobro(triplo(5)) ou definir a nova função sextuplo Ficheiro dobro.m function y = dobro(x) y = 2*x endfunction Ficheiro triplo.m function y = triplo(x) y = 3*x endfunction Ficheiro sextuplo.m function y = sextuplo(x) y = dobro(triplo(x)) endfunction

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 10 Funções Múltiplas em Octave A passagem de parâmetros por referência permite que uma função (ou procedimento) passe vários valores para o programa que a invocou. Basta passar por referência as variáveis onde esses valores devem ser colocados. O Octave, não suporta passagem de parâmetros por referência. A computação de vários resultados numa função é conseguida pela computação de um vector de resultados. Por exemplo, se se pretender que a função f, com argumento x, retorne dois valores, y1 e y2, especifica-se a função como function [y1,y2] = f(x)... y1 =...; y2 =...;... endfunction;

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 11 Funções Múltiplas em Octave Exemplo: Para um ângulo alpha (expresso em radianos) obter numa só função os valores do seu seno, coseno, tendo em atenção que function [s,c,t] = trigonom(x) s = sin(x); c = cos(x); t = tan(x); endfunction; Podemos agora exemplificar a utilização de funções na resolução de um problema de engenharia relativo à trajectória de um projéctil.

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 12 Máximos e Mínimos de uma Função Antes de abordar o problema da trajectória de um projéctil, vamos estudar o problema de obter o máximo / mínimo de uma função, que aliás é utilizado para se obter o zero de uma outra função (utilizados depois no problema da trajectória). Vamos pois determinar a solução da equação x log(x) = 5, que pode ser considerado como a determinação do zero da função g(x) = x log(x) – 5. Sendo a função contínua no intervalo ]0, [, a função terá um zero no intervalo [1,5] já que g(1) = 1 log(1) – 5 = -5 e g(5) = 5 log(5) – Assim queremos especificar a função [z,d] = zero(lo,up) que, no intervalo [lo, up], determina um zero, z, da função g, com um desvio, d, próximo de zero. Isto é, lo z up e g(z) = d 0

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 13 Máximos e Mínimos de uma Função A forma mais simples, mas não muito eficiente de determinar o zero da função é varrer o intervalo [lo, up], testando vários valores de x nesse intervalo e reportar aquele em que a função g(x) está mais próxima de zero. Para esse efeito podemos usar o ciclo que testa os valores x = lo, lo+dx, lo+2dx, lo+3dx,..., up e actualiza o erro d, mantendo o erro mais pequeno encontrado no varrimento De notar que se obtem o mínimo do valor absoluto de g(x), pois o erro é sempre uma medida positiva. x lo; e g(lo); enquanto x <= up fazer y = |g(x)|; se y > min e y; z x; fim se: x x + dx; fim enquanto

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 14 Máximos e Mínimos de uma Função O ciclo anterior pode agora ser utilizado na definição da função zero, que recebe como parâmetros os limites do intervalo, lo e up, bem como a precisão dx, com que se pretende varrer esse intervalo. Em Octave, terão de ser criados os ficheiros zero.m e g.m, com o seguinte código function y = g (x); y = x * log(x) – 5; endfunction; Ficheiro g.m function [z,d] = zero(lo, up, dx); x = lo; d = g(lo); while x <= up y = abs(g(x)); if y < d d = y; z = x; endif x = x + dx; endwhile; endfunction; Ficheiro zero.m

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 15 Máximos e Mínimos de uma Função Tendo em atenção que o ciclo testa todos os valores entre lo e up, com uma separação dx, o ciclo enquanto pode ser substituido por um ciclo para que, sendo equivalente, apresenta uma sintaxe mais agradável. Assim em vez de pode utilizar-se o ciclo: ou na sintaxe Octave: x lo; d g(lo); enquanto x <= up fazer y = |g(x)|; se y > min d y; z x; fim se: x x + dx; fim enquanto d g(lo); para x = lo: dx: up fazer y = |g(x)|; se y > min d y; z x; fim se: fim fazer e = g(lo); for x = lo: dx: up y = |g(x)|; if y > min e y; z x; endif: endfor

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 16 Máximos e Mínimos de uma Função Uma versão mais eficiente, faz parar o ciclo de varrimento quando o erro se torna suficentemente pequeno. Neste caso, arbitra- se um erro suficientemente pequeno e pode reescrever-se o ciclo como Um ciclo enquanto (que se execute pelo menos uma vez) pode ser re-escrito como um ciclo repetir.. até equivalente mas com uma sintaxe mais intuitiva, pois testa-se no fim do ciclo a condição de continuação (que é oposta à condição do ciclo enquanto). Neste caso, poderá utilizar-se o ciclo ao lado em que a condição d >= erro é substituida por d < erro no ciclo repetir até. x lo; d g(lo); enquanto d >= erro fazer y = |g(x)|; se y > min d y; z x; fim se: x x + dx; fim enquanto; x lo; d g(lo); repetir y = |g(x)|; se y > min d y; z x; fim se: x x + dx; até d < erro;

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 17 Máximos e Mínimos de uma Função A função zero pode agora ser substituída por uma versão mais eficiente, que recebe como parâmetro adicional o erro permitido e utiliza a sintaxe do ciclo repetir... até, que em Octave se especifica como do... until. Em Octave, terão de ser criados os ficheiros zero.m e g.m, com o seguinte código Nota: No caso de o erro ser muito pequeno a condição de paragem deverá ser (d up). Porquê? function [z,d] = zero2(lo, up, dx, erro); x = lo; d = abs(g(lo)); do y = abs(g(x)); if y < d d = y; z = x; endif x = x + dx; until d < erro; endfunction; Ficheiro zero_2.m

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 18 Trajectória de um Projéctil Passemos agora à especificação do problema da trajectória de um projéctil. Dada uma altura inicial (y 0 ) uma velocidade inicial (v 0 ) e um ângulo inicial de lançamento ( ), com base no modelo da trajectória apresentado e para uma dada precisão (dx), determinar a distância máxima (d max ) e a altura máxima (h max ) atingidas pelo projéctil. Algoritmo de Simulação da Trajectória de um Projéctil Entrada Altura Inicial : y 0 Velocidade Inicial : v 0 Ângulo Inicial : Precisão : dx Resultados Distância Máxima : d max Altura Máxima : h max

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 19 Modelação do Problema Um projéctil é lançado de uma altura de y 0 metros, com um ângulo inicial de lançamento de radianos e com uma velocidade inicial de v 0 metros por segundo. A trajectória do projéctil em coordenadas (x,y) pode ser modelada através da seguinte equação: v0v0 (0,0) x y y0y0 a f(a)f(a) d max h max

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 20 Resolução Informal Problema: determinar a distância máxima (d max ) e a altura máxima (h max ) atingidas pelo projéctil. Pode-se simular a trajectória do projéctil usando a função f para calcular o valor de y correspondente a cada valor de x. –Considera-se o ponto inicial da trajectória x 0 = 0: (x 0, y 0 ) –Considera-se uma sequência de valores de x (x 1, x 2,…) para os quais se calcula o respectivo valor de y (y 1, y 2,…) usando a fórmula indicada. –Termina-se o cálculo quando aparecer o primeiro ponto da trajectória com o valor de y negativo. Os valores da distância máxima e da altura máxima podem ser aproximados respectivamente pelos valores maximos de x e y obtidos nos pontos calculados da trajectória.

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 21 Resolução Informal A simulação da trajectória do projéctil pode ser simulada por um ciclo em que: O último ponto considerado é o primeiro (x 11 ) com y negativo: y 10 > 0 e y 11 < 0 A distância máxima (d max ) é aproximada pelo maior valor de x: d max x 11 A altura máxima (h max ) é aproximada pelo maior valor de y: h max y 6 A precisão das aproximações depende dos pontos da trajectória calculados: –se a distância dx entre dois pontos consecutivos diminuir, a precisão aumenta (x0,y0)(x0,y0) x y (x 1, y 1 ) (x 2, y 2 ) (x 11, y 11 ) (x 6, y 6 ) h max ^ d max ^

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 22 Problemas e Algoritmos Uma vez compreendida a especificação de um problema, e obtido um método informal de o resolver, há que especificar um algoritmo formal, que possa vir a ser a base do programa para resolver o problema inicial. Para especificar um algoritmo deveremos 1.Definir quais as variáveis necessárias, bem como o seu significado. As variáveis deverão ser sempre inicializadas antes de ser utilizadas ! 2.Decompor o algoritmo em componentes suficientemente simples para serem programadas facilmente. Tipicamente num algoritmo podem definir-se as seguintes fases 1.Inicialização de Variáveis 2.Corpo do algoritmo (que pode ser ainda mais decomposto) 3.Apresentação de Resultados

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 23 Simulação de Trajectórias - Variáveis No presente problema de trajectórias podemos identificar as seguintes variáveis, com os correspondentes significados: VariávelValor InicialSignificado g9.8 aceleração da gravidade yoentrada altura inicial v0entrada velocidade inicial alfaentrada ângulo inicial dxentrada precisão desejada x0 distância do projéctil num dado instante yy0 altura do projéctil nesse dado instante dmax0 distância máxima da trajectória hmax0 altura máxima da trajectória

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 24 Algoritmo de Simulação O corpo do algoritmo corresponde a um ciclo em que vão sendo obtidos valores de x e de y até se obter um valor de y negativo. Em simultâneo vão sendo considerados os valores máximos de x e de y, a que corresponderão os valores finais de dmax e hmax A apresentação dos resultados neste caso corresponde a escrever os valores de dmax e hmax (no terminal). enquanto y > 0 fazer x x + dx; y x * tan(alfa)-(g*x^2)/(2*v 0 ^2*cos(alfa)^2)+y 0 ; se hmax < y hmax max fim se; % dmax é obtido pelo valor final de x fim enquanto dmax x sai(dmax); sai(hmax);

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 25 Programa Octave % Inicialização de Variáveis g = 9.8; % aceleração da gravidade y0 = input(" Qual a altura inicial (m)? "); v0 = input(" Qual a velocidade inicial (m/s)? "); alfa = input(" Qual o angulo inicial (rad)? "); dx = input(" Qual a precisao (m)? "); x = 0 ; dmax = 0; % distância máxima da trajectória y = 0; hmax = 0; % altura máxima da trajectória % Ciclo de Simulação while y >= 0 x = x + dx; y = x*tan(alfa)-(g*x^2)/(2*v0^2*cos(alfa)^2)+y0; hmax = max(y, hmax); endwhile dmax = x; % Apresentação de Resultados disp("Distância maxima da trajectoria (m):"); disp(dmax); disp("Altura maxima da trajectoria (m):"); disp(hmax);

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 26 Utilização de Funções No exemplo da trajectória de um projéctil, o cálculo do valor de y correspondente a cada valor de x pode ser abstraído numa função f responsável por executar esses cálculos correctamente. Mais interessantemente, todo o cálculo da altura e distância máximas de uma trajectória pode ser abstraído numa função maximos, que por sua vez utiliza a função f. f Entrada x, y 0, v 0, Resultado y maximos Entrada x, y 0, v 0, Resultados dmax, hmax

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 27 Exemplo de Funções: Altura/4 Como vimos, podemos determinar a altura y da trajectória de um projéctil através da expressão abaixo. Essa determinação pode ser especificada na função altura, definida abaixo e guardada num ficheiro de nome altura.m Uma vez definida, esta função pode ser utilizada para definição doutras funções. Ficheiro altura.m function y = altura(x, y0, v0, alfa) g = 9.8; a = alfa * pi / 180; y = x*tan(alfa)-(g*x^2)/(2*v0^2*cos(alfa)^2)+y0; endfunction

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 28 Exemplo de Funções Múltiplas: Máximos/4 Um exemplo de função múltipla é a função maximos, que determina a distância e a altura máxima da trajectória de um projectil nas condições anteriores, e que é apresentada abaixo Ficheiro maximos.m function [dmax, hmax] = maximos(y0, v0, alfa, dx) x = 0 ; dmax = 0; y = y0; hmax = y0; while y > 0 x = x + dx; y = altura(x, y0, v0, alfa); hmax = max(y, hmax); endwhile dmax = max(x, dmax); endfunction

9 Março 2009 Ciclos e Funções - Trajectória de um Projéctil 29 Exemplo de Funções Múltiplas em Octave Esta função pode agora ser chamada do programa principal, com vários valores de y0, v0, alfa e dx. Por exemplo, >> [d,h] = maximos(0,10,45,0.1) d = h = Outro exemplo >> [d,h] = maximos(10,10,45,0.01) d = h = Ficheiro maximos.m function [dmax, hmax] = maximos(y0, v0, alfa, dx).... endfunction