# Help with Logic of Program

I am confusing the heck out of myself here.

This is what I have

Square matrix that is M = 'm x m'
A column vector that is C = 'm x 1'
a smaller square matrix that is R ='r x r'

Here is what I am trying to accomplish; I usually do this by hand:

The entries of the column vector C are either 1 or 0. If the ithentry in C is zero then I can "cross out" the ith row AND column in M. For example, if M is 5 x 5 and the 2nd and 4th entries of C are 0, I draw a line through the 2nd and 4th row AND column of M.

This leaves me with a 3 x 3 sub-matrix that is made up of the un-crossed out entries of M.

This sub-matrix is R. So I need to find a way to assign these values to R from M after crossing out rows and columns according to the entries of C.

I have already created a test to initialize a matrix R of the correct dimensions; it is now a matter of getting the entries in there.

Something like:

Code:
For i = 1 to M
For j = 1 to M
If C(i,1) = 1 Then {R[something,something] = M[Something,Something]

Next j
Next i

But I think I will need 2 more counter variables in addition to i and j so that if C(i,1)=0 the indices of R do not increment.

I am just a little lost now. Can I get a little help here? I would do something along the lines of:

(Pseudocode)
Code:
rx = 0
ry = 0
for(mx = 1 to M) {
if(C[mx] == 1) {
ry = 0
for(my = 1 to M) {
if(C[my] == 1) {
R[rx][ry] = M[mx][my]
ry++
}
}
rx++
}
}

DaveE

I would do something along the lines of:

(Pseudocode)
Code:
rx = 0
ry = 0
for(mx = 1 to M) {
[B]if(C[mx] == 1) {
ry = 0[/B]
for(my = 1 to M) {
if(C[my] == 1) {
R[rx][ry] = M[mx][my]
ry++
}
}
rx++
}
}

DaveE

Hey there Dave I am kind of bad at this...what is the part on bold doing?

It's saying if the value at C[mx] (the mxth value in the single-dimensional matrix C) is equal to 1, then execute the code that's in the following set of braces. The first line in that sub-block of code says to set ry equal to 0.

I should note that actually, there's a little confusion there in terms of indexing. If your arrays are 0-based, then you want:

Code:
rx = 0
ry = 0
for(mx = 0 to M-1) {
if(C[mx] == 1) {
ry = 0
for(my = 0 to M-1) {
if(C[my] == 1) {
R[rx][ry] = M[mx][my]
ry++
}
}
rx++
}
}

And if your arrays are 1-based, then you want:

Code:
rx = 1
ry = 1
for(mx = 1 to M) {
if(C[mx] == 1) {
ry = 1
for(my = 1 to M) {
if(C[my] == 1) {
R[rx][ry] = M[mx][my]
ry++
}
}
rx++
}
}

DaveE