parra1100 Posted March 12, 2014 at 04:49 PM Report #548427 Posted March 12, 2014 at 04:49 PM 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
Rui Carlos Posted March 12, 2014 at 06:38 PM Report #548433 Posted March 12, 2014 at 06:38 PM 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
parra1100 Posted March 12, 2014 at 08:37 PM Author Report #548438 Posted March 12, 2014 at 08:37 PM 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
Rui Carlos Posted March 12, 2014 at 09:05 PM Report #548441 Posted March 12, 2014 at 09:05 PM O problema não está aí. A função Versoes é que não devolve a sequência gerada. Rui Carlos Gonçalves
parra1100 Posted March 12, 2014 at 09:07 PM Author Report #548442 Posted March 12, 2014 at 09:07 PM pois lá está, mas eu não sei como é k se faz para devolver o a e o r
Rui Carlos Posted March 12, 2014 at 09:19 PM Report #548443 Posted March 12, 2014 at 09:19 PM 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
parra1100 Posted March 12, 2014 at 10:33 PM Author Report #548451 Posted March 12, 2014 at 10:33 PM 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')
Rui Carlos Posted March 12, 2014 at 11:01 PM Report #548452 Posted March 12, 2014 at 11:01 PM 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
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