# include <iostream.h>
# include <stdlib.h>
# include <stdio.h>
# include <conio.h>
# include <math.h>
constint max_size=5;
int n=0;
int iterations=0;
char Diagonally_dominant=NULL;
longdouble input[max_size][max_size]={0};
longdouble previous_output[max_size]={0};
longdouble output[max_size]={0};
void show_screen( );
void clear_screen( );
void get_size_of_linear_equations( );
void show_input(constint,constint);
void get_input_linear_equation( );
void sort_system_of_linear_equations( );
void apply_jacobi_iterative_method( );
void show_result( );
int main( )
{
clrscr( );
textmode(C4350);
show_screen( );
get_size_of_linear_equations( );
get_input_linear_equation( );
if(Diagonally_dominant=='Y' || Diagonally_dominant=='y')
sort_system_of_linear_equations( );
apply_jacobi_iterative_method( );
show_result( );
getch( );
return 0;
}
/*************************************************************************///-------------------------- show_screen( ) ---------------------------///*************************************************************************/void show_screen( )
{
cprintf("\n********************************************************************************");
cprintf("*************************- -*************************");
cprintf("*------------------------- ");
textbackground(1);
cprintf(" Jacobi's Itrative Method ");
textbackground(8);
cprintf(" -------------------------*");
cprintf("************************- -*************************");
cprintf("********************************************************************************");
for(int count=0;count<42;count++)
cprintf("* *");
gotoxy(1,46);
cprintf("********************************************************************************");
cprintf("*------------------------------------------------------------------------------*");
cprintf("********************************************************************************");
gotoxy(1,2);
}
/*************************************************************************///------------------------- clear_screen( ) ---------------------------///*************************************************************************/void clear_screen( )
{
textbackground(8);
for(int count=0;count<37;count++)
{
gotoxy(3,8+count);
cout<<" ";
}
gotoxy(1,2);
}
/*************************************************************************///------------------ get_size_of_linear_equations( ) ------------------///*************************************************************************/void get_size_of_linear_equations( )
{
do
{
clear_screen( );
gotoxy(38,11);
cout<<"[ Maximum size = 4 ]";
gotoxy(4,9);
cout<<"Enter the size of the System of Linear Equations = n = ";
cin>>n;
if(n<=0 || n>max_size)
{
gotoxy(12,25);
cout<<"Error : Wrong Input. Press <Esc> to exit or any other key";
gotoxy(12,26);
cout<<" to try again.";
n=int(getche( ));
if(n==27)
exit(0);
}
}
while(n<=0 || n>max_size);
gotoxy(4,15);
cout<<"Enter the number of iterations that you want to perform = ";
cin>>iterations;
gotoxy(4,18);
cout<<"Do you want to make the System Diagonally Dominant : (Y/N) ? : ";
cin>>Diagonally_dominant;
gotoxy(1,2);
}
/*************************************************************************///----------------- show_input(const int,const int) -------------------///*************************************************************************/void show_input(constint x,constint y)
{
int counter=0;
int number_of_inputs=((x*n)+y+x);
for(int count_1=0;count_1<n;count_1++)
{
gotoxy(4,(17+(count_1*2)));
cout<<" ";
gotoxy(4,(17+(count_1*2)));
for(int count_2=0;count_2<=n;count_2++)
{
if(counter==(number_of_inputs+1))
textbackground(12);
else
textbackground(8);
if(count_2==n)
gotoxy((wherex( )+5),(17+(count_1*2)));
gotoxy(wherex( ),(17+(count_1*2)));
cprintf(" ");
if(count_2==n)
gotoxy((wherex( )-5),(17+(count_1*2)));
gotoxy((wherex( )-6),(17+(count_1*2)));
if(counter<=number_of_inputs && counter!=-1)
{
if(count_2==n)
{
cout<<" = ";
cout<<input[count_1][count_2];
}
elseif(count_2==0)
cout<<input[count_1][count_2]<<" x"<<(count_2+1);
else
cout<<fabs(input[count_1][count_2])<<" x"<<(count_2+1);
}
elseif(count_2==n)
cout<<" = b"<<(count_1+1);
else
cout<<"a"<<(count_1+1)<<(count_2+1)<<" x"<<(count_2+1);
if(count_2<(n-1) && input[count_1][(count_2+1)]>=0)
cout<<" + ";
elseif(count_2<(n-1))
cout<<" - ";
counter++;
}
}
}
/*************************************************************************///-------------------- get_input_linear_equation( ) -------------------///*************************************************************************/void get_input_linear_equation( )
{
clear_screen( );
gotoxy(4,9);
cout<<"Size of the System of Linear Equations = n = "<<n;
gotoxy(4,13);
cout<<"System of Linear Equations :";
gotoxy(4,14);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
show_input(0,-1);
for(int count_1=0;count_1<n;count_1++)
{
for(int count_2=0;count_2<=n;count_2++)
{
gotoxy(4,35);
cout<<" ";
gotoxy(4,35);
if(count_2<n)
cout<<"Enter the value of a"<<(count_1+1)<<(count_2+1)<<" = ";
else
cout<<"Enter the value of b"<<(count_1+1)<<" = ";
cin>>input[count_1][count_2];
show_input(count_1,count_2);
}
}
}
/*************************************************************************///----------------- sort_system_of_linear_equations( ) ----------------///*************************************************************************/void sort_system_of_linear_equations( )
{
for(int count_1=0;count_1<(n-1);count_1++)
{
for(int count_2=count_1;count_2<(n-1);count_2++)
{
for(int count_3=count_1;count_3<(n-1);count_3++)
{
longdouble temp[max_size]={0};
if(fabs(input[count_3][count_1])<
fabs(input[(count_3+1)][count_1]))
{
for(int count_4=0;count_4<=n;count_4++)
temp[count_4]=input[count_3][count_4];
for(int count_5=0;count_5<=n;count_5++)
input[count_3][count_5]=
input[(count_3+1)][count_5];
for(int count_6=0;count_6<=n;count_6++)
input[(count_3+1)][count_6]=temp[count_6];
}
}
}
}
}
/*************************************************************************///------------------ apply_jacobi_iterative_method( ) -----------------///*************************************************************************/void apply_jacobi_iterative_method( )
{
clear_screen( );
gotoxy(4,10);
cout<<"Solution :";
gotoxy(4,11);
cout<<"ÍÍÍÍÍÍÍÍÍÍ";
if(n==1)
{
gotoxy(4,13);
cout<<"ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿";
gotoxy(4,14);
cout<<"³ n ³ X1 ³";
gotoxy(4,15);
cout<<"ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´";
gotoxy(4,16);
cout<<"³ ³ ³";
}
elseif(n==2)
{
gotoxy(4,13);
cout<<"ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿";
gotoxy(4,14);
cout<<"³ n ³ X1 ³ X2 ³";
gotoxy(4,15);
cout<<"ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´";
gotoxy(4,16);
cout<<"³ ³ ³ ³";
}
elseif(n==3)
{
gotoxy(4,13);
cout<<"ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿";
gotoxy(4,14);
cout<<"³ n ³ X1 ³ X2 ³ X3 ³";
gotoxy(4,15);
cout<<"ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´";
gotoxy(4,16);
cout<<"³ ³ ³ ³ ³";
}
elseif(n==4)
{
gotoxy(4,13);
cout<<"ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿";
gotoxy(4,14);
cout<<"³ n ³ X1 ³ X2 ³ X3 ³ X4 ³";
gotoxy(4,15);
cout<<"ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´";
gotoxy(4,16);
cout<<"³ ³ ³ ³ ³ ³";
}
for(int count_1=0;count_1<n;count_1++)
{
longdouble temp[max_size]={0};
for(int count_2=0;count_2<=n;count_2++)
{
if(count_2!=count_1)
temp[count_2]=(input[count_1][count_2]/input[count_1][count_1]);
}
for(int count_3=0;count_3<=n;count_3++)
input[count_1][count_3]=temp[count_3];
}
for(int count_4=0;count_4<n;count_4++)
{
for(int count_5=0;count_5<n;count_5++)
input[count_4][count_5]*=-1;
}
int x_cord=4;
int y_cord=17;
for(int count_6=0;count_6<=iterations;count_6++)
{
if(n==1)
{
gotoxy(x_cord,y_cord);
cout<<"³ ³ ³";
gotoxy(x_cord,(y_cord+1));
cout<<"³ ³ ³";
}
elseif(n==2)
{
gotoxy(x_cord,y_cord);
cout<<"³ ³ ³ ³";
gotoxy(x_cord,(y_cord+1));
cout<<"³ ³ ³ ³";
}
elseif(n==3)
{
gotoxy(x_cord,y_cord);
cout<<"³ ³ ³ ³ ³";
gotoxy(x_cord,(y_cord+1));
cout<<"³ ³ ³ ³ ³";
}
elseif(n==4)
{
gotoxy(x_cord,y_cord);
cout<<"³ ³ ³ ³ ³ ³";
gotoxy(x_cord,(y_cord+1));
cout<<"³ ³ ³ ³ ³ ³";
}
gotoxy((x_cord+3),y_cord);
cout<<count_6;
gotoxy((x_cord+10),y_cord);
cout<<output[0];
if(n>=2)
{
gotoxy((x_cord+26),y_cord);
cout<<output[1];
}
if(n>=3)
{
gotoxy((x_cord+42),y_cord);
cout<<output[2];
}
if(n>=4)
{
gotoxy((x_cord+58),y_cord);
cout<<output[3];
}
for(int count_7=0;count_7<n;count_7++)
{
output[count_7]=0;
for(int count_8=0;count_8<n;count_8++)
{
if(count_8!=count_7)
output[count_7]+=(input[count_7][count_8]*previous_output[count_8]);
}
output[count_7]+=input[count_7][count_8];
}
for(int count_9=0;count_9<n;count_9++)
previous_output[count_9]=output[count_9];
y_cord+=2;
if((count_6%12)==0 && count_6<iterations && count_6>0)
{
y_cord=17;
gotoxy(30,44);
cout<<"Press any key to continue...";
getch( );
for(int count_10=1;count_10<25;count_10++)
{
gotoxy(3,(16+count_10));
cout<<" ";
}
}
}
if(n==1)
{
gotoxy(x_cord,y_cord);
cout<<"ÀÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ";
}
elseif(n==2)
{
gotoxy(x_cord,y_cord);
cout<<"ÀÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ";
}
elseif(n==3)
{
gotoxy(x_cord,y_cord);
cout<<"ÀÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ";
}
elseif(n==4)
{
gotoxy(x_cord,y_cord);
cout<<"ÀÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ";
}
gotoxy(30,44);
cout<<"Press any key to continue...";
getch( );
}
/*************************************************************************///----------------------------- show_result( ) ------------------------///*************************************************************************/void show_result( )
{
clear_screen( );
gotoxy(4,9);
cout<<"Jacobi's System of Linear Equations :";
gotoxy(4,10);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
for(int count_1=0;count_1<n;count_1++)
{
gotoxy(4,(13+(count_1*3)));
cout<<"x"<<(count_1+1);
gotoxy((wherex( )-1),(wherey( )-1));
cout<<"(k+1)";
gotoxy((wherex( )-3),(wherey( )+1));
cout<<" = ";
for(int count_2=0;count_2<=n;count_2++)
{
gotoxy(wherex( ),(13+(count_1*3)));
if(count_2!=count_1 && count_2<n)
{
if(count_2!=0)
cout<<fabs(input[count_1][count_2])<<" x"<<(count_2+1);
else
cout<<input[count_1][count_2]<<" x"<<(count_2+1);
gotoxy((wherex( )-1),(wherey( )-1));
cout<<"(k)";
gotoxy((wherex( )-1),(wherey( )+1));
if(input[count_1][(count_2+1)]>=0)
cout<<" + ";
else
cout<<" - ";
}
elseif(count_2!=count_1)
cout<<fabs(input[count_1][count_2]);
}
}
if(Diagonally_dominant=='Y' || Diagonally_dominant=='y')
{
gotoxy(4,26);
cout<<"Note: The given System of Linear Equations is solved by making it";
gotoxy(10,28);
cout<<"Diagonally Dominant.";
}
gotoxy(4,31);
cout<<"Result of Given System of Linear Equations :";
gotoxy(4,32);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";
for(int count_3=0;count_3<n;count_3++)
{
gotoxy(8,(34+count_3+count_3));
cout<<"x"<<(count_3+1)<<" = "<<output[count_3];
}
gotoxy(4,(36+count_3+count_3));
cout<<"* Number of Iterations for the above result = "<<iterations<<".";
gotoxy(1,2);
}