Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/18cd992db7b076df5fc33440641fc1d3 to your computer and use it in GitHub Desktop.
Save anonymous/18cd992db7b076df5fc33440641fc1d3 to your computer and use it in GitHub Desktop.
Как поменять значения переменных не используя третью

Как поменять значения переменных не используя третью


Как поменять значения переменных не используя третью



Алгоритм обмена при помощи исключающего ИЛИ
Задачи / Изменить местами значения двух переменных без использования третьей
Напишите функцию, меняющую местами значения переменных, не используя временные переменные


























Это классическая задача, которую любят предлагать на собеседованиях, и она достаточно проста. Пусть a 0 — это исходное значение a , а b 0 — исходное значение b. Обозначим diff разницу а 0 - b 0. Присвоим а значение diff. Если сложить значение b и diff , то мы получим a 0 результат следует сохранить в b. Все, что нам остается сделать, — присвоить b значение а 0 - diff , а это значение представляет собой b - a. Можно решить эту задачу с помощью битовой манипуляции. Такой подход позволит нам работать с разными типами данных, а не только с integer. Этот код использует операцию XOR. Проще всего понять, как работает код, взглянув на два бита — р и q. Давайте обозначим как р 0 и q 0 исходные значения. Если мы сможем поменять местами два бита, то алгоритм будет работать правильно. Давайте рассмотрим работу алгоритма пошагово:. Давайте проанализируем оба возможных значения p. Так как мы хотим поменять местами значения p и q , в результате должен получиться Давайте рассмотрим оба значения p. В результате мы хотим получить q 0. Остается только присвоить p значение q 0 , a q — значение р 0. Мы удостоверились, что наш алгоритме корректно меняет местами каждый бит, а значит, результат будет правильным. Новости Задачи с IT-собеседований Эксперты отвечают читателям Вакансии О проекте Реклама Свежие статьи Лучшие за неделю Лучшие за месяц Лучшие за всё время. Показать лучшие за неделю 1 месяц лет Свежие.


Как поменять переменные местами?


Недавно мой старый знакомый посетовал на то, что не смог пройти собеседование на должность 1С программист. Узнав, что у него спрашивали, я задумался. Что и говорить, в его ситуации растерялся бы и я. Хотя ничего страшного в заданиях нет. Просто как-то необычно, что спрашивают алгоритмы вместо прикладных объектов. Задача поменять местами значения переменных часто встречается при программировании. Например, без нее не обходится алгоритмы сортировки. Однако там часто используется третья буферная переменная. Однако есть и другие способы. Этот метод изящен и непонятен на первый взгляд. Кроме того, исключающий ИЛИ значительно медленнее обычного свопирования обмена переменных через буфер. Данный способ легко позволяет выполнить поставленную задачу. Почему-то, многие даже не знают, что так можно решить эту задачу. Все хорошо, однако в 1С нет xor. Разработчики решили, что он там не нужен. Ну и бог с ним. Как видите, простая математика упростила нам жизнь. Ничего сложного здесь нет. К слову, так можно делать и в других языках. Работодатель хочет быть уверенным в том, что ему попался хороший работник. Поэтому могут возникнуть подобные коллизии. Не бойтесь использовать свою логику —решайте так, как вам кажется нужным. Вот вариант для переменных произвольных типов на сях:. Мне почему-то пришло в голову, что обычно просят поменять значение только числовых переменных. О произвольных я как-то забыл. Ваш способ я знаю, но тем не менее, спасибо за поправку. В 1С своя специфика работы и к его синтаксису не так легко приловчиться. Описанный вами способ там по-просту бесполезен, так как система приведет значение к числовому типу. Все верно, но только не забывайте, что статья писалась об 1С! Там этих ограничений просто нет. Если бы я писал о сях или моей любимой жабе, то материал бы был совершенно другой. Ограничения есть всегда Другое дело что таковы значения вряд ли будут использоваться. Я писал за ограничения в 1с может быть не совсем правильно так как не пользуюсь им. Ладно, пусть реализация в 1С лежит на совести Нуралиева В любом случае, всегда приятно подискутировать со специалистами Знаете, если я доберусь до написания статей, то выложу ряд материала по реверсивной инженерии. В частности, так как я последний год работаю на дойчей питонщиком, то хотелось бы показать простой дебаггер на питоне. А вот там пригодятся и все Ваши знания в области регистров процессора, реализации компиляторов для той или иной платформы кстати, не хотите со мной поспорить, что ассемблер интерпретирующий язык? В любом случае, спасибо за поправки. Действительно приятно видеть читателя, который задумывается о написанном. Спорить не буду, так как плотно с Ассемблером не знаком. Если вы не против — добавлю еще один вариант Если возникают ограничения с использованием памяти, удобнее уменьшить промежуточное число небольшая погрешность, как правило, автоматически убирается:. Не будут добавляться комментарии в виде откровенного спама или прямого анкора на свои сайты. Все спамеры будут передаваться в базу Akismet. Mail не публикуется, обязательно. Вы можете использовать теги: Поставьте галочку, если хотите получать на почту уведомления о новых комментариях в этой теме. Доступное для всех программирование Блог для айтишников всех уровней. Как поменять значение двух переменных, не используя третью в 1С Полная запись. Добавить комментарий Нажмите, чтобы отменить ответ. Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: Рассказ о собственном опыте. Полезные статьи Урок 2: Блог для айтишников всех уровней.


Где выпускают шкоду йети
Тест измеряющий способности
Требованияк схеме расположения земельного участка 2016
Что отправить в посылке в армию
Как сделать скрин на телефоне meizu
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment