Посчитать сумму всех элементов матрицы - C (СИ)
Формулировка задачи:
Всем привет. Очень нужна ваша помощь ))
Вот код. Собственно, если вводить матрицу с консоли - всё работает. При чтении с файла - матрица читается и можно даже посчитать сумму всех элементов )) и если вывести её потом на консоль, значения в общем-то верные. Но. Невозможно посчитать сумму всех элементов этой матрицы. При первом же total+=arr[i][j] arr[i][j] = -6.2774359784998866e+066. Может ли это быть связано с переполнением буфера и как мне этого избежать?) Заранее спасибо! =)
#include "stdafx.h" //Вспомогательная функция для расчета индекса Рандича //int promresult принимает массив, число строк, число столбцов в нем. текущее значение i и j. // Возвращает выражение вида 1/(v1*v1*v2*v2), где v2 - сумма по k-й строке, v1 - сумма по l-му столбцу. float promresult(int m, int n, double **arr, int k, int l) { int i=0; int j=0; float v1=0; float v2=0; float result; for (i=0; i<m; ++i){ v1+=arr[i][l]; } for (j = 0; j < n; ++j){ v2+=arr[k][j]; } result =1/(v1*v2*v1*v2); return result; } // Функция, вычисляет сумму всех элементов. int sum(int m, int n, double **arr) { int i=0, j=0; int total=0; for (i=0, total=0; i<m; ++i){ for (j = 0; j < n; ++j){ total+=arr[i][j]; } } return total; } // Функция, вычисляет значение индекса Рандича float rand_calc(int m, int n, double **arr) { int i, j; float total=0; for (i=0; i<m; ++i){ for (j = 0; j < n; ++j){ if (arr[i][j] ==1){ total += (promresult(m, n, arr, i, j))/2; } } } return total; } int main(){ FILE *f; // Структура, описывающая входной и выходной файл int i, j; float randic; int wiener; // Индексы Рандича и Винера int m=0; // Размеры матрицы расстояний (m х n) char buff[512]; // Массив для ввода символов size_t num; // Число прочитанных символов f = fopen("c:\\distance matrix.txt", "rt"); // Открываем файл if (f == NULL) { perror("Error of reading"); return 1; } while ((num = fread(buff, 1, 512, f)) > 0) { for (i = 0; i < num; ++i){ if (buff[i] == '\n') ++m; // Определяем размер квадратной матрицы } } fclose(f); ++m; double **d_matrix; // Указатель на матрицу расстояний d_matrix = (double**) malloc( m*sizeof(double *)); // Захватывает память под массив указателей for (i = 0; i < m; ++i) { // Захватывается память под строку с индексом i d_matrix[i] = (double *) malloc(m * sizeof(double)); } f = fopen("c:\\distance matrix.txt", "rt"); // Открываем файл if (f == NULL) { perror("Error of reading"); return 1; } for(i=0; i<m; i++){ for (j=0; j<m; j++){ fscanf_s(f, "%d",&d_matrix[i][j]); } } fclose(f); wiener = sum(m, m, d_matrix); double **a_matrix; // Указатель на матрицу смежности a_matrix = (double**) malloc( m*sizeof(double *)); // Захватывает память под массив указателей for (i = 0; i < m; ++i) { // Захватывается память под строку с индексом i a_matrix[i] = (double *) malloc(m * sizeof(double)); } for(i=0; i<m; i++){ for (j=0; j<m; j++){ if(d_matrix[i][j] == 1) a_matrix[i][j] = 1; else a_matrix[i][j] = 0; } } randic = rand_calc(m, m, a_matrix); printf("Wiener = %f, Randic = %f\n", wiener, randic); for(i=0; i<m; i++){ for (j=0; j<m; j++){ printf("%d", d_matrix [i][j]); } } for(i=0; i<m; i++){ for (j=0; j<m; j++){ printf("%d", a_matrix [i][j]); } } return 0; }
Решение задачи: «Посчитать сумму всех элементов матрицы»
textual
Листинг программы
total+=arr[i][j]
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д