Подсчитать сумму каждой строки массива - 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, заканчивая работу программы