Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2012, 13:50   #11
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Этот способ очень "хакерский" и применим Далеко не во всех случаях.
Надо применить еще более "хакерский" прием

Код:
a:=a xor b; //(a+b) //"+" здесь конечно же означаем тот же xor
b:=b xor a; //b+(a+b) =a
a:=a xor b; //(a+b)+a =b
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 27.12.2012, 14:33   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

evg_m, согласен, это уже намного лучше.

Но если a и b являются строками, у Вас с таким подходом проблем не возникнет?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.12.2012, 14:54   #13
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Но если a и b являются строками, у Вас с таким подходом проблем не возникнет?
конечно возникнут.
Выравнивание длин строк по наибольшей и потом (после обмена) обрезание. Как тут без "лишних" переменных?
а после выравнивания это опять массив уже "простых" типов (char).

Хотя... Если трактовать строку как указатель, то "xor" обмен указателей вполне применим.
конечно непонятно что такое Pointer(a) xor Pointer(b) ?
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 27.12.2012 в 14:59.
evg_m вне форума Ответить с цитированием
Старый 27.12.2012, 15:46   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

По-моему задание на отсев.
Глупость какая-то, если уж и ужиматься до рамок не использования допхранилища, то тогда и на асме под камушек какой писать. Зачем такие задания дают для обычного прикладного ПО непонимаю...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.12.2012, 20:47   #15
darknim
Пользователь
 
Регистрация: 14.12.2012
Сообщений: 36
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Этот способ очень "хакерский" и применим Далеко не во всех случаях.

1-х, он не будет работать, если величины a и b имеют такое значение, что их сумма (разность) может превысить разрядную сетку (ну, попробуйте взять целые числа и значения A и B близкие к MaxInt)

2-х, этот способ СОВСЕМ не применим, когда элементы массивов НЕ Числовые (array of char или array of string)

Думаю, что решение из пост #4 подходит (имхо, в условии задачи запрещено использовать дополнительный массив, а не дополнительные переменные!! Это принципиально важно. В конце концов, если следовать логиге, что нельзя использовать ЛЮБУЮ дополнительную переменную, тогда и переменную для индекса массива тоже использовать нельзя!
Этот пример перестановки из школы и нам тогда не ставили такие жесткие рамки.

Даже через указатели это решить нельзя, так как опять доп. переменные.
darknim вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поменять значения переменных. Shevali Помощь студентам 26 06.10.2013 14:30
как впаять в запрос значения переменных? Amka Microsoft Office Access 15 19.07.2012 01:14
Пропадают значения переменных Митовей Общие вопросы C/C++ 4 30.04.2012 19:25
Изменяются значения переменных Naper214 Общие вопросы C/C++ 1 06.06.2010 21:18
ПОменять значения местами qip2005 Паскаль, Turbo Pascal, PascalABC.NET 6 24.12.2008 23:38