Чтобы приступить к решению задач, предложенных в этой статье, вам необходимо знать что такое двумерные (многомерные) массивы . Задачи расположены от простой к сложной. Так что, если вы новичок в программировании, начинайте с первой, чтобы лучше разобраться с остальными.
1. Объявить двумерный массив, заполнить целыми числами и показать на экран.
2) Объявить двумерный массив и заполнить его построчно с клавиатуры. После заполнения – показать заполненную матрицу на экран и посчитать сумму элементов отдельно в каждом столбце и каждой строке.
3) Заполнить двумерный массив случайными числами от 10 до 100. Посчитать сумму элементов отдельно в каждой строке и определить номер строки, в которой эта сумма максимальна.
Ваши вопросы, которые возникли при решении задач, оставляйте в комментариях к этой статье.
ошибку нашел но не знаю как исправить проверял в отдельных случаях массив забивается мусором после строки “s[i] += a[i][j];” в цикле
В общем разобрался. Программу я писал в visual studio, а там если не заполнить массив то в нем мусор хранится. А если заполнить массив нолями, а потом проделать то же самое получается то что и требуется
#include
#include
#include
#include
#include
using namespace std;
int main ()
{
const int arr=3;
int mas[arr][arr]={};
int sum[arr]={};
int maxi=0;
srand(time(NULL));
for (int i=0;i<arr;i++)
{
for(int j=0;j<arr;j++)
{
mas[i][j]=10+rand()%100;
cout<<setw (10)<< mas[i][j]<<setw (10);
}
cout<<endl;
}
for (int i=0;i<arr;i++)
{
for(int j=0;j<arr;j++)
{
sum[i]+=mas[i][j];
}
cout<<setw (10)<<"summa stroki "<<i+1<<" | " <<sum[i]<<endl;
}
for (int i=1;isum[maxi])
{
maxi=i;
}
}
cout<<maxi;
return 0;
}
Не могу вывести сумму строк в 3-й задаче, заполненный массив показывает, а дальше как будто ни чего нет.Вот код:
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
const int First = 2;
const int Second = 5;
int Array[First][Second] = {};
int sumArray[First]{};
srand(time(NULL));
for (int i = 0; i < First; i++)
{
for (int a = 0; a < Second; a++)
{
Array[i][a] = 10+rand() % 90;
cout << Array[i][a] << " ";
sumArray[i] +=Array[i][a];
}
cout << endl<<endl;
}
for (int i = 0; i << First; i++)
{
cout << "Сумма " << i + 1 << "-й строки:" << sumArray[i] << endl;
}
return(0);
}
При чем и во второй задаче точно такая же проблема, сумма строк не выводится на экран, остальные команды задания не проверял пока что ,решил разобраться с этим
В cout нельзя выводить целый массив (sumArray[i] ) одним оператором, а можно выводить только поэлементно.
Двумерные массивы можно выводить (точно так же как и заполнять) только вложенными циклами.
Но в решении 3-й задачи сумма строк выведена точно так же поэлементно через цикл по сути, или я что то не понимаю
for (int i = 0; i < MatrixSize; i++)
{
cout << i + 1 << "-я строка: " << rowSum[i] << endl;
}
А как во второй задаче,в этом выражении rowSum[rowNum] += ourMatrix[rowNum][columnNum];
columnSum[rowNum] += ourMatrix[columnNum][rowNum];добавляется сумма введенная,не пойму почему rowsum[rownum]например, знает,что в cout потом нужно выводить сумму трёх чисел (сумма строк)???
В 3-й задаче rowSum это 1-мерный массив:
int rowSum[MatrixSize] = {};
Хоть убей, все равно не могу понять ,что не так=((ведь у меня он тоже одномерный
int sumArray[First]{};
Мне так надоели ваши комментарии, что скопировал точно с экрана и выполнил (Linux, компилятор GCC):
[olej@dell comments]$ g++ c1.cc -o c1
c1.cc: В функции «int main()»:
c1.cc:13:24: предупреждение: extended initializer lists only available with -std=c++11 or -std=gnu++11
int sumArray[First]{};
^
[olej@dell comments]$ ./c1
47 17 72 68 39
59 71 76 49 55
Исправьте:
int sumArray[First]{};
– это нонсенс!
Спасибо за Ваше терпение и за то, что пытались мне помочь, но оказывается ошибка была очень глупа, из-за моей не внимательности :
for (int i = 0; i << First; i++)
Лишний знак ‘<'
Хорошая ошибка … смешная. Потому что i << First – это совершенно допустимое выражение, дающее значением i сдвинутое влево на First двоичных позиций (т.е. i * 2^First).
А 2-м параметром цикла for это значение сравнивается с 0 на равно / не равно (ложь/истина).
;-)
там где объявлен sumArray ты не поставил знак равно перед фигурными скобками)
Это не воспринимается как ошибка. При использовании инициализации с фигурными скобками, разрешается отбросить знак =
Но лучше всё писать явно
в последнем цикле for некорректная операция “<<"
А если у нас две одинаковые суммы? Какой тогда вид должен иметь код?
Объясните пжл, почему srand(time(NULL)) не работает внутри цикла for?
Потому что srand() – это начальная инициализация датчика случайных чисел, которая должна вызываться только 1 раз, в начале. А может и вообще не вызываться – тогда датчик инициализируется по умолчанию.
Не могу найти ошибку.. задал кол-во строк и столбцов 10х10, а на экран выводиться 5х5.
Уберите операторы (строки):
j++;
...
i++
...
Они у вас уже в теле циклов записаны.
Вот вы и скачете через 1 элемент.
Спасибо за помощь.
Здравствуйте! Не могу разобраться, почему при равном числе строк и столбцов двумерного массива подсчет суммы строк и столбцов программой выполняется корректно, а при не равном (например, 3 строки и 5 столбцов или на оборот) – не корректно? Это касается только подсчета сумма значений по столбцам.
Как решить такую проблему?