Ошибка при подсчете элементов массива - 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]. Комментарии в коде:
- Уберете комментарии и у Вас получается здесь при i==0 и j==0 деление на ноль (аварийное закрытие).
- Предыдущую строку if(i=j) нужно заменить на if(i==j).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д