Code:
#include <stdio.h>
#include <stdlib.h>
//function for the input of the coefficients a11 to a55 and b1 to b5
void get_coefficients(float a[6][7])
{
printf("Enter coefficients a11-a15: ");
scanf("%f %f %f %f %f",&a[1][1],&a[1][2],&a[1][3],&a[1][4],&a[1][5]);
printf("\nEnter coefficients a21-a25: ");
scanf("%f %f %f %f %f",&a[2][1],&a[2][2],&a[2][3],&a[2][4],&a[2][5]);
printf("\nEnter coefficients a31-a35: ");
scanf("%f %f %f %f %f",&a[3][1],&a[3][2],&a[3][3],&a[3][4],&a[3][5]);
printf("\nEnter coefficients a41-a45: ");
scanf("%f %f %f %f %f",&a[4][1],&a[4][2],&a[4][3],&a[4][4],&a[4][5]);
printf("\nEnter coefficients a51-a55: ");
scanf("%f %f %f %f %f",&a[5][1],&a[5][2],&a[5][3],&a[5][4],&a[5][5]);
printf("\nEnter constants b1-b5: ");
scanf("%f %f %f %f %f",&a[6][1],&a[6][2],&a[6][3],&a[6][4],&a[6][5]);
}
//function to check the user input.
void check_input(float a[6][7])
{
a[1][1]=0;
a[2][2]=0;
a[3][3]=0;
a[4][4]=0;
a[5][5]=0;
while((a[1][1]==0)|(a[2][2]==0)|(a[3][3]==0)|(a[4][4]==0)|(a[5][5]==0))
{
get_coefficients(a);
if((a[1][1]==0)|(a[2][2]==0)|(a[3][3]==0)|(a[4][4]==0)|(a[5][5]==0))
{
printf("Error: Coefficients aNN cannot be zero for all values of N. Please provide new input.\n");
}
}
}
//function to print the values of the variables x1 to x5 after each iteration
void print_variables(int j,float x1,float x2,float x3,float x4,float x5)
{
printf("%d %.3f %.3f %.3f %.3f %.3f\n",j,x1,x2,x3,x4,x5);
}
//function to get the absolute value of non-integer numbers
float absf(float x)
{
if(x<0)
{
x=-x;
}
return x;
}
//function for the actual calculation of the Gauss-Seidel implementation
void gauss_seidel(float a[6][7])
{
float v[6]={0,0,0,0,0,0};
int i,j=0;
float x1,x2,x3,x4,x5;
float dif1,dif2,dif3,dif4,dif5;
print_variables(j,v[1],v[2],v[3],v[4],v[5]);
for(i=0,j=1;i<200;i++)//200 iterations
{
//Variables //Coefficients and variables
v[1]= (a[6][1] -a[1][2]*v[2] -a[1][3]*v[3] -a[1][4]*v[4] -a[1][5]*v[5] )/a[1][1];
v[2]= (a[6][2] -a[2][1]*v[1] -a[2][3]*v[3] -a[2][4]*v[4] -a[2][5]*v[5] )/a[2][2];
v[3]= (a[6][3] -a[3][1]*v[1] -a[3][2]*v[2] -a[3][4]*v[4] -a[3][5]*v[5] )/a[3][3];
v[4]= (a[6][4] -a[4][1]*v[1] -a[4][2]*v[2] -a[4][3]*v[3] -a[4][5]*v[5] )/a[4][4];
v[5]= (a[6][5] -a[5][1]*v[1] -a[5][2]*v[2] -a[5][3]*v[3] -a[5][4]*v[4] )/a[5][5];
print_variables(j,v[1],v[2],v[3],v[4],v[5]);
j++;
dif1=v[1]-x1;
dif2=v[2]-x2;
dif3=v[3]-x3;
dif4=v[4]-x4;
dif5=v[5]-x5;
if((absf(dif1)<0.0001)&&((absf(dif2))<0.0001)&&((absf(dif3))<0.0001)&&((absf(dif4))<0.0001)&&((absf(dif5))<0.0001))
{
break;
}
x1=v[1];
x2=v[2];
x3=v[3];
x4=v[4];
x5=v[5];
}
}
int main()
{
float inputarray[6][7];
check_input(inputarray);
gauss_seidel(inputarray);
system("pause");
return 0;
}