Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
mmeexx
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 183
#1

Является ли тернарный оператор оператором сравнения? - C++

08.08.2014, 22:37. Просмотров 1338. Ответов 30
Метки нет (Все метки)

Является ли тернарный оператор оператором сравнения? Подскажите пожалуста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2014, 22:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Является ли тернарный оператор оператором сравнения? (C++):

Тернарный оператор vs if/else - C++
Зачем? Ведь, так элегантнее. Начало http://www.cyberforum.ru/cpp-beginners/thread718192.html

Тернарный оператор - C++
Добрый день, как доказать, что нету тенарного оператора ? Я как понимаю, есть только тенарная операция, которая представляет...

Альтернатива if (.) {.} (тернарный оператор) - C++
блин запамятовал как это делается пишут вместо стандартной формы что то типа y < x : x = m напомните плиз как это называется, какие там...

Засунуть в тернарный оператор - C++
Помогите засунуть выражение if ( (i < 0 || j < 0) || (i >= ROW || j >= COL) || (i == oi && j == oj)) continue; else if (arr)...

Шахматы(заменить тернарный оператор) на if else - C++
#include <iostream> #include <Windows.h> using namespace std; void main() { int h, w, i, j; cout << "Введите...

Тернарный оператор: возврат значения - C++
Приветствую. При компиляции ниже приведенного кода bool MyFunc() { bool flag = false; // .... некоторые действия // .......

30
DrOffset
7517 / 4513 / 1025
Регистрация: 30.01.2014
Сообщений: 7,362
09.08.2014, 01:50 #16
Etien, ну я больше не о вкусах говорил, а вот об этом:
Цитата Сообщение от Etien Посмотреть сообщение
Его необходимость сам внятно объяснить не могу и ни от кого внятного объяснения не слышал
На это мне захотелось привести внятный пример, реалистичный. Я его привел. Собственно спорить о вкусах желания не имел и даже не собирался это делать.
0
Etien
21 / 21 / 0
Регистрация: 26.01.2014
Сообщений: 180
09.08.2014, 01:59 #17
Хорошо. Будем считать что Вы привели первый для меня пример уникальной и исключительной надобности этой конструкции. При случае воспользуюсь.
Ваш -Etien.
0
Mr.X
Эксперт С++
3060 / 1705 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
09.08.2014, 04:23 #18
Цитата Сообщение от mmeexx Посмотреть сообщение
То есть при условии "не использовать операторы сравнения" сранить два числа, то можно использовать тернарный оператор?
А почему нет-то?
C++
1
bool  a_less_b = a < b ? true : false;
Добавлено через 4 минуты
Цитата Сообщение от orange_fox Посмотреть сообщение
Скорее - краткая форма условного оператора
Скорее нет, чем да. Не всякий условный оператор можно записать через тернарный, и не всякий тернарный через условный.

Добавлено через 21 минуту
Хотя официальная терминология несколько другая: условный оператор - это как раз тернарный, а if-else - это инструкция выбора.
0
Nameless One
Эксперт С++
5783 / 3432 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
09.08.2014, 06:37 #19
Цитата Сообщение от Mr.X Посмотреть сообщение
А почему нет-то?
У тебя там используется оператор <, так что нельзя.

C++
1
2
3
4
5
6
7
    int diff = a - b;
 
    const char *comp =
        diff & 1 << sizeof diff - 1 ? "lesser than" :
        !(diff | 0) ? "equal to" : "greater than";
 
    std::cout << "a is " << comp << " b" << std::endl;
0
Mr.X
Эксперт С++
3060 / 1705 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
09.08.2014, 10:12 #20
Цитата Сообщение от Nameless One Посмотреть сообщение
C++
1
2
3
4
5
6
7
int diff = a - b;
 
const char *comp =
    diff & 1 << sizeof diff - 1 ? "lesser than" :
    !(diff | 0) ? "equal to" : "greater than";
 
std::cout << "a is " << comp << " b" << std::endl;
Не, тут не только тернарный используется. Вот так нужно:
C++
1
2
3
4
5
std::cout   <<  (a < b)
                    ?   "<"
                    :   (a > b)
                            ?   ">"
                            :   "==";
0
Jewbacabra
Эксперт PHP
3021 / 2608 / 970
Регистрация: 24.04.2014
Сообщений: 7,976
09.08.2014, 10:22 #21
Mr.X, а разве < и > не являются операторами сравнения?
0
Nameless One
Эксперт С++
5783 / 3432 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
09.08.2014, 11:21 #22
Mr.X, как я понял, как раз < и > использовать нельзя.
0
Mr.X
Эксперт С++
3060 / 1705 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
09.08.2014, 11:58 #23
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Mr.X, а разве < и > не являются операторами сравнения?
Цитата Сообщение от Nameless One Посмотреть сообщение
Mr.X, как я понял, как раз < и > использовать нельзя.
А, пардон, не уловил всей тонкости. Тогда вот так можно:
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
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
typedef double     T_type;
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    for(;;)
    {
        T_type  a   =   0;
        std::cout   <<  "a = ";
        std::cin    >>  a;
 
        T_type  b   =   0;
        std::cout   <<  "b = ";
        std::cin    >>  b;
 
        switch  (
                    int (
                            a - b
                                ?   ( a - b ) / abs( a - b )
                                :   0
                        )
                )
        {
            case    1:
                std::cout   <<  ">";
                break;
 
            case    -1:
                std::cout   <<  "<";
                break;
 
            default:
                std::cout   <<  "==";
        }
        std::cout   <<  std::endl
                    <<  std::endl
                    <<  std::endl;
    }//for
}
0
Nameless One
Эксперт С++
5783 / 3432 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
09.08.2014, 13:20 #24
Цитата Сообщение от Mr.X Посмотреть сообщение
Тогда вот так можно:
Только если считать, что abs реализована без сравнения с нулём Для целых чисел это точно возможно.
0
Mr.X
Эксперт С++
3060 / 1705 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
09.08.2014, 13:32 #25
Цитата Сообщение от Nameless One Посмотреть сообщение
Только если считать, что abs реализована без сравнения с нулём Для целых чисел это точно возможно.
Ну, в задаче не велено об этом задумываться. Да и задачи-то, собственно, нет, сами читатели темы ее придумали.
0
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
09.08.2014, 13:42 #26
Цитата Сообщение от Mr.X Посмотреть сообщение
Да и задачи-то, собственно, нет, сами читатели темы ее придумали.
Всё таки не читатели, а писатели:
Цитата Сообщение от mmeexx Посмотреть сообщение
То есть при условии "не использовать операторы сравнения" сранить два числа, то можно использовать тернарный оператор?
0
Mr.X
Эксперт С++
3060 / 1705 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
09.08.2014, 14:44 #27
Цитата Сообщение от Tulosba Посмотреть сообщение
Всё таки не читатели, а писатели:
Цитата Сообщение от mmeexx Посмотреть сообщение
То есть при условии "не использовать операторы сравнения" сранить два числа, то можно использовать тернарный оператор?
А, ну эту задачу моя программа решает.
1
Vtulhu
371 / 377 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
10.08.2014, 14:25 #28
Тернарный оператор удобен, когда надо сделать что-то, грубо говоря, в одной строчке. Например, присвоить константной переменной значения, зависящее от некоего условия. Или для выбора параметра функции.

