Посчитать сумму всех элементов матрицы - 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]

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


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

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

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