Задать вопрос
@bohdan-merk

Как решить задачу на c++?

Даны натуральное число n, действительная квадратная матрица порядка n. Построить последовательность b1, …, bn, из нулей и единиц, в которой bi=1 тогда и только тогда когда элементы i-й строки матрицы образуют возрастающую или убывающую последовательность.

То есть если русским языком, то дана определенная матрица, и если строка образует возрастающую или убывающую, то ставим 1, если же не возрастающая и не убывающая (например: 2, 5, 1), то ставим 0. Много раз пытался, но всегда программа на последовательность которая не убывающая и не возрастающая выдает 1, а должна 0.

Вот что у меня сейчас есть:

#include <iostream>
using namespace std;

int main()
{
    int ROWS;
    int COLS;
    bool k;
    float arr[100][100];
    while (ROWS < 2) {
    cout << "Enter the dimension of the matrix" << endl;
    cin >> ROWS;
    }
    COLS = ROWS;
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
           cin >> arr[i][j];
        }
    }
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            cout << arr[i][j] << "\t";
        }
        cout << endl;
    }
    cout << "Order of numbers: ";
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            if ((arr [i][j - 1] < arr [i][j]) || (arr [i][j - 1] > arr [i][j])){
                k = true;
            }
            else if () {
                k = false;
            }
        }
        cout << k;
    }
    return 0;
}


Подскажите как правильно сделать это задание. Заранее спасибо!
  • Вопрос задан
  • 324 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Ошибка 1. Использование переменной ROWS без инициализации.
while (ROWS < 2) {

Ошибка 2. Обращение к массиву с индексом -1 при j == 0.
if ((arr [i][j - 1] < arr [i][j]) || (arr [i][j - 1] > arr [i][j])){

Ошибка 3. Вместо накопления результата, вы на каждом цикле переписываете значение k. В результате получаете только результат сравнения из последней итерации цикла.

Ошибка 4. Вы в цикле просто сравниваете между собой два соседних числа (ваше условие - просто проверка на неравенство), а вам надо определить, возрастает или убывает вся последовательность чисел.
Ответ написан
Комментировать
RiseOfDeath
@RiseOfDeath
Диванный эксперт.
else if () {
    k = false;
    }

Я не уверен как именно работает If с пустым условием. Есть у меня подозрение что никак и, соответственно, k не присваивается ничего и она остается с изначальным значением (т.е. неинициализированной и имеет какое угодно значение), а все что не ноль это true. (рекомендую научиться пользоваться отладчиком и самому пошагово посомтреть что на самом деле и почему делает ваша программа)

Почему бы не написать просто
else 
{
    k = false;
}


И в качестве оффтопа - пожалуста не пишите операторные скобки в плюсах как в яве, это не ява.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы