Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
#1

сумма элементов матрицы - C++

04.09.2013, 15:25. Просмотров 515. Ответов 18
Метки нет (Все метки)

С клавиатуры вводится размерность целочисленной матрицы,затем сама матрица.Найти сумму всех элементов.Разрешается при этом использовать только один оператор цикла(кроме цикла ввода матрицы).
Вот сделала эту задачу,правильно ли?или нельзя было еще одно For использовать?
Код:

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
#include <iostream>
using namespace std;
int main()
{
setlocale (LC_ALL, "RUS");
int i,j,N,M,S,a[20][20];
int *A;
cout<<"Введите количество строк,N="; 
cin>>N;
cout<<"Введите количество столбцов,M="; 
cin>>M;
A=new int [N*M];
cout<<"Составьте матрицу А\n";
//цикл по переменной i,в которой перебираем строки
for (i=0; i<N; i++)
//цикл по переменной j, в котором перебираем элементы внутри строки
for (j=0; j<M; j++)
cin>>a[i][j]; //ввод элемента матрицы
cout<<"матрица А:\n";
for (i=0; i<N; i++)
{
for (j=0; j<M; j++)
cout<<a[i][j]<<"\t"; //вывод элемента матрицы
cout<<endl; //переход на новую строку
}
for (S=i=0; i<N; i++)
for (j=0; j<M; j++)
S+=a[i][j];
cout<<"сумма равна,S="<<S<<endl;
system("pause");
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2013, 15:25     сумма элементов матрицы
Посмотрите здесь:

сумма элементов матрицы C++
Сумма элементов главной диагонали матрицы C++
Выполнить сортировку элементов в той строке матрицы сумма элементов в которой максимальная C++
сумма элементов матрицы по схеме C++
Сумма элементов матрицы. C++
C++ сумма элементов матрицы
C++ Для матрицы найти такие k и n, что сумма элементов k-столбца совпадает с суммой элементов n-й строки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 1
04.09.2013, 15:43     сумма элементов матрицы #2
с одним значит с одним)

C++
1
2
3
4
5
6
7
8
9
10
11
12
w - ширина матрицы
h - высота
 
int x,y;
for(int i = 0 ; i < w*h ; ++i)
{
 y = i / w;
 x = i - y * w;
 
S+= Matrix[x][y];
 
}
Добавлено через 8 минут
Цитата Сообщение от fkty Посмотреть сообщение
A=new int [N*M];
вот это у вас зачем, когда вы используете матриицу a[20][20]
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
04.09.2013, 15:45  [ТС]     сумма элементов матрицы #3
а можете объяснить как так получается?

Добавлено через 1 минуту
значит a[20][20] вообще не надо?
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 1
04.09.2013, 15:50     сумма элементов матрицы #4
ну вот например у нас матрица 5 на 5, заметим, что нумерация начинается с [0][0]
i, например = 6 , тогда строка будет равна (y = i / w = 6 / 5 = 1 (с учетом сокращения из за int) )
столбец (x = i - y * w = 6 - 1*5 = 1) и попали на a[1][1]. Короче говоря i бегает слева направо от верхней строки к нижней

Добавлено через 1 минуту
Цитата Сообщение от fkty Посмотреть сообщение
значит a[20][20] вообще не надо?
ну в задании написано сделать матрицу, значит именно a и нужно использовать, только размер у вас 20 на 20 ,а нужно как я понял задавать его с клавиатуры
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
04.09.2013, 15:54  [ТС]     сумма элементов матрицы #5
но если это убрать,то уже не будет работать
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 1
04.09.2013, 15:56     сумма элементов матрицы #6
Цитата Сообщение от fkty Посмотреть сообщение
int i,j,N,M,S,a[20][20];
int *A;
cout<<"Введите количество строк,N=";
cin>>N;
cout<<"Введите количество столбцов,M=";
cin>>M;
A=new int [N*M];
вот у вас тут создается массив A размером [N * M] а дальше вы продолжаете использовать a вместо нового созданного "A"
нужно что то одно тогда уж или "a" переделывать или использовать массив(не матрицу, хотя в принципе рассматривать как матрицу абстрактно можно) "A"
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
04.09.2013, 16:02  [ТС]     сумма элементов матрицы #7
cin>>A[i][j];опять что то не так?программа не работает
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 1
04.09.2013, 16:05     сумма элементов матрицы #8
Цитата Сообщение от fkty Посмотреть сообщение
cin>>A[i][j];
если использовать с двойными скобками, то и создавать нужно 2-х-мерный массив

