Ошибка при подсчете элементов массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите исправить задачу,.. когда арккосинус вывожу из комментария программа запускается но при подсчете массива выдает ошибку с аварийным закрытием. А его нужно вставить.
#include <cstdlib>
#include <iostream>
#include <math.h>
#define N 15
#define L 15

void Zapol(double a[][N], int n, int m);
void PrintArray(double a[][N], int n, int m);
int SaveArray(double a[][N], int n, int m, char const *fname);
int SaveBin(double a[][N], int n, int m, char const *fname);
int LoadArray(double a[][N],  char const *fname);
int LoadBin(double a[][N],  char const *fname);
double Summa(double a[][N], int m, int k);
 
int main(int argc, char *argv[])
{
   double A[L][N],B[L][N],C[L][N];
   int n,m,k;

   printf("Vvetite kolichestvo strok(4-15):");
   scanf("%d",&n);
   if(n<4||n>N)
   {
       printf("Nepravilnyi vvod\n");
       system("PAUSE");
       return 1;
   }
    printf("Vvedite kolichestvo stolbtsov (4-15):");
   scanf("%d",&m);
   if(m<4||m>N)
   {
       printf("Nepravilnyi vvod\n");
       system("PAUSE");
       return 1;
   }
   printf("\nVvedite strocy:");
   scanf("%d",&k);
   Zapol(A,n,m);
   PrintArray(A,n,m);
   printf("Summa %d strocy: %lf", k, Summa(A,m,k));
   SaveArray(A,n,m,"Lab7.txt");
   SaveBin(A,n,m,"Lab7Bin.txt");
   LoadArray(B,"Lab7.txt");
   printf("\n\n\n");
   PrintArray(B,n,m);
   LoadBin(C,"Lab7Bin.txt");
   printf("\n\n\n");
   PrintArray(C,n,m);
   system("PAUSE");
   return EXIT_SUCCESS;
}

void Zapol(double a[][N], int n, int m)
{
   int i,j;
   for(i=0;i<n;i++)
       for(j=0;j<m;j++)
       {
           if(i<j)
               a[i][j]=cos(i+j);
           else
               //if(i=j)
                   a[i][j]=1;
               //else
                   //acos((i+j)/(2*i+3*j));
 
       }
}

void PrintArray(double a[][N], int n, int m)
{
   int i,j;
   for(i=0;i<n;i++)
   {
       for(j=0;j<m;j++)
           printf("%6.3lf ",a[i][j]);
       printf("\n");
   }
}

int SaveArray(double a[][N], int n, int m, char const *fname)
{
   FILE *f=fopen(fname,"wt");
   if(f==NULL)
   {
       return 0;
   }
   fprintf(f,"%d %d\n",n,m);
   for(int i=0;i<n;i++)
   {
       for(int j=0;j<m;j++)
           fprintf(f,"%6.3lf ",a[i][j]);
       fprintf(f,"\n");
   }
   fclose(f);
   return 1;
}

int SaveBin(double a[][N], int n, int m, char const *fname)
{
   FILE *f=fopen(fname,"wb");
   if(f==NULL)
   {
       return 0;
   }
 
   fwrite(&n, sizeof(int),1,f);
   fwrite(&m, sizeof(int),1,f);
   int z;
   for(z=0;z<m;z++)
       for(int x=0;x<n;x++)
           fwrite(a[z], sizeof(double), m, f);
   fclose(f);
   return 1;
}

int LoadArray(double a[][N], char const *fname)
{
   int n,m;
   FILE *f=fopen(fname,"rt");
   if(f==NULL)
   {
       return 0;
   }
   fscanf(f,"%d%d",&n,&m);
   for(int i=0;i<n;i++)
       for(int j=0;j<m;j++)
           fscanf(f,"%lf",&a[i][j]);
   fclose(f);

   return n;
}

int LoadBin(double a[][N], char const *fname)
{
   int n,m;
   FILE *f=fopen(fname,"rb");
   if(f==NULL)
   {
       return 0;
   }
   fread(&n,sizeof(int),1,f);
   fread(&m,sizeof(int),1,f);
   int z;
   for(z=0;z<m;z++)
       for(int x=0;x<n;x++)
           fread(a[z], sizeof(double), m, f);
   fclose(f);
 
   return n;
}

double Summa(double a[][N], int m, int k)
{
   double s=0;
   for(int j=0;j<m;j++)
       s+=a[k-1][j];
   return s;
}

Решение задачи: «Ошибка при подсчете элементов массива»

textual
Листинг программы
for(i=0;i<n;i++)
 for(j=0;j<m;j++)
 {
 if(i<j)
 a[i][j]=cos(i+j);
 else
 //if(i=j)
 a[i][j]=1;
 //else
 //acos((i+j)/(2*i+3*j));// уберете комментарии и у Вас получается здесь при i==0 и j==0 деление на ноль (аварийное закрытие). Предыдущую строку if(i=j) нужно заменить на if(i==j)

Объяснение кода листинга программы

В этом коде выполняется два вложенных цикла. Первый цикл идет по строкам массива a от 0 до n-1, а второй цикл идет по столбцам массива a от 0 до m-1. Внутри двойного цикла проверяется, меньше ли значение переменной i, чем значение переменной j. Если это так, то элементу массива a[i][j] присваивается значение функции cos(i+j). Если же i больше или равно j, то проверяется, равны ли они друг другу. Если это так, то элементу массива a[i][j] присваивается значение 1. В противном случае (если i не равно j), выполняется вычисление значения функции acos((i+j)/(2i+3j)) и присваивается элементу массива a[i][j]. Комментарии в коде:

  1. Уберете комментарии и у Вас получается здесь при i==0 и j==0 деление на ноль (аварийное закрытие).
  2. Предыдущую строку if(i=j) нужно заменить на if(i==j).

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


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

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

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