
| Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
![]() |
||
Народ помогите с двумя переменными ...
|
||
| Философия, технологии, алгоритмы! |
![]() |
|
|
Опции темы |
|
|
#31 |
|
Klayton
Сообщений: 2,513
Регистрация: 19.05.2004
Возраст: 42
|
Нужно четко понимать.
Нужна ли подобная "оптимизация"... как тут справедливо заметили... что если нет ресурсов и т.п. знание архитектуры даст больше плюсов чем подобные извращения... а в результате такой чудо оптимизации пострадает сам код и его понимание... хорошо если вы сравнили числа через вычитание одного из другого... а когда таких финтов наберется десяток.. то код можно выбросить... имхо. И уж темболее такие извращения не нужны в скриптованных и Runtime языках... т.к. "на лету" происходит оптимизация. Скорее тот кто на собеседовании приводит такие задачи(темболее на вакансию 1С программиста...)... просто страдает комплексами... мое ИМХО. |
|
|
|
|
#32 | |
|
Форумец
Сообщений: 340
Регистрация: 25.07.2002
|
Цитата:
так что чел делал все правильно!!! ИМХОнарод, ну как же решается задачка с максимумом двух чисел??? интересно же... |
|
|
|
|
|
#35 |
|
Форумец
|
|
|
|
|
|
#40 |
|
Out There
Сообщений: 5,910
Регистрация: 13.12.2004
Возраст: 47
|
Гы-гы. какой я ответ нашел http://groups.google.com/group/comp....eee18e55ea156c
и ишшо темка. http://bytes.com/forum/thread487279.html |
|
|
|
|
#41 | |||
|
IGBT
Сообщений: 534
Регистрация: 09.10.2005
|
Цитата:
Вот я накалякал: int foo(int* i) { *i=10; return *i; } int fooo(int i) { i=10; return i; } имеем то что генерирует компилятор VC Цитата:
Цитата:
|
|||
|
|
|
|
#42 |
|
Форумец
Сообщений: 340
Регистрация: 25.07.2002
|
Вот по этому!!!
А вообще способ передачи параметров не определен, и зависит от целевой платформы (отключи при компиляции оптимизацию и увидишь много интересного )Если процедура меняет входной параметр, и он необходим в основной программе после выполнения процедуры, его надо передавать по сцылке, ну или указателем кому как нравится. ЗЫ. а вот такой вариант : int d=a-b; int n= a-a%b; //(если определена функция возведения в степень) ** int max=a-(0**n)*d; //(если функция возведения в степень не определена тогда только машиннозависимым способом ) ** int k=1&n; n=n>>1; k|=1&n; n=n>>1; k|=1&n; //... и так до двоичной размерности int int max=b+k*d; |
|
|
|
|
#43 |
|
Форумец
|
|
|
|
|
|
#50 |
|
Форумец
Сообщений: 340
Регистрация: 25.07.2002
|
|
|
|
|
|
#52 |
|
IGBT
Сообщений: 534
Регистрация: 09.10.2005
|
MadFish, большое спасибо за объяснения. А то я думал это кодер тот дурак, а это я дурак оказался. Тем более в коде это все видно было я что-то протупил, он же стековый кадр меняет, а не переменную.
PS: это кстати с /Od |
|
|
|
|
#54 |
|
Форумец
Сообщений: 340
Регистрация: 25.07.2002
|
|
|
|
|
|
#55 |
|
Out There
Сообщений: 5,910
Регистрация: 13.12.2004
Возраст: 47
|
Мне вот интересно, то решение, которое я в инете нашел и на предыдущей странице дал ссылку, оно, типа, никого не заинтересовало или просто никто не заметил? ) А то там все честно, никаких сравнений и вызовов функций, кроме как для получения аргументов из ком. строки и вывода результата. Вот только код писал явно маньяк...
Кстати, я только что допер, что в условии просят не пользоваться оператором сравнения, а не операцией. |
|
|
|
|
#59 |
|
Out There
Сообщений: 5,910
Регистрация: 13.12.2004
Возраст: 47
|
Yandex, так модуль числа - это же функция в большинстве языков. И на большинстве платформ нет асмовой операции модуля, поэтому будет сравнение, хоть и неявное. То есть решение не вполне "чистое". А вот "маньяческое" решение чище не бывает. Но разобраться в нем я пока еще не смог ) Да, и мое замечание насчет оператора/операции. Ведь если ограничение только на операторы сравнения (то есть if, switch), то можно вообще обойтись (a<b)? b : a
|
|
|
|
|
#60 | |
|
Форумец
|
насчет маньячного решения- имхо не решение это вовсе, больше похоже на набор операторов. вот, взял на себя труд отредактировать это чудо
Цитата:
|
|
|
|