/******************************************************
* CP-I warmup 1999-2000
* Problem #13
*****************************************************/
/*
* Question:
* Write a complete C program that first reads, row by row, a
* nX n array, where n is an input. The program should then
* determine wether the array just read falls into any of the
* following special cases:
* (a) Symetric (a[j,i]=a[i,j] for all i,j)
* (b) Upper triangular (aij=0 whenever i<j)
* (c) diagonal (aij=0 whenever i!=j)
*/
#include <stdio.h>
#define MAX_SIZE 10
int matrix[MAX_SIZE][MAX_SIZE];
int size;
main()
{
int i,j;
printf("Give the size of square matrix (n): ");
scanf("%d",&size);
if(size>MAX_SIZE)
{
printf("This size is not supported. (size should be less than %d)\n",MAX_SIZE);
exit(2);
}
for(i=0;i<size;i++)
for(j=0;j<size;j++)
{
printf("Give the a[%d][%d] element: ",i+1,j+1);
scanf("%d",&matrix[i][j]);
}
if(is_diagonal())
{
printf("The matrix is Diagonal, therefore it is Upper\
Triangular and Symmetrix also\n");
exit(0);
}
if(is_uppertriangular())
{
printf("The matrix is Upper Triangular\n");
exit(0);
}
if(is_symmetric())
{
printf("The matrix is Symmetric\n");
exit(0);
}
}
int is_diagonal()
{
int i,j;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
{
if(i!=j)
{
if(matrix[i][j])
return 0;
}
}
return 1;
}
int is_uppertriangular()
{
int i,j;
for(i=0;i<size;i++)
for(j=i+1;j<size;j++)
{
if(matrix[i][j])
return 0;
}
return 1;
}
int is_symmetric()
{
int i,j;
for(i=0;i<size;i++)
for(j=i;j<size;j++)
{
if(matrix[i][j]!=matrix[j][i])
return 0;
}
return 1;
}