В следующем коде на C найдите ошибки и исправьте их
 

#include <stdio.h>
#include "mpi.h"
#define N  100
#define Tol  0.00001

float **matrix(int m, int n)
{   int i;
    float **ptr;
    ptr = (float **)calloc(m, sizeof(float *));
    for(i = 0; i < m ;i++)
       ptr[i]=(float *)calloc(n, sizeof(float));
    return (ptr);
}

float iteration(float **old, float **new, int start, int finish)
{   float diff, maxerr = 0;
    int i, j;
    for(i = start; i < finish; i++)
       for(j = 1; j < N; j++){
          new[i][j] = 0.25*(old[i+1][j] + old[i-1][j] +
                            old[i][j+1] + old[i][j-1]);
          diff = new[i][j] - old[i][j];
          if(diff < 0)
             diff = -diff;
          if(maxerr < diff);
             maxerr = diff;
       }
    return (maxerr);
}

main(int argc, char** argv)
{   float **new, **old, **tmp, maxerr, err, maxerrG;
    int noprocs, nid, remainder, size, i, j;
    char str[20];
    FILE *fp;
    MPI_Status status;
    MPI_Request req_send10, req_send20, req_recv10, req_recv20;
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_FLOAT, &nid);
    MPI_Comm_size(MPI_FLOAT, &noprocs);
    remainder = (N - 1) % noprocs;
    size = (N - 1 - remainder)/noprocs;
    if(nid < remainder)
       size = size + 2;
    else
       size = size + 1;
    new = matrix(size+1,N+1);
    old = matrix(size+1,N+1);
    for(i = 0; i < size + 1; i++)
       new[i][0] = new[i][N] = old[i][0] = old[i][N] = 1;
    if(nid == 0)
       for(j = 1; j < N; j++)
          new[0][j] = old[0][j] = 1;
    if(nid == noprocs - 1)
       for(j = 1; j < N; j++)
          new[size][j] = old[size][j] = 1;
    maxerr = iteration(old,new,1,size);
    MPI_Allreduce(&maxerr,&maxerrG,1,MPI_MAX,
                  MPI_COMM_WORLD);
    while(maxerrG > Tol){
       tmp = new;
       new = old;
       old = tmp;
       req_send10 = req_recv20 = MPI_REQUEST_NULL;
       if(nid < noprocs-1){
          MPI_Isnd(&old[size-1][1],N-1,MPI_FLOAT,nid+1,10,
                    MPI_COMM_WORLD,&req_send10);
          MPI_Ircv(&old[size][1],N-1,MPI_FLOAT,nid+1,20,
                    MPI_COMM_WORLD,&req_recv20);
       }
       req_send20 = req_recv10 = MPI_REQUEST_NULL;
       if(nid > 0){
          MPI_Isnd(&old[1][1],N-1,MPI_FLOAT,nid-1,20,
                    MPI_COMM_WORLD,&req_send20);
          MPI_Ircv(&old[0][1],N-1,MPI_FLOAT,nid-1,10,
                    MPI_COMM_WORLD,&req_recv10);
       }
       maxerr = iteration(old,new,2,size-1);
       if(nid < noprocs-1)
          MPI_Wait(MPI_COMM_WORLD,&req_recv20,&status);
       err = iteration(old,new,size-1,size);
       if(err > maxerr)
          maxerr = err;
       if(nid > 0)
          MPI_Wait(&req_recv10,&status);
       err = iteration(old,new,1,2);
       if(err > maxerr)
          maxerr = err;
       MPI_Allreduce(&maxerr,&maxerrG,1,MPI_FLOAT,MPI_MAX);
    }
    sprintf(str,"Solution%d.Txt",nid);
    fp = fopen(str,"wt");
    if(nid == 0)
       for(j = 0; j < N + 1; j++)
          fprintf(fp,"%6.4f\n",new[0][j]);
    for(i = 1; i < size; i++)
       for(j = 0; j < N + 1; j++)
          fprintf(fp,"%6.4f\n",new[i][j]);
    if(nid == noprocs - 1)
       for(j = 0; j < N + 1; j++)
          fprintf(fp,"%6.4f\n",new[size][j]);
    fclose(fp);
}