С плюсов на шарп - 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 я полагаю

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы