Jump to content

Problema em passar variáveis entre funções


parra1100
 Share

Recommended Posts

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

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

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).

Link to comment
Share on other sites

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.