Подсчитать сумму каждой строки массива - 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;
}

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

  1. Включаем необходимые заголовочные файлы
  2. Объявляем переменные: m, n, i, j, array, summ
  3. Инициализируем генератор случайных чисел
  4. Запрашиваем у пользователя ввод m и n (количество строк и столбцов массива)
  5. Выделяем память под массив
  6. Заполняем массив случайными числами
  7. Выводим массив на экран
  8. Выводим 0 или 1 при сумме
  9. Освобождаем память
  10. Возвращаем 0, заканчивая работу программы

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


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

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

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