int **A;
A = new int*[M]
for(int i = 0 ; i < M ; ++i) A[i] = new int[N];
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
04.09.2013, 16:08  [ТС]     сумма элементов матрицы #9
а как по другому сделать,что бы A=new int [N*M];сохранилось?
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 1
04.09.2013, 16:18     сумма элементов матрицы #10
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
for (i=0; i<N * M; i++)
{
cin>>A[i]; //ввод элемента матрицы
}
 
cout<<"матрица А:\n";
 
for (i=0; i<N; i++)
{
for (j=0; j<M; j++)
{
 
cout<< A[i * M + j]<<"\t"; //вывод элемента матрицы
 
}
cout<<endl; //переход на новую строку
}
 
int S = 0;
 
for(int i = 0 ; i < M*N ; ++i)
{
 
S+= A[i];
 
}
 
cout<<"сумма равна,S="<<S<<endl;
system("pause");
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
04.09.2013, 16:33  [ТС]     сумма элементов матрицы #11
Что же опять не так?
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
35
36
37
#include <iostream>
using namespace std;
int main()
{
setlocale (LC_ALL, "RUS");
int i,j,N,M,S;
int *A;
cout<<"N="; 
cin>>N;
cout<<"M="; 
cin>>M;
A=new int [N*M];
cout<<"Составьте матрицу А\n";
 
for (i=0; i<N*M; i++)
 
for (j=0; j<M*N; j++)
{
cin>>A[i]; 
}
cout<<"матрица А:\n";
for (i=0; i<N; i++)
{
 
for (j=0; j<M; j++)
{
cout<<A[i*M+j]<<"\t"; 
cout<<endl; 
}}
for (S=i=0; i<N*M; ++i)
{
S+=A[i];
}
cout<<"сумма равна,S="<<S<<endl;
system("pause");
return 0;
}
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 1
04.09.2013, 16:35     сумма элементов матрицы #12
Цитата Сообщение от fkty Посмотреть сообщение
for (i=0; i<N*M; i++)
for (j=0; j<M*N; j++)
верхняя лишняя (~15 Строка)
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
04.09.2013, 16:41  [ТС]     сумма элементов матрицы #13
теперь выводит матрицу в строчку
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 1
04.09.2013, 16:55     сумма элементов матрицы #14
вместо
Цитата Сообщение от fkty Посмотреть сообщение
for (i=0; i<N; i++)
{
for (j=0; j<M; j++)
{
cout<<A[i*M+j]<<"\t";
cout<<endl;
}}
так

C++
1
2
3
4
5
6
7
8
for (i=0; i<N; i++)
{
for (j=0; j<M; j++)
{
cout<<A[i*M+j]<<"\t"; 
}
cout<<endl;
 }
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
04.09.2013, 17:02  [ТС]     сумма элементов матрицы #15
cout<<A[i*M+j]<<"\t";как это объяснить?как теперь накопление суммы происходит?
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 1
04.09.2013, 17:18     сумма элементов матрицы #16
Цитата Сообщение от fkty Посмотреть сообщение
for (S=i=0; i<N*M; ++i)
{
S+=A[i];
}
накопление суммы вот тут
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
04.09.2013, 17:21  [ТС]     сумма элементов матрицы #17
то есть здесь A[i] индекс i уже не означает номер строки?а что здесь такое считает cout<<A[i*M+j]<<"\t";?
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 1
04.09.2013, 17:34     сумма элементов матрицы #18
Цитата Сообщение от fkty Посмотреть сообщение
то есть здесь A[i] индекс i уже не означает номер строки?
ага, здесь мы прогоняем цикл для всей матрицы (до i = M*N), матрицу A[N][M] мы вытянули в строку(массив) A[N*M] для работы с 1 циклом, это строка как бы составлена из маленьких строк матрицы в одну большую, по этому пройдясь от i = 0 до i = M*N мы пробегаем по всей матрице

C++
1
а что здесь такое считает cout<<A[i*M+j]<<"\t";?
а тут у нас два цикла "i" по высоте "j" - по ширине
i*M+j - где М-ширина матрицы - формула для вычисления индекса в массиве A[M*N] как если бы он был бы матрицей A[M][N]
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2013, 17:41     сумма элементов матрицы
Еще ссылки по теме:

C++ сумма всех элементов матрицы
C++ Наибольшая сумма элементов матрицы
Сумма элементов главной диагонали матрицы C++
C++ Если сумма индексов каких-либо двух элементов матрицы, расположенных ниже главной диагонали, равна минимальному элементу матрицы, то..
C++ Сумма элементов матрицы на и под побочной диагональю

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fkty
1 / 1 / 0
Регистрация: 06.01.2013
Сообщений: 265
04.09.2013, 17:41  [ТС]     сумма элементов матрицы #19
спасибо большое
Yandex
Объявления
04.09.2013, 17:41     сумма элементов матрицы
Ответ Создать тему
Опции темы

Текущее время: 13:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru