===== есть прога на Си: вычисление Сист Лин Уравн с помощью Обратной матрици... помогите ее па паскаль переписать ===
| Код | //MARTIX by Lomiren... #include <iostream.h> #include <math.h> #include <conio.h> #include <stdio.h> #include <complex.h>
double Reload(double MatrixR[20][20], int Len) { // ENTER THR MARTRIX //cout << "\nENTER THE MATRIX\n"; int l=0,k=0,i=0,j=0,c=0; double MatrixY[20][20]; double p=1,s=0,z=0; for (i=0;i<Len;i++) { MatrixY[i][0]=MatrixR[i][0]; for (j=1;j<Len;j++) { if(i>=j) { k=j; } else { k=i; } s=0; for (l=0;l<k;l++) { s=s+MatrixY[i][l]*MatrixY[l][j]; } MatrixY[i][j]=MatrixR[i][j]-s; if (j>i) { if(MatrixY[i][i]!=0) { MatrixY[i][j]=MatrixY[i][j]/MatrixY[i][i]; } else { MatrixY[i][j]=0; } } } z=MatrixY[i][i]; if(z==0) { p=0; goto g28; } else { g23:if (abs(z)>=1) { goto g25; } z=z*10; c=c-1; goto g23; g25:p=p*z; g26:if (abs(p)<=10) { goto g28; } p=p/10; c+=1; goto g26; } g28:
//cout << "vel opred D=p*10 c, gde p="<<p<<"c="<<c; } double Back=0; if (p!=0) { Back=p*pow(10,c); } else { Back=0; } return Back;
// EXIT THE MATRIX
} main() { clrscr(); cout << "\n Wake up Neo...\n"; int MaxLen,i,j; cout << "\n Enter max lenght of matrix\n"; cin >> MaxLen; double Matrix[20][20]; double MatrixA[20][20]; double MatrixB[20]; double MOpr; for (i=0;i<MaxLen;i++) { for(j=0;j<MaxLen;j++) { cin >> Matrix[i][j]; } cin >> MatrixB[i]; } MOpr=Reload(Matrix,MaxLen); cout <<"\nMatrix:\n"; for (i=0;i<MaxLen;i++) { for(j=0;j<MaxLen;j++) { cout << Matrix[i][j]<<" | "; } cout<< MatrixB[i]<<"\n"; } cout << "\n=====\n"; int counter=0,DRow=0,DCol=0,Row=0,Col=0; double Opr[20][20]; // ANTI MATRIX for (DRow=0;DRow<MaxLen;DRow++) { for (DCol=0;DCol<MaxLen;DCol++) { Row=0;Col=0; for (i=0;i<MaxLen;i++) { for(j=0;j<MaxLen;j++) { if ((i!=DRow) & (j!=DCol)) { MatrixA[Row][Col]=Matrix[i][j]; Col++; } } Col=0; if(i!=DRow) { Row++; } } //cout <<"\n ROW="<<Row<<"\n COL="<<Col;
/*cout <<"\nMatrix A:\n"; for (i=0;i<Row;i++) { for(j=0;j<Row;j++) { cout << MatrixA[i][j]<<" | "; } cout<<"\n"; } //cout << "\n=====\n"; // ENTER THE MATRIX*/ Opr[DRow][DCol]=pow(-1,(DRow+DCol))*Reload(MatrixA, Row); cout<<"\nOPR="<< Opr[DRow][DCol]<<" | "; //cout <<"\nOPR= "<<Opr;
}
//cout<<"\n"; }
// END ANTI MATRIX double X[20], temp=0; cout <<"\n MOPR="<<MOpr; for (i=0;i<MaxLen;i++) { temp=0; for (j=0;j<MaxLen;j++) { cout<<"\n B="<<MatrixB[j]<<" opr="<<Opr[j][i]; temp=temp+Opr[j][i]*MatrixB[j]; } cout<<"\n temp="<<temp<<" * "<<MatrixB[i];
X[i]=(1/MOpr)*temp; cout <<"\n X="<<X[i]; } return 0; }
| |