Двумерный массив как найти сумму строки

Есть массив:

int[][] array = new int[2][3];
array[0][0] = 1;
array[0][1] = 2;
array[1][0] = 3;
array[1][1] = 4;
array[0][2] = 5;
array[1][2] = 6;  

Используя цикл for, вычислите сумму каждой строки первого массива и запишите результат в новый массив.

Можете помочь кодом для новичка, т.е простое решение предложить?

Kromster's user avatar

Kromster

13.5k12 золотых знаков43 серебряных знака72 бронзовых знака

задан 15 июл 2018 в 13:43

Anastasia's user avatar

2

Если легкий вариант и не использую Stream API, то вам подойдет такой вариант:

public class Application {

    public static void main(String[] args) {
        int[][] array = new int[2][3];
        array[0][0] = 1;
        array[0][1] = 2;
        array[1][0] = 3;
        array[1][1] = 4;
        array[0][2] = 5;
        array[1][2] = 6;
        int[] newArray = new int[array.length];
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                newArray[i] += array[i][j];
            }
        }
        Arrays.stream(newArray).forEach(System.out::println);
    }

}

ответ дан 15 июл 2018 в 14:17

Andrii Torzhkov's user avatar

3

Вот например мы заполняем массив, так же и складывайте элементы массива.
Вот пример заполнения и вывода.

    package array;

/**
 *
 * @author vvm
 */
public class ArrayCount {

    public static void main(String[] args) {
        int[][] array = new int[2][3];
        for (int i = 0; i < 2; i++) {

            for (int j = 0; j < 3; j++) {
                array[i][j] = i+1;

            }
        }
        for (int i = 0; i < 2; i++) {
            System.out.println("");
            for (int j = 0; j < 3; j++) {
                System.out.print(" array[" + i + "]" + "[" + j + "]" + " = " + array[i][j]);
            }
        }
    }
}

array[i][j] — это ваш элемент массива, то что хранится в ячейке массива с номером ячейки [i][j]. Как в табличке. Только это условно. В памяти компьютера массив хранится по другому. Строки и столбцы — это условность.

ответ дан 15 июл 2018 в 15:20

Vyacheslav Mishchenko's user avatar

попробуйте так

    int rowsCount = array[0].length;
    for(int row = 0; row < rowsCount; row++)
    {
        int sum = 0;
        for(int i = 0; i < array.length; i++)
        {
            int cell = array[i][row];
            sum += cell;
            // debug (remove next line if not needed!)
            System.out.print(cell + (i < array.length - 1 ? " + " : " = "));
        }

        System.out.println(sum);
    }

ответ дан 16 июл 2018 в 6:49

Ramiz's user avatar

RamizRamiz

1,6049 серебряных знаков16 бронзовых знаков

Можно проще сделать с помощью stream:

int[][] array = new int[2][3];
array[0] = new int[]{1, 2, 5};
array[1] = new int[]{3, 4, 6};

int[] sums = Arrays.stream(array)
        // получаем сумму каждой строки
        .mapToInt(row -> Arrays.stream(row).sum())
        // возвращаем массив
        .toArray();

System.out.println(Arrays.toString(sums)); // [8, 13]

ответ дан 10 дек 2020 в 21:35

true_Den

2 / 2 / 1

Регистрация: 18.05.2011

Сообщений: 75

1

Сумма элементов по строкам в двумерном массиве…

28.05.2011, 17:39. Показов 51213. Ответов 9

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Программа которая вводит по строкам двумерный массив, и вычисляет сумму его элементов по строкам…

Нужна помощь….
Напишите как можно проще для понимания без всяких сложных фунуций, просто ввод двумерного массива и сумма…
очевидно что сумма будет считаться так

C++
1
2
3
4
5
s==0;
for (i=1;i<n;i++)
for (j=1;j<m;j++)
    s=s+a[i,j];
cout<< s;



0



asics

Freelance

Эксперт С++

2889 / 1824 / 356

Регистрация: 09.09.2010

Сообщений: 3,841

28.05.2011, 17:42

2

Ввод:

C++
1
2
3
for(int i = 0; i < rows; ++i)
  for(int j = 0; j < cols; ++j)
    cin >> matr[i][j];

Сума:

C++
1
2
3
4
5
6
for(int i = 0; i < rows; ++i){
  s = 0;
  for(int j = 0; j < cols; ++j)
    s += matr[i][j];
  cout << s << 'n';
}



0



2 / 2 / 1

Регистрация: 18.05.2011

Сообщений: 75

28.05.2011, 17:53

 [ТС]

3

чет не работает…. говорит что выражение должно иметь тип указателя на объект…



0



Freelance

Эксперт С++

2889 / 1824 / 356

Регистрация: 09.09.2010

Сообщений: 3,841

28.05.2011, 17:56

4

Цитата
Сообщение от true_Den
Посмотреть сообщение

