Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 17.11.2022
Сообщений: 54

Не работает оператор сравнения, ошибка во вложениях

21.05.2023, 15:53. Показов 623. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include<iostream>
#include<locale.h>
using namespace std;
 
/* Для проверки программы разработать тесты, охватывающие все возможные случаи для стандартных типов и пользовательского типа complex
 
1.Найти в двумерном массиве номер первой строки, все элементы которой положительны.*/
 
 
class complex
{
    double im;
    double re;
public:
    double module() {
        return  sqrt(re * re + im * im);
    }
    double real()
    {
        return re;
    }
    double image()
    {
        return im;
    }
    complex()//конструктор,по умолчанию
    {
        re = 0;
        im = 0;
    }
    complex(double a, double b)//конструктор
    {
        re = a;
        im = b;
    }
    complex operator=(complex& A)
    {
        re = A.re;
        im = A.im;
        return *this;
    }
    bool operator==(const complex& A) //Оператор равенста
    {
        if (im == A.im && re == A.re) { return true; }
        else return false;
    }
    bool operator<(complex& A)//Оператор <
    {
        if (module() < A.module()) { return true; }
        else return false;
    }
    bool operator>(complex& A)//Оператор >
    {
        if (module() > A.module()) { return true; }
        else return false;
    }
    friend ostream& operator<<(ostream& output, complex& A);
    friend istream& operator>>(istream& in, complex& A);
};
ostream& operator<<(ostream& output, complex& A) //Оператор вывода
{
    output << A.re << "+" << A.im << "i";
    return output;
}
 
istream& operator>>(istream& in, complex& A)  //Оператор ввода
{
    in >> A.re >> A.im;
    return in;
}
 
void InputMass(int m, complex* A) {
    for (int i = 0; i < m; i++) {
        cin >> A[i];
    }
}
 
void PrintMass(int m, complex* A) {
 
    for (int i = 0; i < m; i++) {
        cout << A[i];
    }
}
 
template <typename T>
void Cmas(T** M, int m, int n)//создание двумерного массива
{
    for (int i = 0; i < m; i++)
    {
        M[i] = new T[n];
    }
}
 
template <typename T>
void input(T** A, int n, int m)//заполнение
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cin >> A[i][j];
        }
    }
}
 
template <typename T>
void print(T** M, int n, int m)//вывод 
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cout << M[i][j] << " ";
        }
        cout << endl;
    }
 
}
template <typename T>
void sroka(T** M, int m, int n) {
    int stroka = -1;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; i++) {
            if (M[i][j] > 0) {
                stroka = i;
                break;
            }
 
        }
    }
 
    if (stroka != -1) {
        cout << stroka + 1 << endl;
    }
    else { cout << " Нет таких строк "; }
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int m, n;
    cout << "Введите число строк" << endl;
    cin >> m;
    cout << "Введите число столбцов" << endl;
    cin >> n;
 
    complex** A = new complex * [m];
    Cmas(A, m, n);
    cout << "Complex" << endl;
    input(A, m, n);
    print(A, m, n);
    sroka(A, m, n);
 
    int** B = new int* [m];
    Cmas(B, m, n);
    cout << "Int" << endl;
    input(B, m, n);
    print(B, m, n);
    sroka(B, m, n);
}
Миниатюры
Не работает оператор сравнения, ошибка во вложениях  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.05.2023, 15:53
Ответы с готовыми решениями:

Не работает оператор сравнения
Всем доброго времени суток форумчане) В ООП С++ совсем новичок, так что строго не судите) проблема у меня появилась со вторым условием ...

Не работает оператор сравнения в Delphi
Надо найти минимальные элементы строк 2-мерного массива, но у меня не работает оператор сравнения &quot;&gt;&quot;, точнее он врет -...

Почему оператор сравнения не работает?
Здравствуйте, Простой вопрос, очень простой, но ввел в ступор Есть стринговая переменная, которая берется из текстового поля....

8
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.05.2023, 16:55
bool operator > (int) для complex добавь.
0
1 / 1 / 0
Регистрация: 17.11.2022
Сообщений: 54
21.05.2023, 16:59  [ТС]
Добавил, выдаёт ту же самую ошибку
C++
1
2
3
4
5
6
7
8
 bool operator>(int& A)
    {
        if (module() > A)
        {
            return true;
        }
        else return false;
    }
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
21.05.2023, 17:10
Цитата Сообщение от Castler Посмотреть сообщение
все элементы которой положительны
И что под этим надо подразумевать для комплексных чисел?
Т.к. сравнение на > идет по модулю (а модуль всегда >=0),
то под положительны будем подразумевать "не равны нулю":
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#include<iostream>
#include<clocale>
#include <cmath>
using namespace std;
 
class complex
{
    double im;
    double re;
public:
    double module() {
        return  sqrt(re * re + im * im);
    }
    double real()
    {
        return re;
    }
    double image()
    {
        return im;
    }
    complex()//конструктор,по умолчанию
    {
        re = 0;
        im = 0;
    }
    complex(double a, double b=0)//конструктор
    {
        re = a;
        im = b;
    }
    complex(const complex& A)
    {
        re = A.re;
        im = A.im;
    }
    complex operator=(const complex& A)
    {
        if(this!=&A)
        {
            re = A.re;
            im = A.im;
        }
        return *this;
    }
    bool operator==(complex A) //Оператор равенста
    {
        return im == A.im && re == A.re;
    }
    bool operator<(complex A)//Оператор <
    {
        return module() < A.module();
    }
    bool operator>(complex A)//Оператор >
    {
        return module() > A.module();
    }
    friend ostream& operator<<(ostream& output, complex& A);
    friend istream& operator>>(istream& in, complex& A);
};
ostream& operator<<(ostream& output, complex& A) //Оператор вывода
{
    output << A.re << "+" << A.im << "i";
    return output;
}
 
istream& operator>>(istream& in, complex& A)  //Оператор ввода
{
    in >> A.re >> A.im;
    return in;
}
 
void InputMass(int m, complex* A) 
{
    for (int i = 0; i < m; i++) {
        cin >> A[i];
    }
    cin.get();
}
 
void PrintMass(complex* A, int m) 
{
    for (int i = 0; i < m; i++) {
        cout << A[i];
    }
}
 
template <typename T>
void Cmas(T**& M, int m, int n)//создание двумерного массива
{
    M=new T*[m];
    for (int i = 0; i < m; i++)
    {
        M[i] = new T[n];
    }
}
 
template <typename T>
void input(T** A, int n, int m)//заполнение
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cin >> A[i][j];
        }
    }
    cin.get();
}
 
template <typename T>
void print(T** M, int n, int m)//вывод 
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cout << M[i][j] << " ";
        }
        cout << endl;
    }
 
}
template <typename T>
int sroka(T** M, int m, int n) {
    for (int i = 0; i < m; i++) {
        int j = 0;
        for (; j < n; j++) {
            if ( !(M[i][j]>T(0)) ) {  //  !!!!!!!!!!!
                break;
            }
        }
        if(j==n)
            return i;
    }
    return -1;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int m, n;
    cout << "Введите число строк" << endl;
    cin >> m;
    cout << "Введите число столбцов" << endl;
    cin >> n;
    cin.get();
 
    complex** A;
    Cmas(A, m, n);
    cout << "Complex" << endl;
    input(A, m, n);
    print(A, m, n);
    int L=sroka(A, m, n);
    if (L != -1)
        cout << L + 1 << endl;
    else
        cout << " Нет таких строк\n";
 
    int** B;
    Cmas(B, m, n);
    cout << "Int" << endl;
    input(B, m, n);
    print(B, m, n);
    L=sroka(B, m, n);
    if (L != -1)
        cout << L + 1 << endl;
    else
        cout << " Нет таких строк\n";
    cin.get();
    return 0;
}
p.s.

Цитата Сообщение от Castler Посмотреть сообщение
for (int j = 0; j < n; i++)
Внимательнее относитесь к строкам, которые исправляете после копирования.
Я на обнаружение этой ошибки потратил уйму времени!!!
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12943 / 6810 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
21.05.2023, 19:54
Цитата Сообщение от Castler Посмотреть сообщение
Не работает оператор сравнения, ошибка во вложениях
Нет. Код не компилируется из-за необъявленной функции std::sqrt, для которой нужен #include <cmath>

А оператор сравнения "не работает" потому, что его нет. Вы его не написали.

Цитата Сообщение от Castler Посмотреть сообщение
C++
1
2
3
4
5
6
    complex operator=(complex& A)
    {
        re = A.re;
        im = A.im;
        return *this;
    }
А вот зачем вы написали это - не ясно. Зачем вы написали руками оператор, который и так бы был сгенерирован компилятором? Почему вы тогда останльные функции, генерирумые компилятором, не написали руками?

Также, без правльного расставления const везде, где он нужен, ни о каком программировании на С++ речи быть не может. Код нужно перелопачивать по этому поводу от начала до конца.
0
1 / 1 / 0
Регистрация: 17.11.2022
Сообщений: 54
24.05.2023, 19:06  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#include<iostream>
#include<clocale>
#include <cmath>
using namespace std;
 
/* Для проверки программы разработать тесты, охватывающие все возможные случаи для стандартных типов и пользовательского типа complex
 
1.Найти в двумерном массиве номер первой строки, все элементы которой отрицательны.*/
 
 
class complex
{
    double im;
    double re;
public:
    double module() {
        return  sqrt(re * re + im * im);
    }
    double real()
    {
        return re;
    }
    double image()
    {
        return im;
    }
    complex()//конструктор,по умолчанию
    {
        re = 0;
        im = 0;
    }
    complex(double a, double b = 0)//конструктор
    {
        re = a;
        im = b;
    }
    complex operator=(const complex& A)
    {
        if (this != &A)
        {
            re = A.re;
            im = A.im;
        }
        return *this;
    }
    // Перегрузка оператора <= для сравнения комплексного числа с нулем
    bool operator<=(int value) {
        if ((re < 0) && (im < 0)) {
            return true;
        }
        else return false;
    }
    bool operator==(complex A) //Оператор равенста
    {
        return im == A.im && re == A.re;
    }
    bool operator<(complex A)//Оператор <
    {
        return module() < A.module();
    }
    bool operator>(complex A)//Оператор >
    {
        return module() > A.module();
    }
    friend ostream& operator<<(ostream& output, complex& A);
    friend istream& operator>>(istream& in, complex& A);
};
ostream& operator<<(ostream& output, complex& A) //Оператор вывода
{
    if (A.im > 0) {
        output << A.re << "+" << A.im << "i";
    }
    else {
        output << A.re << " " << A.im << "i";
    }
    return output;
}
 
istream& operator>>(istream& in, complex& A)  //Оператор ввода
{
    in >> A.re >> A.im;
    return in;
}
 
void InputMass(int m, complex* A)
{
    for (int i = 0; i < m; i++) {
        cin >> A[i];
    }
}
 
void PrintMass(complex* A, int m)
{
    for (int i = 0; i < m; i++) {
        cout << A[i];
    }
}
 
template <typename T>
void Cmas(T** M, int m, int n)//создание двумерного массива
{
    for (int i = 0; i < m; i++)
    {
        M[i] = new T[n];
    }
}
 
template <typename T>
void input(T** A, int n, int m)//заполнение
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cin >> A[i][j];
        }
    }
}
 
