Найти сумму элементов каждого столбца матрицы - C (СИ)

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

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

Здравствуйте... я сделал задачу на СИ. И у меня выходит какая та ошибка. И я ни как не могу найти её. Посмотрите пож-та. Может вы найдёте... Вот условие задачи... 1. Дана матрица B(N,M) (N≤M, M≤13). Найти сумму элементов каждого столбца матрицы. Сформировать массив D из найденных сумм. А вот которую я сделал... вот здесь какая та ошибка посмотрите...
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
        srand(time(NULL));
        int M = 0, N = 0;
        
        printf("Введите число M в десятичной системе считсления: ");
        scanf("%d", &M);
        
        printf("Введите число N в десятичной системе считсления: ");
        scanf("%d", &N);
        
        if(M > 13 || M == 0) { printf("Число М имеет неверное значение\n"); system("pause"); return -1; }
        if(N >  M || N == 0) { printf("Число N имеет неверное значение\n"); system("pause"); return -1; }
        
        // Создание динамического двумерного массива
        // Сначала выделяется память под N указателей
        // Затем в цикле каждому указателю вектор размером M
    int **B = (int**)malloc(N*sizeof(int*));
    for (int i = 0; i < N; i++)
        B[i] = (int*)malloc(M*sizeof(int));
 
        // Заполнение матрицы случайными значениями
    for (int i = 0; i < N; i++)
        for (int j = 0; j < M; j++)
            B[i][j] = rand()%10;
 
        // Вывод матрицы
        printf("Исходная матрица\n");
        for (int i = 0; i < N; i++)
        {
                for (int j = 0; j < M; j++)
                        printf("%d\t", B[i][j]);
                printf("\n");
        }
        
        // Выделяем память под массив 
        int * D = (int*)malloc(M*sizeof(int));
        // Подсчет суммы и одновременный вывод
        printf("\nПодсчет сумм\n");
        for(int i = 0; i < M; i++)
        {
                D[i] = 0;
                for(int j = 0; j < N; j++)
                {
                        D[i] += B[j][i];
                }
                printf("%d столбец: %d\n", (i+1), D[i]);
        }               
        // Освобождаем выделенную память
        free(D);
 
        // Освобождение выделенной памяти
        // Для каждого malloc свой free!
    for (int i = 0; i != N; ++i)
        free(B[i]);   
    free(B);
 
        system("pause");
        return 0;
}

Решение задачи: «Найти сумму элементов каждого столбца матрицы»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
        srand(time(NULL));
        int M = 0, N = 0, i;
        
        printf("Введите число M в десятичной системе считсления: ");
        scanf("%d", &M);
        
        printf("Введите число N в десятичной системе считсления: ");
        scanf("%d", &N);
        
        if(M > 13 || M == 0) { printf("Число М имеет неверное значение\n"); system("pause"); return -1; }
        if(N >  M || N == 0) { printf("Число N имеет неверное значение\n"); system("pause"); return -1; }
        
        // Создание динамического двумерного массива
        // Сначала выделяется память под N указателей
        // Затем в цикле каждому указателю вектор размером M
    int **B = (int**)malloc(N*sizeof(int*));
    for ( i = 0; i < N; i++)
        B[i] = (int*)malloc(M*sizeof(int));
 
        // Заполнение матрицы случайными значениями
    for ( i = 0; i < N; i++)
        for (int j = 0; j < M; j++)
            B[i][j] = rand()%10;
 
        // Вывод матрицы
        printf("Исходная матрица\n");
        for ( i = 0; i < N; i++)
        {
                for (int j = 0; j < M; j++)
                        printf("%d\t", B[i][j]);
                printf("\n");
        }
        
        // Выделяем память под массив 
        int * D = (int*)malloc(M*sizeof(int));
        // Подсчет суммы и одновременный вывод
        printf("\nПодсчет сумм\n");
        for( i = 0; i < M; i++)
        {
                D[i] = 0;
                for(int j = 0; j < N; j++)
                {
                        D[i] += B[j][i];
                }
                printf("%d столбец: %d\n", (i+1), D[i]);
        }               
        // Освобождаем выделенную память
        free(D);
 
        // Освобождение выделенной памяти
        // Для каждого malloc свой free!
    for ( i = 0; i != N; ++i)
        free(B[i]);   
    free(B);
 
        system("pause");
        return 0;
}

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

В этом коде выполняются следующие действия:

  1. Инициализируются переменные M и N (предположительно числами, которые вводит пользователь).
  2. Проверяется корректность введённых значений M и N (если они не удовлетворяют условиям, программа выводит сообщение об ошибке и завершается).
  3. Создаётся динамический двумерный массив B (представленный в виде массива указателей), и каждому из его элементов выделяется память под массив M целых чисел.
  4. Матрица B заполняется случайными целыми числами от 0 до 9.
  5. Выводится исходная матрица B.
  6. Выделяется память под массив D (для хранения сумм элементов каждого столбца).
  7. В цикле суммируются элементы каждого столбца матрицы B, и результат выводится на экран.
  8. Освобождается память, выделенная под массив D.
  9. В обратном порядке освобождается память, выделенная под каждый элемент матрицы B.
  10. Программа завершается.

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


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

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

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