Во всяком случае для меня. Проблема никак не связана с кодом, после прохода одного хода цикла, массив принимает странные значения, может из-за того, что я его переопределяю? Как это правильно делать?
| Код | #include <stdio.h> int main() { int max=4, maxk=max; double koeff[max][max]; double zn[max]; double koeff2[max][max]; double gt[max][max]; double zng[max]; double zn2[max]; double first=0; double koeff1, first2; koeff[1][1]=1; koeff[1][2]=0; koeff[1][3]=0; koeff[1][4]=0;
koeff[2][1]=1; koeff[2][2]=1; koeff[2][3]=1; koeff[2][4]=1;
koeff[3][1]=1; koeff[3][2]=2; koeff[3][3]=4; koeff[3][4]=8; koeff[4][1]=1; koeff[4][2]=3; koeff[4][3]=9; koeff[4][4]=27; zn[1] = 0; zn[2] = 1; zn[3] = 5; zn[4] = 14; for(int k=1; k<=maxk; k++) { first=1; for(int i=1; i<=max; i++) { first2=koeff[i][1]; for(int j=1; j<=max; j++) { if(first==1) { if(koeff[i][1]!=0)koeff1=koeff[i][1];else koeff1=1; if(j==1) if(koeff[i][1]!=0)koeff1=koeff[i][1];else koeff1=1; koeff[i][j]/=koeff1; if(j==1) zn[1] /= koeff1; if(j==max) first=0; } } for(int n=1; n<=max; n++) { if(i>1 && first==0) { koeff[i][n]=koeff[i][n]-first2*koeff[1][n]; if(n==1) zn[i]=zn[i]-first2*zn[1]; } for(int h=1; h<=max; h++) { for(int o=1; o<=max; o++) { printf("%g ", koeff[h][o]); if(o==max) printf(" | %g", zn[h]); } printf("\n"); } printf("\n\n"); } } for(int q=1; q<=maxk; q++) { int l=1; for(int g=1; g<=maxk; g++) { koeff2[q][g]=koeff[q][g]; zn2[q]=zn[q]; if(q==k){ if(g>=k){ gt[k][g]=koeff[1][l]; l++;} else gt[k][g]=0; if(q==k){ zng[k]=zn[1];} } } } max--; double koeff[max][max]; double zn[max]; for(int q=1; q<=max; q++) { for(int g=1; g<=max; g++) { koeff[q][g]=koeff2[q+1][g+1]; printf("(%g, %d %d) **%d**", koeff[q][g], koeff[0][g], q ,g); zn[q]=zn2[q+1]; for(int h=1; h<=max; h++) { for(int o=1; o<=max; o++) { printf("%g() ", koeff[h][o]); if(o==max) printf(" | %g", zn[h]); printf("----"); } printf("\n"); } printf("\n\n"); } } } for(int h=1; h<=maxk; h++) { for(int o=1; o<=maxk; o++) { printf("%g ", gt[h][o]); if(o==maxk) printf(" | %g", zng[h]); } printf("\n"); } printf("\n\n"); double x[maxk]; printf("Answers: \n"); for(int i=maxk; i>=1; i--) { x[i]=zng[i]; for(int j=1; j<=(maxk-i); j++) { x[i]-=gt[i][i+j]*x[i+j]; } printf("%g\n", x[i]); } while(1){} return 0; }
|
P.S.: Проблема с переменной double koeff[max][max];, и только когда её размер больше 4х4 |