1

Тема: Використання вкладених циклів в задачах обробки матриць

Добрий день, виникла проблема з завданням - "Дана дійсна матриця розмірності N x M. Знайти номери рядків всі елементи яких - нулі.". Не можу написати правильний код для знаходження рядків всі елементи яких нулі. Допоможіть.

#include <iostream>
using namespace std;
int main()
{
    setlocale(0, "");
    int Row,Col;
    do {
    cout << "Введіть кількість рядків : ";
    cin >> Row;
    if (Row < 2)
            cout << "Введіть кількість більше ніж '1'\n";
    } while (Row < 2);  
    do {
    cout << "Введіть кількість стовпців : ";
    cin >> Col;
    if(Col<2)
            cout << "Введіть кількість більше ніж '1'\n ";
    } while (Col < 2);
    int** matrix = new int* [Row];
    for (int i = 0; i < Row; i++)
        matrix[i] = new int[Col];

    cout << "\n Заповніть матрицю: \n";
    for (int i = 0; i < Row; i++) {
        for (int j = 0; j < Col; j++)
            cin >> matrix[i][j]; 
    }
    system("cls");
    cout << endl;
    //Вивід матриці на екран
    for (int i = 0; i < Row; i++) {
        for (int j = 0; j < Col; j++)
            cout << matrix[i][j] << "\t";
        cout << endl;
    }
//Пошук номерів рядків всі елементи яких - нулі.
    int x = 0;  //Номер поточного стовпця
    bool flag = 0; //перевірка на умову
    int counter = 0;
    cout << "Номери рядків все елементи яких - нулі.: \n";
    while (x < Row) {
        for (int i = 0; i < Row-1; i++) {
            if (matrix[i][x] == 0)
                counter++; 
        }
        if (counter == Row-1-1) {
            flag = 1;
            cout<<x+1<<endl; 
        }
        x++; 
        counter = 0;
    }
    if(flag==0)
        cout << "Рядки всі елементи яких - нулі відсутні..\n";
    //Очищення виділеної пам'яті для масиву
    for (int i = 0; i < Row; i++)
        delete matrix[i];
    delete[] matrix;
    cout << endl;
    system("pause");
    return 0;
}

2

Re: Використання вкладених циклів в задачах обробки матриць

У вас заплутаний код, перевіряючи, чи рядок містить лише 0 чомусь у зовнішньому циклі перебираєте номер стовпця (int x = 0;  //Номер поточного стовпця).

Не бійтеся використовувати функцію на кожну дрібницю — так легше не заплутатися (особливо новачкові) при написанні і так легше супроводжувати код.

for (int r = 0; r < Row; ++r) {
    if (isAllZero(matrix[r], Col)) // довжина рядка то кількість стовпців
        cout << r+1 << endl;
}

А тепер пишіть функцію

bool isAllZero(const int *data, int len);
Подякували: XziVoron1

3 Востаннє редагувалося ReAl (24.12.2019 14:48:07)

Re: Використання вкладених циклів в задачах обробки матриць

p.s. У вас може бути завдання використати вкладені цикли. З окремою функцією вони будуть вкладені опосередковано, через цю функцію і це не пройде :D

Тоді можу порадити досягти робочого результату, після чого вручну вставити тіло функції на її місце для того, щоб задовольнити вимоги.
Пізніше навчитеся уявляти таку «невиклкиану фкнкцію» і писати вкладені цикли по місцю.

Подякували: XziVoron1