С плюсов на шарп - C#
Формулировка задачи:
Ребят, помогите! Уже час мучаемся!
Вот код на плюсах.
Вот наш код на шарпе
переписали один в один! Прога на плюсах работает, а на шарпе нет! ПОЧЕМУ?!?!?!?!?!
int Jakobi(int n, int m, float *a, float *b, float eps, float *x) { float *B,*E,*D,*a0,*Dobr,*prom,q,summ,*xk,y,max; int i,j,k,g,f; D=(float*)malloc(n*m*sizeof(float)); Dobr=(float*)malloc(n*m*sizeof(float)); E=(float*)malloc(n*m*sizeof(float)); B=(float*)malloc(n*m*sizeof(float)); a0=(float*)malloc(n*m*sizeof(float)); prom=(float*)malloc(n*m*sizeof(float)); xk=(float*)malloc(m*sizeof(float)); //проверка на диагональное преобладание //f=0; //for(i=0;i<n;i++) //{ // summ=0; // for(j=0;j<m;j++) // { // if(i!=j) summ=summ+fabs(*(a+i*m+j)); // if(fabs(*(a+i*m+i))<=summ) // { // f++; // } // } //} //if(f) //{ // printf("\nУсловие диагонального преобладания для матрицы А не выполнено. \nДля выхода из программы нажмите любую клавишу"); // getch(); // exit(0); //} //задание единичной матрицы Е for(i=0;i<n;i++) for(j=0;j<m;j++) { if(i==j) *(E+i*m+j)=1; else *(E+i*m+j)=0; } //задание матрицы D for(i=0;i<n;i++) for(j=0;j<m;j++) { if(i==j) *(D+i*m+j)=*(a+i*m+j); else *(D+i*m+j)=0; } //задание матрицы a0 for(i=0;i<n;i++) for(j=0;j<m;j++) { if(i==j) *(a0+i*m+j)=0; else *(a0+i*m+j)=*(a+i*m+j); } //Задание матрицы В ObrMatrix(n,m,D,Dobr); Umn(n,m,Dobr,a0,prom); Razn(n,m,E,prom,B); //Поехали решать q=norma(n,m,a); g=1; k=0; for(j=0;j<m;j++) *(x+j)=2; while(g) { for(j=0;j<m;j++) *(xk+j)=*(x+j); for(i=0;i<n;i++) { summ=0; for(j=0;j<m;j++) { if(i!=j) summ=summ+(*(a+i*m+j)*(*(xk+j))); } *(x+i)=1./(*(a+i*m+i))*(*(b+i)-summ); } max=0; for(j=0;j<n;j++) { y=fabs(*(x+j)-*(xk+j)); if(y>max) max=y; } if(max<eps) g=0; // output(n,1,x); k++; } return k; }
private void Jacobi() { for(int i=0;i<n;i++) for (int j = 0; j < n; j++) { if (i == j) { A0[i, j] = 0; D[i, j] = mas[i, j]; } else { A0[i, j] = mas[i, j]; D[i, j] = 0; } } for (int k = 0; k < n; k++) { for (int s = 0; s < n; s++) b[s] = 0; b[k] = 1; for (int i = n - 1; i >= 0; i--) { double sum = 0; for (int j = i; j < n; j++) { if (i != n - 1) { if (j + 1 < n) sum += D[i, j + 1] * DRev[j + 1, k]; } } DRev[i, k] = (b[i] - sum) / D[i, i]; } } // Умножение for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { double sum1 = 0; for (int k = 0; k < n; k++) { sum1 += DRev[i, k] * A0[k, j]; } temp[i, j] = sum1; } } /* for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) richTextBox3.Text += temp[i, j].ToString() + '\t'; richTextBox3.Text += '\n'; } */ for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) MinusB[i, j] = E[i, j] - temp[i, j]; for (int i = 0; i < n; i++) x[i] = 2; int cx = 0; bool fuckme = true; while (fuckme) { for (int i = 0; i < n; i++) xnp[i] = x[i]; for (int i = 0; i < n; i++) { double sum = 0; for (int j = 0; j < n; j++) { if (i != j) sum = sum + (mas[i, j] * xnp[j]); } try { x[i] = 1 / (mas[i, i] * (b[i] - sum)); } catch (Exception exc) { richTextBox3.Text += exc.Message; } } double max = 0; for (int j = 0; j < n; j++) { double y = Math.Abs(x[j] - xnp[j]); if (y > max) max = y; } cx++; if (max < epsilon) fuckme = false; } textBox3.Text = cx.ToString(); for (int i = 0; i < n; i++) richTextBox3.Text += x[i].ToString() + '\n'; }
Решение задачи: «С плюсов на шарп»
textual
Листинг программы
for(int i=0;i<n;i++) for (int j = 0; j < n; j++) // <----- Здесь должно быть j < m я полагаю
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д