# For loop adding and substracting.

5 ビュー (過去 30 日間)
Santos García Rosado 2021 年 1 月 4 日
Hello Matlab community!
Could someone please give me a hand with my code?
I've come up with an array such as
A = [0, 0, 0, 0, 0, 0, 4, 5, 6, 9, 4, 3, 9, 0, 0, -1, -1, -1, -1, 0, 0, 3, 2, 8, 3, 0, -1, 0, -1, 0, -1, -1, 0, 0, 5, ..., n]
The main idea is adding A(n) values when A(n) is 0 or positive.
But when A(n) is -1, I'd like it to subtract the sum of the previous positions into equal parts (1/4) to get zero.
(Note: there are always four -1 before a positive value, so the sum should be divided by 4). The output should be as follows:
Output = [0, 0, 0, 0, 0, 0, 4, 9, 15, 24, 28, 31, 40, 40, 40, 30, 20, 10, 0, 0, 0, 3, 5, 13, 16, 16, 12, 12, 8, 8, 4, 0, 0, 0, 5,..., n]
I hope I've explained myself clear enough for you to understand.
Thank's for the help!

サインインしてコメントする。

### 採用された回答

Timo Dietz 2021 年 1 月 4 日
decrA = 0;
out = zeros(1, numel(A));
out(1) = A(1);
for idx = 2:1:numel(A)
if A(idx) == -1
out(idx) = out(idx - 1) - decrA;
else
out(idx) = out(idx - 1) + A(idx);
decrA = out(idx)/4;
end
end
out
Does this solve your issue?
##### 6 件のコメント4 件の古いコメントを表示4 件の古いコメントを非表示
Timo Dietz 2021 年 1 月 11 日
decrA = 0;
out = zeros(1, numel(A));
out(1) = A(1);
countMinusOnes = 1;
for idx = 2:1:numel(A)
if A(idx) == -1
out(idx) = out(idx - 1) - decrA;
countMinusOnes = countMinusOnes + 1;
if countMinusOnes > 4; countMinusOnes = 1; end
else
out(idx) = out(idx - 1) + A(idx);
if countMinusOnes == 1; decrA = out(idx)/4; end
end
end
Okay, you have to make sure that all four '-1' have been there, before calculating a new decrement, right?
My proposal is not very elegant but maybe it solves your issue.
What in case there are values >0 between the -1? The code here would further add these but leaves the decrement as is. Would that be okay?
Santos García Rosado 2021 年 1 月 11 日
Now works perfectly! Don't worry about having values >0 between the -1 positions, that scenario won't come along in my program. Thank you so much for your time Timo!

サインインしてコメントする。

### カテゴリ

Help Center および File ExchangeMatrox Hardware についてさらに検索

R2020b

### Community Treasure Hunt

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

Start Hunting!

Translated by