Найти сумму элементов каждого столбца матрицы - 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; }
Объяснение кода листинга программы
В этом коде выполняются следующие действия:
- Инициализируются переменные M и N (предположительно числами, которые вводит пользователь).
- Проверяется корректность введённых значений M и N (если они не удовлетворяют условиям, программа выводит сообщение об ошибке и завершается).
- Создаётся динамический двумерный массив B (представленный в виде массива указателей), и каждому из его элементов выделяется память под массив M целых чисел.
- Матрица B заполняется случайными целыми числами от 0 до 9.
- Выводится исходная матрица B.
- Выделяется память под массив D (для хранения сумм элементов каждого столбца).
- В цикле суммируются элементы каждого столбца матрицы B, и результат выводится на экран.
- Освобождается память, выделенная под массив D.
- В обратном порядке освобождается память, выделенная под каждый элемент матрицы B.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д