Подсчитать сумму каждой строки массива - C (СИ)
Формулировка задачи:
через функцию прописан двумерный массив m*n. задание следующее. нужно подсчитать сумму каждой строки массива и если она положительная - вывести 1, а если нет, то 0. проблема в том, что моя программа подсчитывает сумму всех элементов, а не строки. то есть если три строки, то в каждой по отдельности должно высчитать суммы и вывести три цифры, которые принимают значение 0(если ответ отрицательный) и 1(если ответ положительный)
исправьте программу, а то вообще не пойму никак...
#include <stdio.h> #include <conio.h> #include <math.h> #include <stdlib.h> #include <ctype.h> int tr (int**, int, int); int main () { int a[20][20]; int n, i, j, m; int **p; printf ("chislo strok:"); scanf ("%d", &m); printf ("chislo stolbcov:"); scanf("%d", &n); for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { printf ("a[%d,%d]=", i+1, j+1); scanf("%d", &a[i][j]); } } p=(int**)malloc(m*sizeof(int)); p=(int**)malloc(n*sizeof(int)); for(int i=0; i<m; i++) for(int j=0; j<n; j++) p[i]=(int*)malloc(m*sizeof(int)); for(int i=0; i<m; i++) for(int j=0; j<n; j++) p[j]=(int*)malloc(n*sizeof(int)); for(int i=0; i<m; i++) for(int j=0; j<n; j++) p[i][j]=a[i][j]; int t=tr(p,m,n); for(int i=0; i<m; i++) if (t>0) { printf("1"); } else {printf("0");} getch(); return 0; } int tr(int**p, int m, int n) { int t, i, j; t=0; for(int i=0; i<m; i++) for(int j=0; j<n; j++) t+=p[i][j]; return t; }
Решение задачи: «Подсчитать сумму каждой строки массива»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { size_t m, n; size_t i, j; int** array; int summ; srand(time(NULL)); printf("input m,n: "); scanf("%u %u", &n, &m); // Выделяем память под массив array = malloc(sizeof(int*) * m); for (i = 0; i < m; ++i) { array[i] = malloc(sizeof(int) * n); } // Заполняем массив случайными числами for (i = 0; i < m; ++i) { for (j = 0; j < n; ++j) { array[i][j] = rand() % 10 - 5; } } // Выводим массив на экран for (i = 0; i < m; ++i) { for (j = 0; j < n; ++j) { printf("%3d", array[i][j]); } printf("\n"); } printf("\n"); // Выводим 0 или 1 при сумме for (i = 0; i < m; ++i) { summ = 0; for (j = 0; j < n; ++j) { summ += array[i][j]; } printf("%d ", (summ < 0) ? 0 : 1); } // Освобождаем память for (i = 0; i < m; ++i) { free(array[i]); } free(array); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем переменные: m, n, i, j, array, summ
- Инициализируем генератор случайных чисел
- Запрашиваем у пользователя ввод m и n (количество строк и столбцов массива)
- Выделяем память под массив
- Заполняем массив случайными числами
- Выводим массив на экран
- Выводим 0 или 1 при сумме
- Освобождаем память
- Возвращаем 0, заканчивая работу программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д