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

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

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

Author24 — интернет-сервис помощи студентам
Является ли тернарный оператор оператором сравнения? Подскажите пожалуста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2014, 22:37
Ответы с готовыми решениями:

Является ли данный оператор оператором Фредгольма?
У меня дан линейный оператор A:C->C Ax=\int_{-1}^{t}x(s)ds+\int_{1}^{t}x(s)ds Будет ли такой...

Тернарный оператор
Подскажите, пожалуйста, почему в Java выдается ошибка "cannot convert int to boolean", а в Си нет...

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

Тернарный оператор
pagesArray=; haveCover=(bitmapArr==undefined); var firstPage:Number=haveCover?1:0; //Что это?...

30
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
09.08.2014, 10:22 21
Author24 — интернет-сервис помощи студентам
Mr.X, а разве < и > не являются операторами сравнения?
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
09.08.2014, 11:21 22
Mr.X, как я понял, как раз < и > использовать нельзя.
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 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
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
09.08.2014, 13:20 24
Цитата Сообщение от Mr.X Посмотреть сообщение
Тогда вот так можно:
Только если считать, что abs реализована без сравнения с нулём Для целых чисел это точно возможно.
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
09.08.2014, 13:32 25
Цитата Сообщение от Nameless One Посмотреть сообщение
Только если считать, что abs реализована без сравнения с нулём Для целых чисел это точно возможно.
Ну, в задаче не велено об этом задумываться. Да и задачи-то, собственно, нет, сами читатели темы ее придумали.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
09.08.2014, 13:42 26
Цитата Сообщение от Mr.X Посмотреть сообщение
Да и задачи-то, собственно, нет, сами читатели темы ее придумали.
Всё таки не читатели, а писатели:
Цитата Сообщение от mmeexx Посмотреть сообщение
То есть при условии "не использовать операторы сравнения" сранить два числа, то можно использовать тернарный оператор?
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
09.08.2014, 14:44 27
Цитата Сообщение от Tulosba Посмотреть сообщение
Всё таки не читатели, а писатели:
Цитата Сообщение от mmeexx Посмотреть сообщение
То есть при условии "не использовать операторы сравнения" сранить два числа, то можно использовать тернарный оператор?
А, ну эту задачу моя программа решает.
1
430 / 384 / 200
Регистрация: 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
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
10.08.2014, 18:00 29
Цитата Сообщение от Vtulhu Посмотреть сообщение
Это еще не ужос-ужос, ведь есть еще любители Оллмана и 1TBS, которые напишут восемь строк:
Не знаю, мне для ясности кода даже строчек не жалко (а что, они нынче подорожали?), а вот сишная расстановка скобок - это действительно ужас ужасный.
0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
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
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
10.08.2014, 19:58 31
Цитата Сообщение от IGPIGP Посмотреть сообщение
выражение с if-else, наверное может дать такой же код как и тренарная
Может вполне. Но чем старее компилятор, тем меньше вероятность, что он сам догадается.

PS.

Не по теме:

По сообщениям в интернете создается впечатление, что "старый компилятор" - это не проблема. Казалось бы обновись, да и все. Но это иллюзия. За 25 с лишним лет было написано огромное количество кода. И не всякий менеджмент рискнет бюджетом на перевод огромных проектов на новые версии. Так что legacy пока диктует правила.

2
10.08.2014, 19:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.08.2014, 19:58
Помогаю со студенческими работами здесь

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

Тернарный оператор
Здравствуйте, я прочитал что структура тернарного оператора вот такая: логическое выражение ?...

Тернарный оператор
Перевести в тернарный оператор .. принцип понимаю ? : )но здесь нет ( if (n&gt;0) { printf...

тернарный оператор
понимаю, что вопрос совсем детский, но все таки не могу понять в чем проблема... пример: $a=1;...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru