Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 16.04.2019
Сообщений: 54
1

Присвоить переменной значение наибольшего из трех чисел, используя условную операцию

06.08.2019, 08:28. Просмотров 1050. Ответов 3

Не правильно присваивает максимальное значение переменной Max при всех отрицательных числах.
Например, при x1=-10,x2=-3,x3=-1
Max=-10, а должно быть Max=-1
C++
1
2
3
4
5
6
7
8
cout << "Введите значение переменной:" << endl << "x1=";
    cin >> x1;
    cout << "Введите значение переменной:" << endl << "x2=";
    cin >> x2;
    cout << "Введите значение переменной:" << endl << "x3=";
    cin >> x3;
x1 > x2 > x3 ? (Max = x1) : x2 > x1 > x3 ? (Max = x2) : (Max = x3);
    cout << "Max="<<Max<<endl;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.08.2019, 08:28
Ответы с готовыми решениями:

Не используя if присвоить переменной значение 0, если из трех чисел только одно положительное
Не могу разобраться как это правильно расписать Не используя оператор if, присвоить переменной k...

Переменной d присвоить наибольшее из трех чисел, а переменной s наименьшее из трех чисел.
Написать код программы с помощью оператора if в С++ Составить программу, которая переменной d...

Известно, что из четырех чисел a1, a2, a3, a4 одно отлично от трех других, равных между собой. Присвоить номер этого числа переменной n
12. Известно, что из четырех чисел a1, a2, a3, a4 одно отлично от трех других, равных между собой....

Вычислить наименьшее значение из двух вещественных чисел x и y, используя условную операцию
Легкие задачи, а мозг сломал себе весь...прошу помоч: Вычислить наименьшее значение из двух...

3
4536 / 3049 / 1277
Регистрация: 07.05.2019
Сообщений: 9,395
Записей в блоге: 1
06.08.2019, 09:00 2
Лучший ответ Сообщение было отмечено alayyy как решение

Решение

Цитата Сообщение от alayyy Посмотреть сообщение
Не правильно присваивает максимальное значение переменной Max при всех отрицательных числах.
C++
1
int max = x1 > x2? (x1 > x3? x1: x3): (x2 > x3? x2: x3);
1
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
06.08.2019, 11:06 3
Цитата Сообщение от alayyy Посмотреть сообщение
C++
1
x1 > x2 > x3
alayyy, в С++ в дискретной единице операции участвуют только один или два операнда. Твоя операция компилятором выполняется так: (x1 > x2) > x3, а значит:
1) (x1 > x2) => true или false.
2) Потом true или false конвертируются в 1 или 0 (приводится к типу x3), соответственно, чтобы сравниться с x3. Получается, 0 или 1 < x3.
3) Догадайся, что не так.
2
213 / 138 / 26
Регистрация: 11.01.2019
Сообщений: 576
06.08.2019, 11:27 4
В прошлом году, помнится, делал прокси-классы, чтоб можно было n-арные сравнения делать (типа x1 < x2 < x3 < ... < xn). Кому интересно, поглядите...

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
#include <iostream>
#include <utility>
 
template <class T> class CompResWrapper;
 
/* ---------------- helper macros ---------------- */
 
#define COMPARISON_OVERLOAD_DECLARATION(op) \
CompResWrapper<T> operator op (const MagicCompare<T> & right_value) const; \
CompResWrapper<T> operator op (T val) const;
 
#define COMPARISON_OVERLOAD_DEFINITION(op) \
template <class T> \
inline CompResWrapper<T> MagicCompare<T>::operator op (const MagicCompare<T> & right_value) const { \
    return std::make_pair(this->get_value() op right_value.get_value(), right_value); \
} \
template <class T> \
inline CompResWrapper<T> MagicCompare<T>::operator op (T val) const { \
    return std::make_pair(this->get_value() op val, MagicCompare(val)); \
} \
template <class T> \
inline CompResWrapper<T> operator op (T left_value, const MagicCompare<T> & right_value) { \
    return std::make_pair(left_value op right_value.get_value(), right_value); \
} \
template <class T> \
inline CompResWrapper<T> operator op (CompResWrapper<T>&& left_result, const MagicCompare<T> & right_value) { \
    return std::make_pair(left_result && left_result.get_value() op right_value.get_value(), right_value); \
} \
template <class T> \
inline CompResWrapper<T> operator op (CompResWrapper<T>&& left_result, T right_value) { \
    return std::make_pair(left_result && left_result.get_value() op right_value, MagicCompare<T>(right_value)); \
}
 
#define ACCUMULATING_ASSIGNMENT_OVERLOAD_DECLARATION(op) \
MagicCompare<T> & operator op (T val) { \
    m_value op val; \
    return *this; \
}
 
#define BINARY_ARITHMETIC_OVERLOAD_DECLARATION(op) \
MagicCompare<T> operator op (const MagicCompare<T> & right_value) const { \
    return this->get_value() op right_value.get_value(); \
} \
MagicCompare<T> operator op (T val) const { \
    return this->get_value() op val; \
}
 
#define BINARY_ARITHMETIC_OVERLOAD_DEFINITION(op) \
template <class T> \
inline MagicCompare<T> operator op (T val, const MagicCompare<T> & right_value) { \
    return val op right_value.get_value(); \
}
 
template <class T>
class MagicCompare {
public:
    // construction or implicit T -> MagicCompare
    MagicCompare(T init) : m_value{ init } { }
    // explicit MagicCompare -> T
    T get_value() const { return m_value; }
    // implicit MagicCompare -> T
    operator T() const { return this->get_value(); }
 
    /* ---------------- comparison operator overload declarations ---------------- */
 
    COMPARISON_OVERLOAD_DECLARATION(<)
    COMPARISON_OVERLOAD_DECLARATION(==)
    COMPARISON_OVERLOAD_DECLARATION(>)
    COMPARISON_OVERLOAD_DECLARATION(!=)
    COMPARISON_OVERLOAD_DECLARATION(<=)
    COMPARISON_OVERLOAD_DECLARATION(>=)
 
    /* ---------------- accumulating arithmetic operator overloads ---------------- */
 
    ACCUMULATING_ASSIGNMENT_OVERLOAD_DECLARATION(+=)
    ACCUMULATING_ASSIGNMENT_OVERLOAD_DECLARATION(-=)
    ACCUMULATING_ASSIGNMENT_OVERLOAD_DECLARATION(*=)
    ACCUMULATING_ASSIGNMENT_OVERLOAD_DECLARATION(/=)
    ACCUMULATING_ASSIGNMENT_OVERLOAD_DECLARATION(%=)
    // etc...
 
    /* ---------------- unary arithmetic operator overloads ---------------- */
 
    // ++MagicCompare
    MagicCompare<T> & operator ++ () {
        return this->operator +=(1);
    }
    // MagicCompare++
    MagicCompare<T> operator ++ (int) {
        MagicCompare<T> prev(this->get_value());
        ++m_value;
        return prev;
    }
    // --MagicCompare
    MagicCompare<T> & operator -- () {
        return this->operator -=(1);
    }
    // MagicCompare--
    MagicCompare<T> operator -- (int) {
        MagicCompare<T> prev(this->get_value());
        --m_value;
        return prev;
    }
 
    /* ---------------- binary arithmetic operator overloads ---------------- */
 
    BINARY_ARITHMETIC_OVERLOAD_DECLARATION(+)
    BINARY_ARITHMETIC_OVERLOAD_DECLARATION(-)
    BINARY_ARITHMETIC_OVERLOAD_DECLARATION(*)
    BINARY_ARITHMETIC_OVERLOAD_DECLARATION(/)
    BINARY_ARITHMETIC_OVERLOAD_DECLARATION(%)
    // etc...
 
private:
    T m_value;
};
 
// previous result wrapper
template <class T>
class CompResWrapper {
public:
    CompResWrapper(std::pair<bool, MagicCompare<T>>&& pair) : m_pair{ std::move(pair) } { }
    MagicCompare<T> get_value() const { return m_pair.second; }
    // implicit comparison result -> bool
    operator bool() { return m_pair.first; }
private:
    std::pair<bool, MagicCompare<T>> m_pair;
};
 
/* ---------------- comparison operator overload definitions ---------------- */
 
COMPARISON_OVERLOAD_DEFINITION(<)
 
COMPARISON_OVERLOAD_DEFINITION(==)
 
COMPARISON_OVERLOAD_DEFINITION(>)
 
COMPARISON_OVERLOAD_DEFINITION(!=)
 
COMPARISON_OVERLOAD_DEFINITION(<=)
 
COMPARISON_OVERLOAD_DEFINITION(>=)
 
/* ---------------- arithmetic operator overloads ---------------- */
 
BINARY_ARITHMETIC_OVERLOAD_DEFINITION(+)
BINARY_ARITHMETIC_OVERLOAD_DEFINITION(-)
BINARY_ARITHMETIC_OVERLOAD_DEFINITION(*)
BINARY_ARITHMETIC_OVERLOAD_DEFINITION(/)
BINARY_ARITHMETIC_OVERLOAD_DEFINITION(%)
// etc...
 
int main() {
    using Integer = MagicCompare<int>;
    Integer i = 10, j = 2, k = 3;
    bool result;
    result = i < j;
    result = 5 < k;
    result = k < 5;
    result = 1 < j < k; 
    result = i < 2 < k;
    result = i < j < 5;
    result = i < j*j - 2 < k;
    result = 1 < 3 * j < k;
    result = i < 3*3 < j*j < 5 < k;
    result = i < j < 2 && j < k < 5;
    result = !(j < i);
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.08.2019, 11:27

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Переменной q присвоить значение наибольшего из элементов матрицы
переменной q присвой значение наибольшего из элементов матрицы А(5*5),расположенных на главной...

Переменной z присвоить значение наибольшего из элементов матрицы
Добрый вечер. Помогите кто-нибудь с этим заданием: нужно переменной z присвоить значение...

Найти наибольшее из трех чисел, используя процедуру нахождения наибольшего из 2 чисел.
10. Найти наибольшее из трех чисел, используя процедуру нахождения наибольшего из 2 чисел.

Присвоить значение переменной, используя встроенный ассемблер
2. Даны две переменных а (тип integer) и b (тип byte). Присвоить b – значение а. Вывести на экран....


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.