template <typename T>
void print(T** M, int n, int m)//вывод 
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cout << M[i][j] << " ";
        }
        cout << endl;
    }
 
}
template <typename T>
bool findNegativeRow(T* arr, int rows, int cols) {
    int call = -1;
    bool allNegative = true;
    for (int j = 0; j < cols; j++) {
        if (arr[j] <= 0) {
            allNegative = true;
            break;
 
        }
        else {
            allNegative = false;
        }
    }
    return allNegative;
 
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int m, n, x, y = 0, z = 0;
    cout << "Введите число строк" << endl;
    cin >> m;
    cout << "Введите число столбцов" << endl;
    cin >> n;
    cout << "Введите 0 - целочисленная матрица, 1 - комплексная матрица" << endl;
    cin >> x;
    if (x == 1) {
        complex** A = new complex * [m];
        Cmas(A, m, n);
        cout << "Complex" << endl;
        input(A, m, n);
        print(A, m, n);
        for (int i = 0; i < m; i++) {
 
            if (findNegativeRow(A, m, n) == true) {
                cout << "Найдена строка с отрицательными элементами. Номер строки: " << i + 1 << endl;
                break;
            }
            else y += 1;
 
        }
        if (y == m) {
            cout << "В массиве нет строки, все элементы которой отрицательны." << endl;
        }
    }
 
    if (x == 0) {
        int** B = new int* [m];
        Cmas(B, m, n);
        cout << "Int" << endl;
        input(B, m, n);
        print(B, m, n);
 
        for (int i = 0; i < m; i++) {
 
            if (findNegativeRow(B, m, n) == true) {
                cout << "Найдена строка с отрицательными элементами. Номер строки: " << i + 1 << endl;
                break;
            }
            else z += 1;
 
        }
        if (z == m) {
            cout << "В массиве нет строки, все элементы которой отрицательны." << endl;
        }
    }
}
Миниатюры
Не работает оператор сравнения, ошибка во вложениях  
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
24.05.2023, 19:30
Castler, Повторно спрашиваю,
1. что такое "Отрицательные элементы для комплексного числа"?
2.
Цитата Сообщение от zss Посмотреть сообщение
if ( !(M[i][j]>T(0)) ) { // !!!!!!!!!!!
Цитата Сообщение от Castler Посмотреть сообщение
if (arr[j] <= 0) {
По Вашему, я зря писал T(0) ?
0
1 / 1 / 0
Регистрация: 17.11.2022
Сообщений: 54
24.05.2023, 19:39  [ТС]
zss, поговорил с преподавателем, сошлись на том, что будем считать отрицательное комплексное число, как комплексное число с отрицательными мнимой и действительной частью

Добавлено через 7 минут
Цитата Сообщение от zss Посмотреть сообщение
if ( !(M[i][j]>T(0)) ) {  //  !!!!!!!!!!!
с этим не работает, я сумел сдать программу для положительных чисел, но на вижаке 2010 года, мне сказали сделать для отрицательных, на 2023 вижаке он не хочет сравнивать с нулём.
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
24.05.2023, 21:31
Цитата Сообщение от Castler Посмотреть сообщение
с этим не работает
Значит, Вы не исправили конструктор, так, как я написал

C++
1
2
3
4
// Перегрузка оператора <= 
    bool operator<=(complex b) {
        return re <= b.re && im <= b.im;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2023, 21:31
Помогаю со студенческими работами здесь

Неправильно работает оператор сравнения
Не правильно работает данный участок. Показывает echo 'lol' даже когда сообщение больше двух символов. Почему? if($mess&lt;=2){ echo...

Логический оператор ИЛИ и операторы сравнения - < работает, > - нет
Здравствуйте. Если указать, к примеру, -5 в окне ввода - код работает и выводится сообщение о числе за пределами диапазона, но если...

Оператор сравнения
Надо написать программу, которая переводит фунты в стоуны, используя класс. Класс содержит перегруженные операторы мат. операций (сложение,...

Оператор сравнения
Здравствуйте Пожалуйста, подскажите, как оператором сравнения сравнить только часть слова например - чтобы слово test было равно test1,...

Оператор сравнения
есть 6 окон: 1 окно имя студента 2 окно бал его 3 окно имя студента 4 окно бал его 5 окно имя студента 6 окно бал его как сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru