Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

Является ли тернарный оператор оператором сравнения? Подскажите пожалуста
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 ( (i < 0 || j < 0) || (i >= ROW || j >= COL) || (i == oi && j == oj)) continue; else if (arr)...

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
09.08.2014, 01:50     Является ли тернарный оператор оператором сравнения? #16
Etien, ну я больше не о вкусах говорил, а вот об этом:
Цитата Сообщение от Etien Посмотреть сообщение
Его необходимость сам внятно объяснить не могу и ни от кого внятного объяснения не слышал
На это мне захотелось привести внятный пример, реалистичный. Я его привел. Собственно спорить о вкусах желания не имел и даже не собирался это делать.
Etien
20 / 20 / 0
Регистрация: 26.01.2014
Сообщений: 176
09.08.2014, 01:59     Является ли тернарный оператор оператором сравнения? #17
Хорошо. Будем считать что Вы привели первый для меня пример уникальной и исключительной надобности этой конструкции. При случае воспользуюсь.
Ваш -Etien.
Mr.X
Эксперт С++
3048 / 1693 / 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 - это инструкция выбора.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
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;
Mr.X
Эксперт С++
3048 / 1693 / 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)
                            ?   ">"
                            :   "==";
Jewbacabra
Эксперт PHP
2261 / 1925 / 722
Регистрация: 24.04.2014
Сообщений: 5,599
09.08.2014, 10:22     Является ли тернарный оператор оператором сравнения? #21
Mr.X, а разве < и > не являются операторами сравнения?
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
09.08.2014, 11:21     Является ли тернарный оператор оператором сравнения? #22
Mr.X, как я понял, как раз < и > использовать нельзя.
Mr.X
Эксперт С++
3048 / 1693 / 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
}
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
09.08.2014, 13:20     Является ли тернарный оператор оператором сравнения? #24
Цитата Сообщение от Mr.X Посмотреть сообщение
Тогда вот так можно:
Только если считать, что abs реализована без сравнения с нулём Для целых чисел это точно возможно.
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
09.08.2014, 13:32     Является ли тернарный оператор оператором сравнения? #25
Цитата Сообщение от Nameless One Посмотреть сообщение
Только если считать, что abs реализована без сравнения с нулём Для целых чисел это точно возможно.
Ну, в задаче не велено об этом задумываться. Да и задачи-то, собственно, нет, сами читатели темы ее придумали.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
09.08.2014, 13:42     Является ли тернарный оператор оператором сравнения? #26
Цитата Сообщение от Mr.X Посмотреть сообщение
Да и задачи-то, собственно, нет, сами читатели темы ее придумали.
Всё таки не читатели, а писатели:
Цитата Сообщение от mmeexx Посмотреть сообщение
То есть при условии "не использовать операторы сравнения" сранить два числа, то можно использовать тернарный оператор?
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
09.08.2014, 14:44     Является ли тернарный оператор оператором сравнения? #27
Цитата Сообщение от Tulosba Посмотреть сообщение
Всё таки не читатели, а писатели:
Цитата Сообщение от mmeexx Посмотреть сообщение
То есть при условии "не использовать операторы сравнения" сранить два числа, то можно использовать тернарный оператор?
А, ну эту задачу моя программа решает.
Vtulhu
369 / 375 / 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");
}
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
10.08.2014, 18:00     Является ли тернарный оператор оператором сравнения? #29
Цитата Сообщение от Vtulhu Посмотреть сообщение
Это еще не ужос-ужос, ведь есть еще любители Оллмана и 1TBS, которые напишут восемь строк:
Не знаю, мне для ясности кода даже строчек не жалко (а что, они нынче подорожали?), а вот сишная расстановка скобок - это действительно ужас ужасный.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2014, 19:23     Является ли тернарный оператор оператором сравнения?
Еще ссылки по теме:

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

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

Тернарный оператор - найти ошибку в коде - C++
Не пойму почему выдает ошибку, вроде программы самые простые и ошибиться то негде: #include&lt;iostream&gt; using namespace std; int main()...

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

Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? - C++
Мне вот интересно , что скажут люди о Тернарном операторе, которые уже на С++ программируют немало. Насколько он удобен, много ли...


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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6443 / 3082 / 306
Регистрация: 04.12.2011
Сообщений: 8,487
Записей в блоге: 4
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, наверное может дать такой же код как и тренарная, в случаях когда они взаимозаменяемы. Тут не уверен. Нет опыта.
Yandex
Объявления
10.08.2014, 19:23     Является ли тернарный оператор оператором сравнения?
Ответ Создать тему
Опции темы

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