Is it possible to combine "for" and "if" like this?

1 view (last 30 days)
Hello, Iam new at computing and matlab, I have a problem with the next part of my program.
nodos = [0 0 0 0 1 1; 48 0 0 0 1 1;84 0 0 0 1 1;48 36 -500 0 0 0]
Nnodos=4
for i=1:Nnodos
w=0
if nodos(i,5)==0
nodos(i,7)=w+1
w=w+1
end
end
When i run the program the matrix "nodos" is not modified. Is the i going from 1 to Nnodos?
thanks for your time.
  1 Comment
Matt J
Matt J on 4 Sep 2014
When I run your code, nodos does get modified. A 7th column now appears, and it looks like the following
nodos =
0 0 0 0 1 1 0
48 0 0 0 1 1 0
84 0 0 0 1 1 0
48 36 -500 0 0 0 1

Sign in to comment.

Accepted Answer

Geoff Hayes
Geoff Hayes on 4 Sep 2014
Edited: Geoff Hayes on 4 Sep 2014
Rachuan - when I run the code, the matrix nodos is modified. In fact, a seventh column is appended to the original 4x6 matrix. Look at the condition that when true, updates the matrix
if nodos(i,5)==0
nodos(i,7)=w+1
w=w+1
end
So if the fifth element of the ith row is zero, then you set the seventh element of the ith row to w+1. But since your matrix is 4x6, a seventh column of zeros is automatically added to the matrix with only nodos(i,7) equal to one. The code then increments w and proceeds to the next iteration of the loop. But the first line of the for loop body
w=0
So even though we have incremented w, we have reset it to zero. I suspect that you only want to initialize w to zero outside of the for loop. So you may want to revise your code as
nodos = [0 0 0 0 1 1; 48 0 0 0 1 1;84 0 0 0 1 1;48 36 -500 0 0 0]
Nnodos = 4;
w = 0;
for i=1:Nnodos
if nodos(i,5)==0
nodos(i,7)=w+1;
w=w+1;
end
end
Now decide what should happen when nodos(i,5)==0 0 do you want to add a new column, or update an existing one with nodos(i,??)=w+1;
  1 Comment
Rachuan
Rachuan on 4 Sep 2014
Great, thanks my friend. It was that W inside the loop that was breaking the code.

Sign in to comment.

More Answers (1)

dpb
dpb on 4 Sep 2014
Yes... :) (the answer to the question asked). You can see this as you run the code as given above since the value of w=0 is printed four times, once for each pass thru the loop.
But...the array nodos is modified; you just added a column instead of, perhaps intending to change one of the existing columns, perhaps.
Count 'em...you now at the end have size(nodos)=[4 7] and the last value of the last column is the '1' you added.
The session at my command line follows...
>> nodos = [0 0 0 0 1 1;
48 0 0 0 1 1;
84 0 0 0 1 1;
48 36 -500 0 0 0]
Nnodos=4
for i=1:Nnodos
w=0
if nodos(i,5)==0
nodos(i,7)=w+1
w=w+1
end
end
nodos =
0 0 0 0 1 1
48 0 0 0 1 1
84 0 0 0 1 1
48 36 -500 0 0 0
Nnodos =
4
w =
0
w =
0
w =
0
w =
0
nodos =
0 0 0 0 1 1 0
48 0 0 0 1 1 0
84 0 0 0 1 1 0
48 36 -500 0 0 0 1
w =
1
>>

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!