# include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#include<iostream.h>
#define max 3
int i,j,k,n;
void equal(float s[][3],float c[][3]);
void input_mat(float a[max][max]);
void mull_mat(float aa[][max],float b[][max],float c[][max]);
void write_mat(float a[][max]);
void biger(float a[][max]);
void tandinvers(float t[][3],float tt[][3],float a[][max]);
main()
{ int k;
float d[max][max],a[max][max],c[max][max],tt[3][3],t[3][3];
clrscr();
n=3; k=0;
input_mat(a);
write_mat(a);
cout<<"\n";
while( (fabs(a[0][1])>0.0001) || (fabs(a[0][2])>0.0001) || (fabs(a[1][2])>0.0001) )
{ k=k+1;
biger(a); // find biger element of A
printf("\nCircle no. %d & The biger element : %5.4f\n",k,a[i][j]);
tandinvers(t,tt,a); // find Angle , T & invers T
cout<<"T = \n";
write_mat(t);
mull_mat(tt,a,d); // multiplicat invers T in A
mull_mat(d,t,c); // multiplicat A in T
cout<<"A = \n";
write_mat(c);
equal(a,c); // A=C
getch();
}
printf("J1=%5.4f , J2=%5.4f ,J3= %5.4f \t",a[0][0],a[1][1],a[2][2]);
return(0) ;
}
// function to find angle , T and invers T
void tandinvers(float t[][3],float tt[][3],float a[][max])
{ float x,z,y,tunit[3][3]={1,0,0,0,1,0,0,0,1};
if(a[i][i]==a[j][j]) if(a[i][j]>=0) x=3.1415/4;
else x=-3.1415/4;
else x=(atan(2*a[i][j]/(a[i][i]-a[j][j])))/2;
y=cos(x); z=sin(x);
equal(t,tunit); // t= {1,0,0,0,1,0,0,0,1}
equal(tt,tunit);
// select T1 , T2 or T3 consider biger element
t[i][i]=y;t[i][j]=-z;t[j][i]=z;t[j][j]=y;
tt[i][i]=y;tt[i][j]=z;tt[j][i]=-z;tt[j][j]=y;
}
void equal(float s[][3],float c[][3])
{ int k,l;
for(k=0;k<n;k++)
for(l=0;l<n;l++)
s[k][l]=c[k][l];
}
void input_mat( float a[][max])
{
printf("ENTER THE ELEMENT OF ARRAY ");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%f",&a[i][j]);
}
void biger(float a[][max])
{
if(fabs(a[0][1])>=fabs(a[0][2]))
if(fabs(a[0][1])>=fabs(a[1][2])) {i=0;j=1;}
else {i=1;j=2;}
else if(fabs(a[0][2])>=fabs(a[1][2])) {i=0;j=2;}
else {i=1;j=2;}
}
void mull_mat(float aa[][max],float b[][max],float c[][max])
{int k;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{ c[i][j]=0;
for(k=0;k<n;k++)
c[i][j]=c[i][j]+aa[i][k]*b[k][j] ;
}
}
void write_mat(float c[][max])
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5.4f\t",c[i][j]);
printf("\n");
}
getch();
}