чет не работает…. говорит что выражение должно иметь тип указателя на объект…

Да покажи код, я же не телепат.



0



true_Den

2 / 2 / 1

Регистрация: 18.05.2011

Сообщений: 75

28.05.2011, 18:10

 [ТС]

5

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int  s, rows, cols;
    
    int matr;
    cin>> rows;
    cin>> cols;
    for(int i = 0; i < rows; ++i)
  for(int j = 0; j < cols; ++j)
    cin >> matr[i][j];
for(int i = 0; i < rows; ++i){
  s = 0;
  for(int j = 0; j < cols; ++j)
    s += matr[i][j];
  cout << s << 'n';



0



Freelance

Эксперт С++

2889 / 1824 / 356

Регистрация: 09.09.2010

Сообщений: 3,841

28.05.2011, 23:40

6

true_Den, Посмотрите в любой книжке по С++ или поищите на форуме, как правильно выделять память под двумерный масив.



0



true_Den

2 / 2 / 1

Регистрация: 18.05.2011

Сообщений: 75

29.05.2011, 13:39

 [ТС]

7

так?

C++
1
2
3
4
int **matr = new int *[i];
     
for (int x = 0; x< i; x++) {
  matr[x] = new int [j];

Добавлено через 2 минуты
и наверно нужно освободить память?

C++
1
2
3
4
5
for (int x = 0; x < i; x++) {
  delete []matr[x];
}
delete []matr;
}

Добавлено через 15 минут

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
using namespace std;
int x,y;
int main()
int x, y
cout << "Введите кол-во строк в массиве: ";
cin >> x;
cout << "Введите кол-во столбцов в массиве: ";
cin >> y;
 
int **mas = new int *[x];
 
for (int i = 0; i < x; i++) {
  mas[i] = new int [y];
}
for (int i = 0; i < x; ++i)
  for(int j = 0; j < y; ++j)
    cin >> matr[i][j];
for (int i = 0; i < x; ++i)
{
  s = 0;
  for(int j = 0; j < y; ++j)
    s += matr[i][j];
  cout << s << 'n';
 
 
 
for (int i = 0; i < x; i++) {
  delete []mas[i];
}
delete []mas;

Добавлено через 13 часов 1 минуту
asics так?



0



Freelance

Эксперт С++

2889 / 1824 / 356

Регистрация: 09.09.2010

Сообщений: 3,841

29.05.2011, 13:45

8

Цитата
Сообщение от true_Den
Посмотреть сообщение

asics так?

Скомпилируй да попробуй, в чем проблема ?



0



2 / 2 / 1

Регистрация: 18.05.2011

Сообщений: 75

29.05.2011, 13:51

 [ТС]

9

В том то и проблема что он не правильно считает….
Вот я и спрашиваю может накосячил где….



0



Каратель

Эксперт С++

6608 / 4027 / 401

Регистрация: 26.03.2010

Сообщений: 9,273

Записей в блоге: 1

29.05.2011, 14:05

10

Цитата
Сообщение от true_Den
Посмотреть сообщение

int main()
int x, y

скобки кто открывать будет?

Добавлено через 23 секунды

Цитата
Сообщение от true_Den
Посмотреть сообщение

for (int i = 0; i < x; ++i)
{
s = 0;
for(int j = 0; j < y; ++j)
s += matr[i][j];
cout << s << ‘n’;

и закрывать



0



Start with the declaration: make sure that your program works with m×n matrix, not simply a 3×3 matrix. Since m and n have limits of 10 and 20, and because you must add an extra row and a column to the result, the declaration should be

int a[11][21];

You also need to declare m and n, have end-user enter them, and validate them to be within their acceptable ranges:

int m, n;
cin >> m >> n;
... // Do the validation

Now you can rewrite your loops in terms of m and n, rather than using 3 throughout your code.

With these declarations in place, you can total the numbers in place, i.e. for each row r you would write

for (int i = 0 ; i != n ; i++) {
    a[r][n+1] += a[r][i];
}

Similarly, you would compute the product (don’t forget to start it with the initial value of 1, not 0).

At the end you would print an (m+1)×(n+1) matrix to complete the task.

Перейти к содержанию

Суммы строк и столбцов матрицы

Просмотров 10.7к. Обновлено 15 октября 2021

Посчитать суммы каждой строки и каждого столбца матрицы. Вывести суммы строк в конце каждой строки, а суммы столбцов под соответствующими столбцами.

Поскольку двумерный массив обычно перебирается построчно, то сумму строк считать проще. Можно, заполняя строку матрицы и выводя ее элементы на экран, накапливать в переменной сумму элементов строки и выводить ее в конце строки.

Для сумм столбцов можно предусмотреть отдельный массив, в ячейках которого накапливать сумму каждого столбца. При построчном проходе по матрице, каждый новый элемент следует суммировать с соответствующим ему элементом массива сумм столбцов. Индекс элемента в строке матрицы будет совпадать с индексом элемента в массиве сумм.

Выводить суммы столбцов следует в отдельном цикле.

Pascal


const
M = 10;
N = 5;
var
a: array[1..N,1..M] of integer;
i, j: byte;
s: integer;
sc: array[1..M] of integer;
begin
for i:= 1 to M do
sc[i] := 0;

for i:=1 to N do begin
s := 0;
for j:=1 to M do begin
a[i,j] := random(10);
write(a[i,j]:6);
s := s + a[i,j];
sc[j] := sc[j] + a[i,j]
end;
writeln (' |', s);
end;
for i:= 1 to M do
write('--':6);
writeln;
for i:= 1 to M do
write(sc[i]:6);
writeln;

end.



Пример выполнения программы:

5 5 7 8 6 8 5 8 4 6 |62
6 3 4 2 8 0 9 2 3 4 |41
7 8 5 4 5 3 9 8 0 3 |52
0 6 0 3 8 9 7 1 8 8 |50
9 4 7 8 4 5 7 6 1 7 |58
-- -- -- -- -- -- -- -- -- --
27 26 23 25 31 25 37 25 16 28

Язык Си

сумма элементов каждого столбца матрицы c++


#include < stdio.h>
#define M 10
#define N 5
main() {
int a[N][M];
int sc[M];
int s, i, j;
srand(time(NULL));
for (i=0; i< M; i++) sc[i] = 0;
for (i=0; i< N; i++) {
s = 0;
for (j=0; j< M; j++) {
a[i][j] = rand() % 10;
printf("%5d", a[i][j]);
s += a[i][j];
sc[j] += a[i][j];
}
printf(" |%dn", s);
}
for (i=0; i< M; i++)
printf("%5s", "--");
printf("n");
for (i=0; i< M; i++)
printf("%5d", sc[i]);
printf("n");
}

Python

сумма элементов строки матрицы python (питон)


from random import random
M = 10
N = 5
a = []
for i in range(N):
b = []
for j in range(M):
b.append(int(random()*11))
print("%3d" % b[j], end='')
a.append(b)
print(' |', sum(b))

for i in range(M):
print(" --", end='')
print()

for i in range(M):
s = 0
for j in range(N):
s += a[j][i]
print("%3d" % s, end='')
print()



Пример(ы) выполнения программы на языке Python:

6 7 3 10 10 10 4 2 6 5 | 63
2 8 0 9 0 4 9 3 6 3 | 44
5 3 1 10 5 6 5 2 0 9 | 46
10 9 10 8 7 8 5 2 10 9 | 78
3 3 6 0 4 1 6 10 10 3 | 46
-- -- -- -- -- -- -- -- -- --
26 30 20 37 26 29 29 19 32 29
В Python используется немного иной алгоритм решения задачи. Сначала создается пустой список - будущая матрица. Далее в цикле в нее добавляются вложенные списки.

Суммы строк матрицы вычисляются с помощью функции sum(), которой передается текущий список-строка цикла.

Суммы столбцов вычисляются путем прохода по каждому столбу матрицы. Обратите внимание, что здесь наоборот: внешний цикл - проход по столбцам, внутренний - по строкам.

КуМир


алг суммы строк столбцов
нач
цел M = 10, N = 5
цел таб a[1:N,1:M], sc[1:M]
цел i, j, s
нц для i от 1 до M
sc[i] := 0
кц

нц для i от 1 до N
s := 0
нц для j от 1 до M
a[i,j] := int(rand(0,10))
вывод a[i,j], " "
s := s + a[i,j]
sc[j] := sc[j] + a[i,j]
кц
вывод " |", s, нс
кц

нц для i от 1 до M
вывод "---"
кц
вывод нс
нц для i от 1 до M
вывод sc[i], " "
кц
кон

Basic-256


M = 10
N = 5
dim a(N,M)
dim sc(M)
for i = 0 to N-1
s = 0
for j=0 to M-1
a[i,j] = int(rand*10)
print a[i,j] + " ";
s = s + a[i,j]
sc[j] = sc[j] + a[i,j]
next j
print " |" + s
next i

for i=0 to M-1
print "-- ";
next i
print
for i=0 to M-1
print sc[i] + " ";
next i
print

    public class TwoDimArraySolver
    {
        static void Main(string[] args)
        {
            int[,] array = {{ 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9}};
 
            for (int i = 0; i < array.GetLength(0); i++)
            {
                int sum = 0;
                for (int j = 0; j < array.GetLength(1); j++) 
                {
                    sum += array[i, j];
                }
                Console.Write(sum + " ");
            }
            Console.ReadKey(true);
        }
    }

Понравилась статья? Поделить с друзьями:
  • Window dialog как исправить
  • Как найти радиус описанной окружности треугольника формула
  • Как найти школу 141
  • Как найти уравнение обратное данному
  • Как найти напряжение на выходе трансформатора формула