For loop adding and substracting.

3 ビュー (過去 30 日間)
Santos García Rosado
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
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 件のコメント
Timo Dietz
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
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!

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

その他の回答 (0 件)

製品


リリース

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by