Дана целочисленная квадратная матрица порядка n. найти номера строк: а) все элементы которых четны; б) в которых нет ни одного нулевого элемента. приравнять к нулю все элементы на главной и побочной диагоналях. (с++)

falaleevakata4 falaleevakata4    1   14.09.2019 21:50    6

Ответы
Gamer2205395 Gamer2205395  07.10.2020 15:19
#include <iostream>
#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;
}
ПОКАЗАТЬ ОТВЕТЫ
LiamPeyn LiamPeyn  22.01.2024 14:04
Хорошо, я рад помочь! Давайте разберем этот вопрос шаг за шагом.

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. Если у вас возникнут еще вопросы, не стесняйтесь задавать!
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика