
| Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
![]() |
||
Народ помогите с двумя переменными ...
|
||
| Философия, технологии, алгоритмы! |
![]() |
|
|
|
Опции темы |
|
|
#1 |
|
Форумец
Сообщений: 17
Регистрация: 12.08.2007
|
Народ помогите с двумя переменными ...
На днях проходил тестирование в одной фирме ХХХХХ в тесте была задача как поменять содержимое двух переменных местами без участия третей переменной ...
я так понял а = 1, b = 2 и их надо поменять местами ..... я так дамаю с = а, а = b, b = c ..... и получиться а = 2, b = 1 кто знает как ещё проще их поменять местами ??? без участия третей переменной ... |
|
|
|
|
#5 |
|
Форумец
Сообщений: 17
Регистрация: 12.08.2007
|
The_God, Pengvin, Don_Vito народ да вы круты !!!
Да … век живи, век учись и дураком помрёшь ... Я конечно все понимаю, но вот это действилельно изврещение !!!!!!!!!!!!!!!!! А если переменные текстовые или вообще объекты ????? ЭТО ТЕСТ ДЛЯ 1С БЫЛ !!! |
|
|
|
|
#7 |
|
IGBT
Сообщений: 534
Регистрация: 09.10.2005
|
kazys, неизвращение это: tmp=a; a=b;b=tmp; Использование двух переменных это уже акробатика.
Насколько я себе представляю язык в 1С скриптовой и уж тут зависит будет ли это все работать от того как разработчик организовал представление переменных, тем более в таком самобытном продукте как 1С. Тут VС не хочет метод с мат операциями применять к char *s, хотя это суть то же число. А вот push и pop работают со строками. |
|
|
|
|
#13 | |
|
IGBT
Сообщений: 534
Регистрация: 09.10.2005
|
Цитата:
{ mov eax,a mov ebx,b sub eax,ebx jc bigb jmp biga } bigb: printf("b>a"); biga: printf("a>b"); ![]() если = как знак присваивания, то можно. А вы на каком языке кодите? |
|
|
|
|
|
#15 |
|
IGBT
Сообщений: 534
Регистрация: 09.10.2005
|
RDS, а что там расшифровывать?
sub eax,ebx есть вычитание, jc - проверка флага переноса CF и переход на метку, поскольку мы вычитаем из а б, то если ответ отрицательный, флаг устанавливается и мы переходим на метку bbig, ну если нет то переходим на метку abig. Собственно примерно вот так. |
|
|
|
|
#16 | |
|
Форумец
Сообщений: 295
Регистрация: 12.01.2008
Возраст: 50
|
Цитата:
Оператор сравнения именно для сравнения и существует - это самый простой и надежный способ сравнения. Тесты немного дурноватые... И даже, если мы тестируем кодера на умение логически мыслить, то при предложении им способа "сравнить без оператора сравнения" следует задуматься, а профессионал ли перед вами? или кодоман-извращенец? Профессионал, даже предложив такой способ, обязательно должен сделать оговорку, что применять этот способ не следует никогда, потому как есть более надежный, легкий способ, легко понимаемый при изучении кода другим человеком. |
|
|
|
|
|
#17 |
|
просто Гений
Сообщений: 3,133
Регистрация: 22.01.2007
Возраст: 51
|
Capra hircus,
Э нет не согласен! Такие задачи как раз проверяют умение мыслить логически! Если нашел решение - респект умеешь мыслить (задачи то не тривиальные). Если знал решение - респект большой запаса стандартных алгоритмов... А вот если не нашел и не знал... то стоит задуматься... Может и не плохой кодер перед тобой.. но врят-ли он что-то оригинальное придумает.. так рутину ему тока и можно доверять. Pengvin, Нет не интересно... асемблер... машинноорентированно. Вот на языке Ершова то=же самое изобразить слабо? кроме того.. тут происходит неявное испльзование операторов сравнения. На языке Ершова, задачу следоволо-бы сфолрмулировать: "Без использования "ЕСЛИ"... У Вас "Если" используеться.. |
|
|
|
|
#18 | |
|
просто Гений
Сообщений: 3,133
Регистрация: 22.01.2007
Возраст: 51
|
Цитата:
Тут еще дополнительно раскрываеться характер кодера. В общем нормальный тест.. |
|
|
|
|
|
#19 | |
|
Форумец
Сообщений: 1,109
Регистрация: 19.12.2004
Возраст: 43
|
Цитата:
такие тесты ничего не проверяют, это как попросить расказать указаное ( по автору и названию ) стихотворение по памяти, либо знаеш и вспомниш, либо не знаеш и не вспомниш ![]() если хочется чтото проверить то надо дать просто задание по теме чем занимается фирма, дать док с кодингстандартом которого придерживается фирма чтобы не оценивать насколько соискатель угадал "правильный" ( фирменный ) стиль программирования. |
|
|
|
|
|
#20 | |
|
Форумец
Сообщений: 1,109
Регистрация: 19.12.2004
Возраст: 43
|
Цитата:
какие там нафих ограничения ??? ... даж англиские буквы знать наверна не обязательно
|
|
|
|
|
|
#21 |
|
Out There
Сообщений: 5,910
Регистрация: 13.12.2004
Возраст: 47
|
The_God, можно даже на самом "ограниченном" языке одну и туже задачу решить оптимально и не оптимально. Если чел привык все делать через одно место, то ему какой язык ни дай - он все будет так делать. Ему будет лень придумывать менее очевидный, но более эффективный алгоритм. Это уже не программер, это ремесленник, в плохом смысле этого слова. Он тупо использует вычитанные/подсмотренные чужие наработки, не создавая ничего своего. Отсюда мы и получаем проги, которые используют дохрена озу, работают как черепахи, а ценность их выдачи, прям скажем, сомнительна.
Я вчера проходил, ради развления, онлайновый тест по сям... В общем, у меня сложилось впечатление, что от программер-насильника хотят, чтобы он мог разбирать код лучше компилятора в уме. Задания, типа, скажите где тут синтаксическая ошибка или что же выведет данна прога на экран. Я уж молчу, про вопросы, когда от тебя требуют "справочные" данные. Бред, имхо. А еще я недавно читал вопросы, которые исользуются при приеме на работу в мелкософт - вот там реально нестандартные вопросы, которые отделяют тех, кто способен на творчество от "ремесленников" http://www.sellsbrothers.com/fun/msi...t=question.htm А вот еще инфа "из первых рук", о том как люди попадают на работу туда и чем "ихние" собеседования отличаются от "наших" http://blogs.technet.com/not-a-kerne...3/2165208.aspx |
|
|
|
|
#22 | |
|
Форумец
Сообщений: 82
Регистрация: 15.09.2003
|
Цитата:
я пока докумекал до варианта, требующего модуль числа: int max(a,b) { int d=(a-b)/abs(a-b); //надо ещё отдельно окучить случай когда a==b return a*(d+1)/2 +b*(d-1)/(-2) } ну модуль, конечно, можно делать правильно через if:int abs(int x){ if(x>=0) return x; else return -x; } но можно и по-хитрому без if - выделить старший (знаковый) бит у integer'а - а дальше дело техники - ну то есть int abs(int x) { signbit=выделить знаковый бит из x, например signbit=(x>>31) ? return (1-signbit)*x-signbit*x } То есть без if. но уж как-то шибко машинно-зависимо ![]() А, вот еще забавный способ придумал: int max(int a,int b) { try { float d=sqrt(a-b); return a; } catch(...) { return b; } } если корень из разности кидает исключение, значит она отрицательна )) но это уж совсем тормозной способ.
|
|
|
|
|
|
#23 | |
|
IGBT
Сообщений: 534
Регистрация: 09.10.2005
|
Цитата:
Вобще если вопрос заходит о таких извращения, тот тут на самом деле надо решать действительно ли выгодно данное решение в плане производительности, код для сравнения чисел вычитанием, который я привел занимает не так уж и много места, а вот будет ли аналогичное решение допустим на С быть меньшим по размеру и по производительности быстрее это вопрос. Эта любовь к сомнительной оптимизации делает код во-первых нечитаемым, во-вторых не всегда приводит к росту производительности, если не делает хуже, надо смотреть по контексту задачи. Я видел иногда очень веселый код, например кодера который помешан на указателях у него параметры передавались примерно так: int foo(int *i) причем в аргумент есть одна единственная переменная, т.е. это все передавалось int z; foo(&z). Собственно размер указателя на int равен самому int. Т.е. человек слышал, что указатели это круто, но видимо с трудом понимает что они представляют. Это имхо |
|
|
|
|
|
#24 |
|
Форумец
Сообщений: 691
Регистрация: 01.02.2008
Возраст: 41
|
Классика задач для подготовки олимпиадчиков. Только зачем такие задачи в 1С, имхо, не понятно
|
|
|
|
|
#25 |
|
Форумец
Сообщений: 1,144
Регистрация: 18.09.2006
Возраст: 42
|
моя в ужосе, какие дебаты!!!!!!!
но возникло пару вопосов не совсем по теме ![]() это же с double не прокатет.......??? (очень интересный вариант )и это в некоторых случаях тоже....??? |
|
|
|
|
#26 |
|
Форумец
Сообщений: 691
Регистрация: 01.02.2008
Возраст: 41
|
В книге "Особенности национальных задач по информатике" приводится именно вариант с xor. Видимо, оттуда задачку и взяли
|
|
|
|
|
#27 |
|
Форумец
Сообщений: 16
Регистрация: 05.08.2008
|
Ну да задачки супер, суть вся сводиться к тому, чтобы с ж.. начать оптимизировать. В 1С насколько я знаю, основная задача чтобы работала, а не выеб...я с написанием кода. Более того все узкие места там с получением и обработкой данных из БД - которое ни 1С нормально делать не умеет, не большинство кодеров, которые в этой сфере работают(только 1С++ и ToySQL спасают, и то не от всех кодеров), а не в расчётах а + б. Впечатление складывается, что конторка то лажовая, ну или отдельные придурки, которые в ней работают, начитались туфты и решили перед начальством рубануться "- типа вот какой у нас крутой тест". Такие задачи в КБ ещё допустимы, а не у франчей))))).
|
|
|
|
|
#29 |
|
Форумец
Сообщений: 170
Регистрация: 07.03.2004
Возраст: 41
|
|
|
|
|
|
#30 |
|
просто Гений
Сообщений: 3,133
Регистрация: 22.01.2007
Возраст: 51
|
alexz,
ИМХО функция МАХ не совсем подходит, она же возвращает максимальное их вдух, а значит сравнивает их.. хотя и не являеться оператором сравнения. А вот корень из разности, это интересный и оригинальный вариант. Можно поставить подпрограмму обработки ошибок и в этом случе действительно не будем использовать оператор сравнения.. Если ошибки не возникла программа пошла по одному пути, если возникло по дургому. |
|
|