parra1100 Posted March 12, 2014 Report Share Posted March 12, 2014 Boas, estou com um problema e penso que seja na passagem de variaveis entre funções. O meu código é este: a = []; menuProgGeometrica = 1; a_1 = input('Primeiro Elemento da PA: '); r = input('Razão da PA: '); n = input('Número de Elementos da PA: '); while menuProgGeometrica ~= 3 clc; disp('--------------------------------------------------'); disp(' PROGRESSÃO GEOMÉTRICA '); disp('--------------------------------------------------'); menuProgGeometrica = menu('Progressão Geométrica',... 'Gerar Progressão Geométrica',... 'Somar elementos da Progressão Geométrica',... 'Saír'); switch menuProgGeometrica case 1 Versoes(a_1,r,n) case 2 if(~isempty(a)) S = SomaPGeometrica(a,r); fprintf('\nA soma dos elementos da PG introduzida é: %.1f\n',S); else disp('Começe por introduzir a Progressão geométrica') end disp(' '); input('Prima uma tecla para continuar ...'); end end a minha função versões é esta: function Versoes(a_1,r,n) menuProgGeometrica = 1; while menuProgGeometrica ~= 5 clc; disp('--------------------------------------------------'); disp(' PROGRESSÃO GEOMÉTRICA '); disp('--------------------------------------------------'); menuProgGeometrica = menu('Versões', ... 'Versão 1',... 'Versão 2',... 'Versão 3',... 'Versão 4',... 'Saír'); switch menuProgGeometrica case 1 a = gerarPGeometrica_v1(a_1,r,n); disp(' '); disp('A Progressão Geometrica gerada é:'); disp(' '); disp(a); disp(' '); input('Prima uma tecla para continuar ...'); case 2 a = gerarPGeometrica_v2(a_1,r,n); disp(' '); disp('A Progressão Geometrica gerada é:'); disp(' '); disp(a); disp(' '); input('Prima uma tecla para continuar ...'); case 3 a = gerarPGeometrica_v3(a_1,r,n); disp(' '); disp('A Progressão Geometrica gerada é:'); disp(' '); disp(a); disp(' '); input('Prima uma tecla para continuar ...'); case 4 a = gerarPGeometrica_v4(a_1,r,n); disp(' '); disp('A Progressão Geometrica gerada é:'); disp(' '); disp(a); disp(' '); input('Prima uma tecla para continuar ...'); end end O meu problema é o seguinte, eu sei que as várias versões estão certas, assim como a soma. O meu objetivo é o utilizador escrever o a_1,r,n e depois na função versões vou escolher a versão com que quero efetuar os calculos, até aqui tudo bem, mas depois na função soma, esta tem de receber o 'r' e o 'a', mas penso que isso não está a acontecer e não sei como o fazer. Se pareceu confuso digam que eu tento explicar melhor,, thks Link to comment Share on other sites More sharing options...
Rui Carlos Posted March 12, 2014 Report Share Posted March 12, 2014 Onde é que guardaste os valores gerados para a progressão geométrica? Olhando para o teu código, diria que a variável a, que é usada para fazer a soma, nunca é modificada depois de ser inicializada com a lista vazia. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
parra1100 Posted March 12, 2014 Author Report Share Posted March 12, 2014 Esta é uma das versões function a = gerarPGeometrica_v1(a_1,r,n) %GERARPGeometrica_v1 Gerar uma Progressão geometrica(PG % a = ProgressaoGeometrica(a_1,r,n) % a(n) = a(1)+(n-1)*r % %INPUT: % a_1 - primeiro elemento da progressaão geometrica % r - razão da progressão geometrica % n - número de elementos da progressão geometrica %OUTPUT: % a - vector com os elementos da progressão geometrica % a(i) = a(1)+(i-1)*r , i=2,...,n a(1) = a_1; % inicialização do vector da PA for i=2:n % intervalo de iteração a(i) = a(1)*r^(i-1); % equação de iteração da PA end Link to comment Share on other sites More sharing options...
Rui Carlos Posted March 12, 2014 Report Share Posted March 12, 2014 O problema não está aí. A função Versoes é que não devolve a sequência gerada. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
parra1100 Posted March 12, 2014 Author Report Share Posted March 12, 2014 pois lá está, mas eu não sei como é k se faz para devolver o a e o r Link to comment Share on other sites More sharing options...
Rui Carlos Posted March 12, 2014 Report Share Posted March 12, 2014 Não está lá, não. A função Versoes não devolve qualquer valor de momento, por isso esse "problema" que indicas não se coloca. Só tens que colocar a função a devolver a sequência gerada. Adicionalmente, não há qualquer necessidade da função devolver o r visto que o r é um dos argumentos da função, e não é modificado pela mesma (logo, quem chama a função já sabe o valor do r pois é um dos argumentos que precisa de indicar quando chama a função). Para devolveres múltiplos valores, podes fazer algo como function [x1 x2] = funcao(y1, y2). Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
parra1100 Posted March 12, 2014 Author Report Share Posted March 12, 2014 Então a função versões poderia ficar assim: function [a] = Versoes(a_1,r,n) mas mesmo assim, o a não está a passar para o switch menuProgGeometrica e devolve sempre este resultado: else disp('Começe por introduzir a Progressão geométrica') Link to comment Share on other sites More sharing options...
Rui Carlos Posted March 12, 2014 Report Share Posted March 12, 2014 Para além de colocares a função Versoes a devolver o resultado, precisas de atribuir o resultado da função a uma variável quando a chamas. O if continua a "falhar" pois não estás a colocar o resultado no a, logo ele estará sempre vazio quando chegar à condição. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now