For loop adding and substracting.

22 vues (au cours des 30 derniers jours)
Santos García Rosado
Santos García Rosado le 4 Jan 2021
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!

Réponse acceptée

Timo Dietz
Timo Dietz le 4 Jan 2021
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 commentaires
Timo Dietz
Timo Dietz le 11 Jan 2021
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 le 11 Jan 2021
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!

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by