How to take variable number of inputs arugments and return their sum

I am trying to write a functin addmany.m that takes zero or more numbers as a variable number of input arguments and returns the sum of its input arguments. I am trying to use the narargin and varargin commands. I have the following code written:
function [y] = main(varargin)
%This function will take zero or more numbers as a variable number of input
%arguments and returns the sum of its input arguments.
switch nargin
case 0
disp('0 inputs given')
alpha = 10 %default value
beta = 10 %default value
case 1
disp('1 inputs given')
alpha = varargin{1}
beta = 10 %default value
case 2
disp('2 inputs given')
alpha = varargin{1}
beta = varargin{2}
otherwise
error('Unexpected inputs')
end
y= alpha + beta;
I am trying to get the following result Input is 1,10,100 Output is 111.
If you could please tell me which line/part is wrong and what it should be, I would appreciate it

 Réponse acceptée

Try this:
function theSum = AddMany(varargin)
theSum = []; % Initialize
if nargin == 0
uiwait(warndlg('Please input 1 or more numbers'));
return;
end
fprintf('Number of arguments: %d\n',nargin);
celldisp(varargin)
inputNumbers = cell2mat(deal(varargin))
theSum = sum(inputNumbers);

13 commentaires

You had a function name of main() and a filename of addmany.m, which is a conflict and not recommended.
I follow exactly what you are doing here execpt...is there a way to use something else in place of uiwait(warndlg)...I was thinking something like fprintf but wasnt sure how to write that out.
+1 for celldisp
daniel.....are you saying to replace the uiwait command with +1 cell disp or are you just saying to replace varargin with +1cell disp or neither of these
Why not just
inputNumbers = [varargin{:}]
Matt J
Matt J le 29 Oct 2013
Modifié(e) : Matt J le 29 Oct 2013
Neither. He's saying he voted for ImageAnalyst's answer (thereby awarding him +1 reputation points), because he likes how celldisp was used.
Still not sure how to remove the uiwait(warndlg) line and replace it with something diffierent..(if that is at all possible)
@KayLynn, you probably want to merge your example main function which has default values with IA's answer which doesn't have default values. Once you understand how both functions work, it should be rather trivial to merge them.
"Something different" is a broad request. How about
if ~nargin
error 'Please input 1 or more numbers'
end
Thank you all for your help. I have my function up and executing correctly now.
Image Analyst
Image Analyst le 29 Oct 2013
Modifié(e) : Image Analyst le 29 Oct 2013
Daniel, inputNumbers = [varargin{:}] gives a cell array, and the sum() function is not defined for cell arrays. So you'd still have to use cell2mat. Though it does look like the brackets perform the same as deal(), at least in this instance.
I am pretty sure with squiggly brackets {} you get an array of doubles and with smooth brackets () you get a cell array. So with {} it seems to work
x = {1, 2, 3};
sum([x{:}])
You're right - I forgot the braces when I tested it.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Argument Definitions dans Centre d'aide et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by