Code:
#include <stdio.h>
#include <math.h>
void scaling(double* P[],double B[], int i, int j,int order);
void printA(double A[30][30], int m,int n);
void printP(double* P[30], double B[30],int m,int n);
void diagonal(double* P[30], double B[30], int m,int n,int order);
void calc(double* P[30], double B[30], int m,int n);
int main()
{
double A[30][30];
double B[30];
double* P[30];
int i,j,m,n,order;
printf("enter the order of the matrix: \n");
scanf("%d",&i);
printf("enter %d*%d matrix:\n",i,i);
j=i;
for (m=0 ; m<i ; m++)
for(n=0 ; n<j ; n++)
scanf("%lf",&(A[m][n]));
printf("enter %d vector: \n",i);
for (m=0 ; m<i ; m++)
scanf("%lf",&(B[m]));
for (m=0;m<i;m++)
P[m]=A[m];
printP(P, B, m, n);
for(order=0;order<i;order++)
{
scaling(P,B,i,j,order);
printA(A,i,j);
printP(P,B,i,j);
diagonal(P,B,i,j,order);
printA(A,i,j);
printP(P,B,i,j);
}
calc(P, B, m, n);
return 0;
}
void scaling(double* P[],double B[], int i, int j,int order)
{
int m,n,maxrow;
double max[30], maxi=0,temp2;
double* temp;
for(m=order;m<i;m++)
max[m]=0;
for(m=order;m<i;m++)
printf("%f",max[m]);
for (m=order;m<i;m++)
for(n=order;n<j;n++)
if (max[m]< fabs(P[m][n]))
{
max[m]=fabs(P[m][n]);
printf("max%d=%f\n",m,max[m]);
}
for (m=order;m<i;m++)
if ((fabs(P[m][order])/max[m])>maxi)
{
maxi=(fabs(P[m][order]/max[m]));
maxrow=m;
}
if(maxrow!=order)
{
temp=P[maxrow];
P[maxrow]=P[order];
P[order]=temp;
temp2=B[maxrow];
B[maxrow]=B[order];
B[order]=temp2;
}
}
void printA(double A[30][30], int m,int n)
{
int i,j;
printf("original coefficients matrix:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%.2lf ",A[i][j]);
printf("\n");
}
printf("\n");
}
void printP(double* P[30], double B[30], int m,int n)
{
int i,j;
printf("current matrix:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%f ",P[i][j]);
printf("| %f",B[i]);
printf("\n");
}
printf("\n");
}
void diagonal(double* P[30], double B[30], int m,int n,int order)//diagonal b!!
{
int i,j,k;
printf("im alive\n");
for (i=order;i<m;i++)
for (j=0;j<order;j++)
for (k=1;k<m+1-order;k++)
P[i+k][j]=(P[i+k][j]-P[order][j]*P[order+k][order]/P[order][order]);
printf("im alive\n");
}
void calc(double* P[30], double B[30], int m,int n)
{
int i,j;
double x[30],y[30];
for (i=0;i<m;i++)
y[i]=B[i];
for (i=0;i<m;i++)
x[i]=0;
for (i=m;i>0;i--)
{
for (j=m;j>i;j--)
y[i]-=P[i][j]*x[j];
x[i]=y[i]/P[i][i];
printf("x[%d]=%f",i,x[i]);
}
}
we still have a run time error....