• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 192
  • Last Modified:

Array problem

My code
=======
#include<iostream.h>


void identity(int a[4][4], int m){
  int i=m, j=m;
for(i=0;i<4;i++){
  for(j=0;j<4;j++){
 if(i==j)
   a[i][j]=1;
 else
   a[i][j]=0;
   return a[i][j];

       }
   
      }
    }

 void main(){
     int a[4][4];
     int m=4;
     identity(a[4][4], m);
     cout<a[i][j]
     }

     cout<<'\n';
     }

My problem
==========

Write a function 'identity' which returns a 1 if the array argument passed to it represents an identity matrix, and returns 0 otherwise. An identity matrix is an m by m array of integers, where the values of the elements on the principle diagonal (row subscript == col subscript)equal 1, and all other elements are 0. for
example:
 1 0 0 0
 0 1 0 0
 0 0 1 0
 0 0 0 1
is an identity matrix of order 4 by 4,
1 0 0
0 1 0
0 0 1
 is an identity matrix of order 3 by 3,and
1 1 5
0 1 0
0 0 1
 is NOT an identity matrix. The function identity is passed two arguments: the array, and the order of the matrix ( i e the size of the two dimensions). Thus the prototype of the function would be written as :int identity (int a[][], int m);where a is the array and m represents the number of rows and columns. You may assume that the number of rows always equals the number of columns for the array.
0
muhbest
Asked:
muhbest
  • 3
1 Solution
 
RONSLOWCommented:
#include <iostream.h>

/* no point in passing int m=4 if a[4][4] is hard coded */
/* the question you were given is not possible to answer */
/* exactly as specified.  but we cannot do much */
/* about that now... */

/* also the function should return an int not a void */
/* void identity(int a[4][4], int m) { */
int identity(int a[4][4], int m) {
      /* no point initializing i and j as they are */
      /* set in the loop */
      /*      int i=m;      */
      /*      int j=m;      */
      int i;
      /* you have hard-coded 4 in the for loops */
      /*      for(i=0;i<4;i++){      */
      /*            for(j=0;j<4;j++){      */
      /* we should use 'm' instead */
      for(i=0;i<m;i++){
            /* declare j here where it is used */
            /* this is nicer code */
            int j;
            for(j=0;j<m;j++){
                  /* this is CREATING an identity matrix */
                  /* NOT testing for one as was asked */
                  if(i==j)
                        a[i][j]=1;
                  else
                        a[i][j]=0;
                  /* this is not what should be returned */
                  return a[i][j];
            }
      }
      /* no return value from here at all */
      /* a good compiler will detect this error */
}

int main(int argc, char* argv[]) {
      /* you haven't put any data into a[][] yet */
      int a[4][4];
      int m=4;
      /* you haven't done anything with the */
      /* return value from identity */
      /* also the call is wrong .. you are passing */
      /* the value of the [4][4] item of the array */
      /* (which is outside it anyway) instead of the */
      /* whole array */
      /*      identity(a[4][4], m); */
      int result = identity(a, m);
      /* i and j aren't defined */
      /* and you should be printing the result of */
      /* the call to identity(...); */
      /* BTW: if this is supposed to be 'C' code */
      /* then you cannot use 'cout<<' etc */
      /* cout<<a[i][j]; */
      cout << result;
      cout<<'\n';
      return 0;
}

/* I suggest you think about the question */
/* a bit more and come back to me */


0
 
RONSLOWCommented:
PS: sorry about formatting .. that is what happens when I copy/paste source code into this silly edit box :-(

0
 
nietodCommented:
RONSLOW, I think the assignment might expect a 1-D array that is to be treated as a 2D matrix, that is the only way to make it sizable at run-time. (That or a 1-D array of 1-D array pointers, but that really needs to be a class.)
0
 
RONSLOWCommented:
It could also be that the lecturer who posed the assignment stuffed up by saying "the prototype of the function would be written as :int identity (int a[][], int m)"

Anyway, as posed in the question, one cannot write such as function (it ain't valid C or C++).  If a was a flat array of m*m elements then that could be easily done.


0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now