Возможно баян. Но всем похуй.
Итак:
int i = 5;
i = ++i + ++i;
Кто решил - тот погромист.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
СОЦИОН. » Юный техник » Задача на инкремент
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Возможно баян. Но всем похуй.
Итак:
int i = 5;
i = ++i + ++i;
Кто решил - тот погромист.
16?
16?
*О*_*О*
На чём считал???
Нет.
Думай дальше.
Тогда 12. *,...,*
п.с. Считал в уме.
Там 16 вообще быть не может.
12 - вероятно, но у меня другие ответы.
Ой... плюсики...
Продвинутые считают задачу так:
int i = 5;
i = --i + --i;
P.S.: Закомпиливаюсь на : Borland C++, MVC++, C#.
Там 16 вообще быть не может.
12 - вероятно, но у меня другие ответы.
Про 16 я затупил немного.
У джаве дало 13.
Верёвки правильно, сцука, решил. Но это ответ на логику.
На компиляторах Борланда и Вижуал ответ - 14. Почему - хуй проссышь, видимо, приоритет конъюнкции стоит выше, хотя инкремент должен обсчитываться первым де-факто.
Глючный лисповский компил выдал 12.
У джаве дало 13.
Теперь попробуй, это веселее.
int i = 5;
i = i++ + ++i;
увы без пробелов не компилится, ява увы просто не дает совсем уж извратить код.
Теперь попробуй, это веселее.
int i = 5;
i = i++ + ++i;
Решал как
int i = 5;
i = ++i + i++ + ++i + i++ + ++i + i++;
Кто-нибудь сможет решить?
Скорее всего это следствие такого представления:
++i;
++i;
i = i + i;
Если ты имеешь ввиду
int i=5;
i = ++i;
i = ++i;
i = i+i;
То да, последовательный инкремент получается.
BС++/MVC++ первым инкремент обсчитывает.
Стандарт языка С++ ISO/IEC 14882 от 1998г. вводил понятие sequence point [1.9:7,11,16], между которыми (скалярная) переменная может быть изменена только один раз [5:4], и там как раз приведены примеры, что i=++i + 1; // the behavior is unspecified. Выражение ++i никоим образом sequence point не вводит (если только это не вызов функции "перегруженный operator++" для пользовательских типов, т.е. не в этом случае).
В редакции стандарта от 2003г. это unspecified behavior стало undefined, т.е. компилятор теперь имеет полное право вписать в переменную значение 42, вставить в программу код, форматирующий веник или взрывающий монитор.
С этого момента, собственно говоря, вопрос перестает быть техническим и становится "коммуникационным".
Так как выражение вида i = ++i + ++i; с точки зрения языка невалидно, нельзя однозначно судить о том, что же хотел сказать автор, написав это злополучное выражение. (А вы попробуйте подойти к прохожему на улице и сказать "абырвалг!". Что за этим последует, можно только гадать. Вполне возможно, что вам "отформатируют веник".)
srez пишет:Теперь попробуй, это веселее.
int i = 5;
i = i++ + ++i;Решал как
int i = 5;
i = ++i + i++ + ++i + i++ + ++i + i++;Кто-нибудь сможет решить?
Фигня в том, что ява по стандарту не регулирует порядок в котором складывается несколько аргументов. А самое смешное, что даже скобки при этом игнорируются. То есть, результат может менятся в зависимости от компилятора. На практике, стандартный ява компилятор такое собирает справа налево.
11 + 9 + 9 + 7 + 7 + 5 = 48
Ну наизусть, конечно, не знаю, но кое-какими доками располагаю.
Вообще, задачка былинно-баянная, решал ещё в школе, там же о сиквенс поинтах и узнал.
Апрель пишет:int i = 5;
i = ++i + i++ + ++i + i++ + ++i + i++;Кто-нибудь сможет решить?
Фигня в том, что ява по стандарту не регулирует порядок в котором складывается несколько аргументов. А самое смешное, что даже скобки при этом игнорируются. То есть, результат может менятся в зависимости от компилятора. На практике, стандартный ява компилятор такое собирает справа налево.
11 + 9 + 9 + 7 + 7 + 5 = 48
В решении BC++ ответ 51. Скобки, вроде, тоже игнорируются.
Копец, апрель знает стандарт С++ наизусть. Жесть. Странно, почему бы компилеру не выдать ошибку типа "неоднозначность"?
Неоднозначности нет, просто разные компиляторы по-разному воспринимают задачу.
Теперь попробуй, это веселее.
int i = 5;
i = i++ + ++i;
12, и это логично.
увы без пробелов не компилится, ява увы просто не дает совсем уж извратить код.
И это хорошо.
Апрель пишет:Неоднозначности нет, просто разные компиляторы по-разному воспринимают задачу.
Когда каждый конкретный компилятор как-то эту задачу воспринимает, он может себе давать отчёт, что осуществил это восприятие не в соответствии со стандартом. Этот факт и должен заставлять его писать "неоднозначность".
Не совсем. Компиляторы BC++/MVC++ выдают ответ 14. J++/C# выдают 13. Стандарт разный.
Чтобы отправить ответ, вы должны войти или зарегистрироваться
СОЦИОН. » Юный техник » Задача на инкремент
На основе PunBB, при поддержке Informer Technologies, Inc.
Currently used extensions: favorite_topic, pun_repository. Copyright © 2008 PunBB
Сгенерировано за 0.025 секунд(ы), выполнено 54 запросов