Дана целочисленная квадратная матрица порядка n. найти номера строк: а) все элементы которых четны; б) в которых нет ни одного нулевого элемента. приравнять к нулю все элементы на главной и побочной диагоналях. (с++)
using namespace std; int main() { setlocale(LC_ALL, "Russian"); int n; bool notEvenOrNulls = false; cout << "n = "; cin >> n; int even, nulls; int **A = new int*[n]; for (int i = 0; i < n; i++) A[i] = new int[n];
Хорошо, я рад помочь! Давайте разберем этот вопрос шаг за шагом.
1. Сначала нам нужно объявить и инициализировать исходную матрицу. Пусть она будет представлена в двумерном массиве размерности nxn.
```c++
int n = 3; // порядок матрицы
int matrix[n][n] = {{1, 2, 3},
{4, 0, 6},
{7, 8, 9}};
```
2. Теперь нам нужно найти строки, в которых все элементы четные. Для этого нужно пройтись по каждой строке и проверить, что все элементы в строке являются четными. Если это так, то мы будем хранить номера этих строк в отдельном массиве.
```c++
vector evenRows; // массив для хранения номеров строк, в которых все элементы четные
for(int i = 0; i < n; i++) {
bool isEven = true; // флаг, показывающий, что все элементы в строке четные
for(int j = 0; j < n; j++) {
if(matrix[i][j] % 2 != 0) { // если найден хотя бы один нечетный элемент, то выходим из цикла
isEven = false;
break;
}
}
if(isEven) { // если все элементы в строке четные, то добавляем номер строки в массив
evenRows.push_back(i);
}
}
```
3. Теперь перейдем к поиску строк, в которых нет ни одного нулевого элемента. В этом случае мы будем использовать другой флаг, который будет указывать, что в строке есть хотя бы один нулевой элемент.
```c++
vector nonZeroRows; // массив для хранения номеров строк, в которых нет ни одного нулевого элемента
for(int i = 0; i < n; i++) {
bool hasZero = false; // флаг, показывающий, есть ли нулевой элемент в строке
for(int j = 0; j < n; j++) {
if(matrix[i][j] == 0) { // если найден хотя бы один нулевой элемент, то выходим из цикла
hasZero = true;
break;
}
}
if(!hasZero) { // если в строке нет нулевых элементов, то добавляем номер строки в массив
nonZeroRows.push_back(i);
}
}
```
4. Наконец, нам нужно заменить на 0 все элементы, находящиеся на главной и побочной диагоналях матрицы. Для этого мы будем использовать два вложенных цикла, пройдясь по соответствующим элементам на диагоналях.
```c++
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(i == j || i == n - j - 1) { // если элемент находится на главной или побочной диагонали
matrix[i][j] = 0; // заменяем его на 0
}
}
}
```
Теперь у нас есть массивы evenRows и nonZeroRows, содержащие номера строк, удовлетворяющих требованиям вопроса. А матрица matrix изменена, так что элементы на главной и побочной диагоналях заменены на 0.
Надеюсь, это решение поможет вам понять, как найти номера строк, удовлетворяющих условиям задачи, и как заменить элементы на диагоналях на 0. Если у вас возникнут еще вопросы, не стесняйтесь задавать!
#include <time.h>
#include <stdlib.h>
using namespace std;
int main() {
setlocale(LC_ALL, "Russian");
int n;
bool notEvenOrNulls = false;
cout << "n = ";
cin >> n;
int even, nulls;
int **A = new int*[n];
for (int i = 0; i < n; i++)
A[i] = new int[n];
//Заполнение матрицы
cout << " *** Исходный массив *** " << endl;
srand(time(NULL));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
A[i][j] = rand() % 10;
printf("%4d", A[i][j]);
}
printf("\n");
}
//Поиск номеров строк со всеми четными
cout << "№ строк со всеми четными = ";
for (int i = 0; i < n; i++) {
even = 0;
for (int j = 0; j < n; j++)
if (A[i][j] % 2 == 0) even++;
if (even == n) {
cout << i + 1 << " ";
notEvenOrNulls = true;
}
}
if (notEvenOrNulls == false) cout << "Таких строк нет";
cout << endl;
notEvenOrNulls = false;
//Поиск номеров строк без нулей
cout << "№ строк без нулей = ";
for (int i = 0; i < n; i++) {
nulls = 0;
for (int j = 0; j < n; j++)
if (A[i][j] == 0) nulls++;
if (nulls == 0) {
cout << i + 1 << " ";
notEvenOrNulls = true;
}
}
if (notEvenOrNulls == false) cout << "Таких строк нет";
cout << endl;
//Замена диагоналей на нули
cout << " *** Измененный массив *** " << endl;
for (int i = 0; i < n; i++) {
A[i][n - 1 - i] = 0;
for (int j = 0; j < n; j++)
if (i == j) A[i][j] = 0;
}
//Вывод матрицы
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
printf("%4d", A[i][j]);
printf("\n");
}
system("pause");
return 0;
}
1. Сначала нам нужно объявить и инициализировать исходную матрицу. Пусть она будет представлена в двумерном массиве размерности nxn.
```c++
int n = 3; // порядок матрицы
int matrix[n][n] = {{1, 2, 3},
{4, 0, 6},
{7, 8, 9}};
```
2. Теперь нам нужно найти строки, в которых все элементы четные. Для этого нужно пройтись по каждой строке и проверить, что все элементы в строке являются четными. Если это так, то мы будем хранить номера этих строк в отдельном массиве.
```c++
vector
for(int i = 0; i < n; i++) {
bool isEven = true; // флаг, показывающий, что все элементы в строке четные
for(int j = 0; j < n; j++) {
if(matrix[i][j] % 2 != 0) { // если найден хотя бы один нечетный элемент, то выходим из цикла
isEven = false;
break;
}
}
if(isEven) { // если все элементы в строке четные, то добавляем номер строки в массив
evenRows.push_back(i);
}
}
```
3. Теперь перейдем к поиску строк, в которых нет ни одного нулевого элемента. В этом случае мы будем использовать другой флаг, который будет указывать, что в строке есть хотя бы один нулевой элемент.
```c++
vector
for(int i = 0; i < n; i++) {
bool hasZero = false; // флаг, показывающий, есть ли нулевой элемент в строке
for(int j = 0; j < n; j++) {
if(matrix[i][j] == 0) { // если найден хотя бы один нулевой элемент, то выходим из цикла
hasZero = true;
break;
}
}
if(!hasZero) { // если в строке нет нулевых элементов, то добавляем номер строки в массив
nonZeroRows.push_back(i);
}
}
```
4. Наконец, нам нужно заменить на 0 все элементы, находящиеся на главной и побочной диагоналях матрицы. Для этого мы будем использовать два вложенных цикла, пройдясь по соответствующим элементам на диагоналях.
```c++
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(i == j || i == n - j - 1) { // если элемент находится на главной или побочной диагонали
matrix[i][j] = 0; // заменяем его на 0
}
}
}
```
Теперь у нас есть массивы evenRows и nonZeroRows, содержащие номера строк, удовлетворяющих требованиям вопроса. А матрица matrix изменена, так что элементы на главной и побочной диагоналях заменены на 0.
Надеюсь, это решение поможет вам понять, как найти номера строк, удовлетворяющих условиям задачи, и как заменить элементы на диагоналях на 0. Если у вас возникнут еще вопросы, не стесняйтесь задавать!