#include <stdio.h>
#define MAX 100
#define INVALIDO "Operção Inválida!\n"
#define IDENT "A matriz é identidade\n"
#define NAO_IDENT "A matriz não é identidade\n"
#define SIMETRICA "A matriz é simétrica\n"
#define NAO_SIMETRICA "A matriz não é simétrica\n"
#define ESPARSA "A matriz é esparsa\n"
#define NAO_ESPARSA "A matriz não é esparsa\n"
#define TRIANGULAR_UPP "A matriz é triangular superior\n"
#define TRIANGULAR_DOWN "A matriz é triangular inferior\n"
#define NAO_TRIANGULAR "A matriz não é triangular\n"
typedef enum op {sair = 0, soma, mult, transposta, identidade, simetrica, esparsa, triangular, imprimir}Operacoes;
#include <stdio.h>
int main() {
int ordem, mat[100][100], x, y, z, escalar, ident=1, simetric=1, espar=0, triangS=1, triangI=1,opera;
scanf("%d",&ordem);
for(x=0;x<ordem;x++)
{
for(y=0;y<ordem;y++)
{
scanf("%d",&mat[x][y]);
}
}
while(1)
{
scanf("%d",&opera);
switch(opera)
{
case (sair):
return(0);
break;
case (soma):
scanf("%d",&escalar);
for(x=0;x<ordem;x++)
{
for(y=0;y<ordem;y++)
{
mat[x][y] = mat[x][y] + escalar;
}
}
break;
case (mult):
scanf("%d",&escalar);
for(x=0;x<ordem;x++)
{
for(y=0;y<ordem;y++)
{
mat[x][y] = mat[x][y] * escalar;
}
}
break;
case (transposta):
for(x=0;x<ordem;x++)
{
for(y=0;y<ordem;y++)
{
printf("%d",mat[y][x]);
}
}
break;
case (identidade):
for(x=0;x<ordem;x++)
{
for(y=0;y<ordem;y++)
{
if(x == y)
{
if(mat[x][y] != 1)
{
ident = 0;
}
}
}
}
if(ident == 1)
{
printf(IDENT);
}
else
{
printf(NAO_IDENT);
}
break;
case (simetrica):
for(x=0;x<ordem;x++)
{
for(y=0;y<ordem;y++)
{
if(mat[y][x]!=mat[x][y])
{
simetric = 0;
}
}
}
if(simetric == 1)
{
printf(SIMETRICA);
}
else
{
printf(NAO_SIMETRICA);
}
break;
case(esparsa):
for(espar=0,x=0;x<ordem;x++)
{
for(y=0;y<ordem;y++)
{
if(mat[x][y]==0)
{
espar++;
}
}
}
if(espar>=(x*y)/2)
{
prinf(ESPARSA);
}
else
{
printf(NAO_ESPARSA);
}
break;
case(triangular):
for(x=0;x<ordem;x++)
{
for(y=0;y<ordem;y++)
{
if(x>y)
{
if(mat[x][y]!=0)
{
triangS = 0;
}
}
if(y>x)
{
if(mat[x][y]!=0)
{
triangI = 0;
}
}
}
}
if(triangS==1)
{
printf(TRIANGULAR_UPP);
}
if(triangI==1)
{
printf(TRIANGULAR_DOWN);
}
else
{
printf(NAO_TRIANGULAR);
}
break;
default:
printf(INVALIDO);
}
}
}