C
1
2
const double min_ab = ( a < b )? a : b;
puts(( a < b )? "lower" : "higher");
Вот как это все будет выглядеть без тернарного оператора:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
double min_ab = a;                  // обратите внимание, const теперь невозможен
if( b < min_ab ) { min_ab = b; } // я считаю, что ставить консты надо везде, где можно
 
// то есть я действую не по принципу "пиши const, если это должна быть константа",
// а по принципу "убирай const только если уверен, это должна быть переменная"
 
if( a < b ) {
    puts("lower");
} else {
    puts("higher");
}
 
Это еще не ужос-ужос, ведь есть еще любители Оллмана и 1TBS, которые напишут восемь строк:
 
if( a < b )
{
    puts("lower");
}
else
{
    puts("higher");
}
1
Mr.X
Эксперт С++
3060 / 1705 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
10.08.2014, 18:00 #29
Цитата Сообщение от Vtulhu Посмотреть сообщение
Это еще не ужос-ужос, ведь есть еще любители Оллмана и 1TBS, которые напишут восемь строк:
Не знаю, мне для ясности кода даже строчек не жалко (а что, они нынче подорожали?), а вот сишная расстановка скобок - это действительно ужас ужасный.
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6967 / 3258 / 327
Регистрация: 04.12.2011
Сообщений: 9,020
Записей в блоге: 5
10.08.2014, 19:23 #30
Цитата Сообщение от Vtulhu Посмотреть сообщение
Тернарный оператор удобен, когда надо сделать что-то, грубо говоря, в одной строчке.
Тренарныйная опрератороперация в отличие от пары условных операторов не ветвит поток управления, а возвращает значение. И делает она это в фрейме стека, где применена. Это должно быть быстрее. Кроме того, как уже говорили, возвращаемое значение может инициализировать ссылку. Константы инициализированные таким способом, не являются константным выражением в применении, но тоже возможны как вариант.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main()
{
int a, b ;
cin >> a;
cin >> b;
const int n = a>b? b : a ;
//n++; ведёт себя как константа, то есть на стадии компиляции не позволяет себя изменить
//int c[n]; но всё же это не полноценная константа (без этой строки компилируется и понятно почему))
 
cout<<endl;
cin.get();
return 0;
}
В принципе с учётом возможной оптимизации, выражение с if-else, наверное может дать такой же код как и тренарная, в случаях когда они взаимозаменяемы. Тут не уверен. Нет опыта.
0
10.08.2014, 19:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2014, 19:23
Привет! Вот еще темы с ответами:

Как работает тернарный оператор - C++
Здравствуйте. Объясните, пожалуйста, что значит эта строка color = (color == 'W') ? 'B' : 'W';

Тернарный оператор и операторы безусловного перехода - C++
Здравствуйте, может кто-нибудь объяснить, почему не компилируется оператор ?, если в одной из последующих частей стоит break, return,...

Простая задачка про тернарный оператор - C++
Переписал с учебника простую задачку, однако на 10 и 12 строке показывает ошибки. Что тут не так? #include&lt;iostream&gt; #include&lt;cmath&gt; ...

Тернарный оператор и множество ошибок в коде - C++
Вот задание: И простой код: #include&lt;iostream&gt; using namespace std; int main() { int n,k; cin&gt;&gt;n; ...


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

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

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