Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Help with Logic of Program

  1. Mar 21, 2010 #1
    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 (Text):


    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:
     
  2. jcsd
  3. Mar 22, 2010 #2
    I would do something along the lines of:

    (Pseudocode)
    Code (Text):

    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
     
  4. Mar 22, 2010 #3

    Hey there Dave :smile: I am kind of bad at this...what is the part on bold doing?
     
  5. Mar 22, 2010 #4
    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 (Text):

    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 (Text):

    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
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Help with Logic of Program
  1. Programming help (Replies: 2)

  2. Programing help (Replies: 8)

  3. Help with programming (Replies: 5)

Loading...