Click here to download the complete ISC 2014 Computer Science Paper 2 (Practical).
Question:
Write a program to declare a square matrix A[ ] [ ] of order (M x M) where ‘M’ is the number of rows and the number of columns such that M must be greater than 2 and less than 10. Accept the value of M as user input. Display an appropriate message for an invalid input. Allow the user to input integers into this matrix. Perform the following tasks:
(a) Display the original matrix.
(b) Check if the given matrix is Symmetric or not.
A square matrix is said to be Symmetric, if the element of the ith row and jth column is equal to the element of the jth row and ith column.
(c) Find the sum of the elements of left diagonal and the sum of the elements of right diagonal of the matrix and display them.
Test your program with the sample data and some random data:
Example 1
INPUT : M = 3
1 2 3
2 4 5
3 5 6
OUTPUT :
ORIGINAL MATRIX
1 2 3
2 4 5
3 5 6
THE GIVEN MATRIX IS SYMMETRIC
The sum of the left diagonal = 11
The sum of the right diagonal = 10
Example 2
INPUT : M = 4
7 8 9 2
4 5 6 3
8 5 3 1
7 6 4 2
OUTPUT :
ORIGINAL MATRIX
7 8 9 2
4 5 6 3
8 5 3 1
7 6 4 2
THE GIVEN MATRIX IS NOT SYMMETRIC
The sum of the left diagonal = 17
The sum of the right diagonal = 20
Example 3
INPUT : M = 22
OUTPUT : THE MATRIX SIZE IS OUT OF RANGE
Programming Code:
/**
* The class SymmetricMatrix_ISC2014 inputs a 2D array and checks whether it is Symmetric or not.
* It then finds the sum of the left and the right diagonals
* @author : www.javaforschool.com
* @Program Type : BlueJ Program – Java
* @Question Year : ISC Practical 2014 Question 2
*/
import java.io.*;
class SymetricMatrix_ISC2014
{
public static void main(String args[])throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.print(“Enter the number of elements : “);
int m=Integer.parseInt(br.readLine());
int A[][]=new int[m][m];
if(m>2 && m<10) // Checking for valid input of rows and columns size
{
System.out.println("\nInputting the elements in the Matrix: n");
for(int i=0;i
Output:
Very helpful website for students, thank you sir
How to accept a character using scanner
char ch = sc.next().charAt(0);
We absolutely love your blog and find almost all of your post’s to be just
what I’m looking for. can you offer guest writers to write content for
yourself? I wouldn’t mind producing a post or elaborating on a
few of the subjects you write concerning here.
Again, awesome weblog!
it helped me a lot..thenku sir!!
it helped me a lot.thanku!
Is it necessary to write isc practical programs using functions or constructors??
No, but it is always better to do so.
Shouldn’t there be another if to check the condition and print the message for an invalid input? Its clearly mentioned in the question right?
It is already covered. See the last else.
sir/mam
in this program for symmetric condition I have applied this logic
int A[][]=new int[M][M];
int b[][]=new int[M][M];
boolean g= true;
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
{
b[i][j]=A[i][j];
}
}
label :for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
{
if(b[i][j]==A[j][i]);
{
continue;
g=false;
}
else
{
System.out.println("the given matrix is not symmetric);
g=true;
break label;
}
}
}
if(g==false)
{
System.out.println("the given matrix is symmetric");
}
it gave all correct output is it correct
Yes it works. It will be acceptable. Relax.
will my marks be deducted for storing the element of A[i][j] in b[i][j] and then checking b[i][j]== A[j][i] and not by comparing by the same matrix A[][]
I am in a great tention
No your marks will not be deducted. Relax.
the logic for finding the sum of right diagonal is “if(i==(M-j-1))”
is it correct?
also
for checking the symmetricity of a matrix i have taken a blank 2-d array B[][],transposed the matrix A[][] by “B[j][i]=A[i][j]” and checked the two matrices if (A[i][j]==B[i][j]) then increased a counter variable by 1. if c==arraysize*arraysize, then the matrix is symmetric …..
is it correct?
The condition for accessing right diagonal is (i+j)=m-1
You can write the above expression like: i=m-j-1 or j=m-i-1. These are nothing but the same above condition. Simple mathematics’ change of subjects.:)
So what you wrote is correct.
Regarding your logic for checking for symmetric matrix, then it is correct and you will be awarded full marks for it. However, know that the transpose part was not needed. That is an extra work which you did. 🙂
A simple A[i][j]==A[j][i] would have done the trick and then you could have increased the variable ‘c’.
Anyways, no need to worry. 🙂 Focus on your other exams now.
if(m<=2 || m>=10)
{
System.out.println(“SIze Out OF Range”);
}
this is what I have used.
reason:M must be greater than 2 and less than 10
is it wrong. please.
——————————————————-
VIVA VOCE
The Visiting examiner asked me around 18 questionand I wasn’t able to answer 2-3
what is the use of out in System.out.println()
can a package be called as a class.
please give the answers and also can you predict how many marks I am going to get for VIVA (I couldn’t answer 2-3 Qns out of 16-18)
one more thing.
i have been taught that public is the default access specifier, but in this website’s viva question post it is mentioned that the default access specifier is “friendly” PLEASE HELP ME
Hello Anand,
if(m< =2 || m>=10)
{
System.out.println(“SIze Out OF Range”);
}
is absolutely correct.
Regarding the viva questions:
Q) what is the use of out in System.out.println()
A) out is an object of the PrintStream class and a static data member of the System class which is calling the println() function.
Q) can a package be called as a class.
A) Yes, Package is actually a class present in java.lang package
According to my prediction, you will lose either 1-2 or no marks. 🙂
The default access specifier is when you don’t write any access specifier. In java, it is “package private” also called “friendly”.
Remember this short table:
A class may be declared with the modifier public or no modifier. Other members of the class have two additional access modifiers: private and protected.
the way I accessed the diagonals
left diagonal
for(int i=0;i<m;i++)
sum=sum+A[i][i];
the right diagonal
int j=M-1;
for(int i=0;i<M;i++)
{
sum=sum+A[i][j];
j–
}
Hello Anand, you used the same variable ‘sum’ for finding the sum of left and right diagonals? If yes then there is a problem with this. If not and you used two different variables or printed the sum of left diagonal first and made sum=0, before you started the loop for right diagonal, then your code is absolutely fine. However it can be made even better. You need only one loop to perform the above operations. See this:
I’ve used leftsum and rightsum.
It is fine then.
Sir I have implemented the same technique for diagonal sums as you have posted. For symmetric matrix I took a variable as a counter and incremented it whenever A[i][j] was equal to A[j][i]. Then I equated this variable with square of m. If the condition that variable is equal to square of m then it was symmetric or vice versa.Can you tell me whether it will also do?
Yes the logic used by you is absolutely fine. 🙂