Не могу разобрать, как подсчитать количество столбцов, элементы которых расположены в порядке возрастания в двумерно массиве?
Не могу разобрать, как подсчитать количество столбцов, элементы которых расположены в порядке возрастания в двумерно массиве ? c++
Я написал заполнение цикла, но не могу додуматься до остольного:
как подсчитать количество столбцов, элементы которых расположены в порядке возрастания в двумерно массиве
Вот фрагмент кода программы которой не могу доделать:
#include <iostream>
using namespace std;
int main()
{
// Объявление переменных
int numRows,numCols;
// Запрос данных пользователя
cout << "введите кол-во строк для матрицы: ";
cin >> numRows ;
cout << "введите кол-во столбоцов для матрицы: ";
cin >> numCols;
// cout << "Матрицы NxN равняется: " << numRows << "x" << numCols << endl;
int a[numRows][numCols];
// Заполнение массива
for (int i = 0; i < numRows;i++){
cout << "Вводим " << i + 1 << " строку\n";
for (int j = 0; j < numCols; j++){
cout << "Введите целое число: ";
cin >> a[i][j];
}
}
// Вывод матрицы пользователя
cout << "Ваша матрица: " << endl;
for (int i = 0; i < numRows; i++) {
for (int j = 0; j < numCols; j++) {
cout << a[i][j] << ' ';
}
cout << endl;
}
for(int j =1; j<numCols;j++){
int count = 0;
for(int i = 1; i<numRows - 1;i++){
if( a[i + 1][j] > a[i][j] ){
break;
}
if( i = numRows - 1 ){
count = count + 1;
}
}
cout << count;
}
Ответы (1 шт):
В последнем цикле есть пара логических ошибок. Рассмотрим Ваш код подробнее:
for(int j =1; j<numCols;j++)
{
int count = 0;
for(int i = 1; i<numRows - 1; i++)
{
if( a[i + 1][j] > a[i][j] )
{
break;
}
if( i = numRows - 1 )
{
count = count + 1;
}
}
}
Во-первых, опечатка, которую я указал в комментарии: if( i = numRows - 1 ). У вас здесь вместо знака равенства оператор присваивания. Вот что произойдёт при вычислении результата условия: переменной i будет присвоено значение numRows - 1, а потом, т.к. if работает только с данными логического типа, i будет преобразована к типу bool по правилу "Если 0, то false, иначе – true". Таким образом, условие будет выполнено в каждом случае, когда numRows - 1 не равно нулю.
Во-вторых, если поправить это условие, столкнёмся с другой, уже логической, ошибкой: тело цикла выполняется до тех пор, пока i < numRows - 1, следовательно, условие, заключённое в этом теле, if( i == numRows - 1 ) никогда не будет выполнено, т.к. к моменту, когда оно будет достигнуто, цикл уже перестанет выполняться. Следовательно, скорее всего, нужно заменить numRows - 1 на numRows - 2.
В-третьих, циклы почему-то начинаются от 1, хотя наименьший индекс массива в c++ – 0.
В-четвёртых, конструкция
if( a[i + 1][j] > a[i][j] )
{
break;
}
вероятно, предназначена, чтобы, когда не выполняется условие "элементы идут по возрастанию", переходить к следующему столбцу. Но, если a[i + 1][j] > a[i][j], то элементы как раз идут по возрастанию. Значит данное условие нужно заменить на обратное:
if( a[i + 1][j] <= a[i][j] )
{
break;
}
Я намеренно не стану прилагать к ответу готовый код с полным решением, чтобы автор вопроса прочитал мои замечания и постарался сам разобраться в своих ошибках и исправить их, а не просто скопировал готовый код, не обратив внимания на всё, что я так старательно здесь расписывал. Замечаний, представленных выше, достаточно, чтобы исправить программу до рабочего состояния.