我有一个应该执行以下操作的代码:
第一个名为CalcNum1.m的函数,将找到所有的总和 任何大小的数组中的值使用for循环而不是sum函数。这个总和除以 2将保存到变量Num1。 最后,在名为PrintTerms.m的第二个函数中,使用。重新排序您的术语 内置排序功能。现在,找到多少条款(从第一个和第一个开始) 当相互相加时,必须超过Num1的值。 向用户打印需要多少条款。
这是我的主要脚本代码:
B = input ('Enter matrix B');
[Num1,sum] = CalcNum1(B);
[Q] = PrintTerms(B, Num1);
这是我的函数代码
function [sum, Num1] = CalcNum1(B)
n = numel(B);
sum1 =0;
for i = 1:n
sum1 = sum1 + B(i);
end
sum = sum1;
Num1 = sum/2;
end
function [Q] = PrintTerms( B, Num1 )
sort (B)
sum1 = 0;
i = 0;
count = 0;
while sum1<=Num1
i = i+1
sum1 = sum1 + B(i)
count = count+1
end
Q = count;
sum1
fprintf(' This many terms necessary %.2f',Q)
end
答案 0 :(得分:0)
尝试:
function [Num1, my_sum] = CalcNum1(B)
n = numel(B);
my_sum =0;
for i = 1:n
my_sum = my_sum + B(i);
end
Num1 = my_sum/2;
end
请注意,我切换了输出顺序,因为您将其命名为[Num1,sum] =
function count = PrintTerms( B, Num1 ) % No need for brackets when only single output
B = sort(B); % Need to save it in a new (or the same variable)
% sort(B) will only print the sorted vector
my_sum = 0;
ii = 0;
count = 0;
while my_sum <= Num1
ii = ii+1; % Use semicolons to supress output
my_sum = my_sum + B(ii);
count = count + 1; % Use space for better readability
end
fprintf(' This many terms necessary %.2f \n', count)
% Include \n to get a line shift
end
键入B
时使用括号,如下所示:[1 2 3 4 2 3 4 23 12 32 12 2 3 6]
如果您希望它更简单,您还可以使用cumsum
并避免循环。这是您的最后一个功能(打印部分除外):
vec_sum = cumsum(sort(B)); % See documentation for explanation
count = find(vec_sum >= Num1,1) ; % the second input 1, is to only include the
% first element larger than Num1
答案 1 :(得分:0)
您的PrintTerms
功能似乎运作良好。可能的问题是,假设Num1
是一个任意值,如果它是如此之大以至于即使使用B
的所有元素也未达到它,您将尝试从{{中拉出一个不存在的其他元素1}}。为避免这种情况,您可以使用B
添加条件并使用标记结果来指示您是否有if
:
success
另请注意,% [...]
success = 1; % for now
while (sum1 <= Num1)
ii = ii+1; % Use semicolons to supress output
if ii>length(B)
success = 0; % we ran out of terms
break; % exit while loop
end
sum1 = sum1 + B(ii);
count = count + 1; % Use space for better readability
end
if success
fprintf(' This many terms necessary %.2f', count)
else
fprintf(' The sum cannot be reached')
end
不会存储结果。使用sort(B)