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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.82
diagon
Higher
1927 / 1193 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
#1

Тернарный оператор - C++

04.09.2011, 19:54. Просмотров 2633. Ответов 0
Метки нет (Все метки)

Неактуально
Доброго времени суток.
Есть такой кусок кода, взятый из решения одной задачи:
C++
1
2
3
4
5
6
7
8
if ( c % 2 == 0 ? p < n : p > n ) 
{
   ++a;
}
else
{
   a = 0;
}
С ним решение проходит все тесты.
Я попытался его немного переделать:
C++
1
2
3
4
5
( c % 2 == 0 ? p < n : p > n ) 
?
   ++a
:
   a = 0;
Выдает неправильный ответ на первом же тесте. Хотя у меня нормально работает.
Есть 2 варианта:
1) Я чего-то не понимаю, мой код неоднозначен и будет выполнятся по разному на разных компиляторах.
2)Баг компилятора(VC++ 7.1 на проверяющей системе, проверял на 10й студии - все работает).

Помогите разобраться...

Задача.

Оба кода.
Получает Accepted.
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
#include <fstream>
int p, n, x, i, a, b, c;
 
int main()
{
    std::fstream v("input.txt"), o("output.txt", std::ios::out);
    
    for (v >> p >> p ; v >> n; ++c)
    {
        
        if ( c % 2 == 0 ? p < n : p > n ) 
        {
            ++a;
        }
        else
        {
            a = 0;
        }
        
        if ( c % 2 != 0 ? p < n : p > n ) 
        {
            ++b;
        }
        else
        {
            b = 0;
        }
        
        x = std::max( std::max(a, b), x );
        
        p = n;
    }
    
    o << x + 1;
 
}
Получает WA1.
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
#include <fstream>
int p, n, x, i, a, b, c;
 
int main()
{
    std::fstream v("input.txt"), o("output.txt", std::ios::out);
    
    for (v >> p >> p ; v >> n; ++c)
    {
        
        ( c % 2 == 0 ? p < n : p > n ) 
        ?
            ++a
            :
            a = 0;
        
        if ( c % 2 != 0 ? p < n : p > n ) 
        {
            ++b;
        }
        else
        {
            b = 0;
        }
        
        x = std::max( std::max(a, b), x );
        
        p = n;
    }
    
    o << x + 1;
 
}


Блин. Извиняюсь, это баг acmp =\ Пересдаю код, получивший Accepted, и получаю WA1. И так у всех. Спасибо всем, кто хотел откликнуться.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2011, 19:54     Тернарный оператор
Посмотрите здесь:

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

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

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

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

Тернарный оператор и множество ошибок в коде - 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++
Является ли тернарный оператор оператором сравнения? Подскажите пожалуста

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

Используя тернарный оператор из трёх чисел найти среднее по значению - C++
Нужно найти с помощью оператора ?: mid(a,b,d). То есть из трёх чисел найти среднее по значению.

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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