Help with Logic of Program

  • #1
3,003
2

Main Question or Discussion Point

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? :smile:
 

Answers and Replies

  • #2
664
3
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
 
  • #3
3,003
2
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 :smile: I am kind of bad at this...what is the part on bold doing?
 
  • #4
664
3
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
 

Related Threads for: Help with Logic of Program

Replies
4
Views
1K
  • Last Post
Replies
5
Views
2K
Replies
11
Views
2K
Replies
1
Views
484
  • Last Post
Replies
4
Views
453
  • Last Post
Replies
2
Views
2K
Top