Вопросы и ответы | 

Кирилл Букаев
Вопрос по операции вставки << в C++. Код:int x=5;cout << x << x++; Почему получается 6_5?
Что справа начинается интерпретирование? А в префиксной форме получается 6_6..
Теги:
.net, , actionscript, ada, ado.net ...еще >>
Вадим Великодный
Вадим Великодный | Репутация: 106 (Кандидат) 24 мая 2009 в 04:22

speianaurel
Я тоже только что проверил. На новом линуксовском g++ для первого примера получилось «656», для второго — «7675». Впрочем, второй пример ещё более некорректен, там всё зависит от компилятора, т.к. порядок вычисления операдов в общем случае не оговаривается стандартом.
Не знаю как у вас, но мой компидятор при компиляции выдает (совершенно справедливое) предупреждение о возможном неопределенном поведении.
Для подтверждения своего объяснения сошлюсь на раздел 6.2.2 специального издания «Языка программирования C++» Страуструпа. Там написано, что порядок вычисления аргументов операции неопределен за исключением операций «,», «&&» и «||».
Там же, в разделе 6.2 приведен список операций с приоритетами, в котором можно видеть, что операция << иметт более низкий приоритет, чем ++. Очевидно, что в выражении (а это именно выражение)
cout<<x<<x++<<x;
нет операций кроме << и ++. Так как ++ имеет больший приоритет, она выполняется первой, в итоге получаем что-то вроде
cout<<6<<5<<6;
А это уже выводится как обычно.
Кстати, Страуструп пишет, что старым компиляторам не стоит особо доверять из-за мелких несовместимостей и несоответствий стандарту. Проверьте, если есть возможность, еще каким-нибудь компилятором.
Чтобы окончательно развеят сомнения, предлагаю найти в каталоге include из комплекта вашего компилятора файл ostream.h и убедиться, что никакого чтения справа налево нет. Есть перегруженная операция <<, которая если слева находится объект типа ostream, а справа — объект известного типа, кидает правый операнд в поток.
P.S. Рекомендую почитать о Sequence points. Например это: http://alenacpp.blogspot.com/2005/11/sequence-points.html

Аурел Спеян
Аурел Спеян | Репутация: 109 (Кандидат) 24 мая 2009 в 14:22

Попробовал в Dev C++
код int x=5;cout<<x<<x++;выводит 55.
а если набрать кодint x=5;cout<<x<<x++<<x++<<x++;выведит 5567
тоесть выходит что значения вычисляются слева на право по порядку, не смотря на более высокий приоритет инкремента.
Из всех этох эксперементов видно что что различные компиляторы по разному воспринимают одну и туже ситуацию.
Спасибо Вам большое за ссылку.Было интересно почитать.

Федор Бурдун
Есть ли возможность в java полноценной работы с терминалом?
Вывод в разных местах и разным цветом, методы узнать его разрешение?
Теги:
.net, , actionscript, ada, ado.net ...еще >>
Владимир Жилковский
Владимир Жилковский | Репутация: 410 (Кандидат) 4 мая 2009 в 18:30

System.out.println("Hello World"); выводит на терминал
Если хочешь еще и запускать комманды, то используй exec()
Например: exec("pwd");

Виталий Крылов
Виталий Крылов | Репутация: 1063 (Эксперт) 4 мая 2009 в 18:42

1) Да.
2) Да.
Почитать можно, например, здесь:
1) http://www.osmp.ru/img/doc/java_instruction.doc
2) http://www.osp.ru/cw/2000/29/6167/

Виктор Васильев
Теги:
.net, , actionscript, ada, ado.net ...еще >>
Dmytro Itkin
Dmytro Itkin | Репутация: 199 (Кандидат) 14 апреля 2009 в 19:35

Посмотри вот здесь http://www.mosautotrade.ru/page151.html
Посмотри еще здесь (тут много чип-тюнинга) http://www.chipsoft.ru/
Попробуй програмку ChipExplorer 1.6

Виталий Крылов
Виталий Крылов | Репутация: 1063 (Эксперт) 15 апреля 2009 в 08:55

Assembler.
Ссылка на форум: http://forum.maxi-tuning.ru/m_774020/mpage_8/printable.htm.
На форуме приведен более детальный ответ. Вот выдержка:
"...простых прошивок можно научиться, если изучал язык программирования асемблер, иначе будет сложнее! Ну и на последок про стоимость: он лайн ЭБУ самый стремный стоил от 20 рублей..."

Тихон Тагунов
Теги:
.net, , actionscript, ada, ado.net ...еще >>
Любовь Юдаева
Любовь Юдаева | Репутация: 117 (Кандидат) 11 апреля 2009 в 17:01

Никогда. А зачем? Это разные операторы.

Лариса Мельникова
Лариса Мельникова | Репутация: 319 (Кандидат) 11 апреля 2009 в 20:08

else используется в случае, если нужно выполнить один из двух варианта действий в зависимости от какого-либо параметра.
if параметр=значение [если условие верно]
(действие 1)
else [если нет]
(действие 2);
if not применяется в случае, если нужно выполнить действие при любом значении какого-либо праметра, отличного от указанного значения
if not параметр=значение [если условие не верно]
(действие 1).
Если это не помогло, опишите ситуацию применения - поможем:)

Андрей Ким
Теги:
.net, , actionscript, ada, ado.net ...еще >>
Oxana Naumenko
Oxana Naumenko | Репутация: 113 (Кандидат) 1 апреля 2009 в 17:28

А можно поподробней?
Если Вы хотите написать int val = "(a+b*c)/d+3" - то ничего не выйдет :-\ Слева int, справа string.
Если Вам надо ввести с клавиатуры string, содержащий арифметическое выражение (как в калькуляторе) и вычислить его, то Вам придеться разобрать строку на цифры и операции, а затем вычислить.
Задачка на лексический разбор строки.
P.S. В вопросе желательно указывать язык программирования ;-)

Владимир Жилковский
Владимир Жилковский | Репутация: 410 (Кандидат) 3 апреля 2009 в 21:03

Можно использовать функцию eval() или её эквивалент в зависимости от языка.