Пишем код: как поменять местами значения переменных

Пишем код: как поменять местами значения переменных

Что делать, если третью переменную использовать нельзя.

Эта задача — мини-практика для тех, кто уже освоился в программировании и хочет попробовать свои силы в решении настоящих задач. 

Представьте такое: вы пишете код для брелока от управления охраной всего дома. Памяти в таких брелоках мало, каждый байт на вес золота. Ваша задача — поменять местами числовые значения в двух переменных:

  • Например, в переменной A хранится число 3, а в переменной B — число 5.
  • Нужно сделать так, чтобы в A оказалось 5, а в B — 3.

Как это сделать, если можно использовать только эти две переменные? Третью временную переменную использовать нельзя, чтобы не занимать лишнюю память.

Те, кто только начинают осваивать программирование, могут написать такой код:

A = B;

B = A;

Но мы с вами уже сразу видим, в чём здесь ошибка: как только мы напишем A = B, то мы потеряем значение переменной A. Дело в том, что после такого присваивания значение B будет лежать в обеих переменных, и значение A будет уже недоступно. Для проверки запустим код в браузере:

var a = 3;
var b = 5; 
console.log("До перестановки: a = " + a + ", b= " + b );
a = b;
b = a;
console.log("После перестановки: a = " + a + ", b= " + b );
Пишем код: как поменять местами значения переменных

Видно, что значение переменной A потерялось и у нас теперь два одинаковых значения B.

Наша задача — где-то хранить одновременно и A и B, чтобы можно было разложить их по нужным переменным. Проверим, сработает ли этот подход, если у нас всего две переменные.

Положим в переменную A сумму A и B:

A = A + B; // теперь у нас в A лежит сумма, а B по-прежнему хранит своё значение.

Теперь сделаем хитрость: положим в B начальное значение A. Получить его просто — достаточно из суммы, которая сейчас хранится в A, вычесть B:

B = A − B; // сейчас в B появилось старое значение A, которое мы получили вычитанием из общего результата.

Нам осталось вернуть старое значение B. Но раз у нас есть их сумма и уже готовое значение A, мы можем просто вычесть его из суммы и получить B:

A = A − B; // в A появилось старое значение B, которое мы получили из первоначальной суммы.

Проверим наш код в браузере:

var a = 3;
var b = 5; 
console.log("До перестановки: a = " + a + ", b= " + b );
a = a + b;  // теперь у нас в A лежит сумма, а B по-прежнему хранит своё значение
b = a - b; // сейчас в B появилось старое значение A, которое мы получили вычитанием из общего результата
a = a - b// в A появилось старое значение B, которое мы получили из первоначальной суммы
console.log("После перестановки: a = " + a + ", b= " + b );

Пишем код: как поменять местами значения переменных
Работает!

В следующий раз попробуем задачу посложнее, а пока попробуйте сделать то же самое, но не используя сложение и вычитание. И помните, что памяти в брелоке мало, другие переменные использовать нельзя.

Обложка:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Маша Климентьева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
Подключаем нейросеть к веб-камере
Подключаем нейросеть к веб-камере

Готовьтесь — искусственный интеллект уберёт вас из кадра.

medium
Создаём собственный таймер-напоминалку
Создаём собственный таймер-напоминалку

Таймеров и трекеров полно, но мы сделаем такой, какой нужен именно вам. Это легко.

medium
Делаем свой таймер на Python
Делаем свой таймер на Python

Код — проще, возможностей — больше.

easy
Чёртовы психи: как добавить снежинок на любой сайт одной строкой
Чёртовы психи: как добавить снежинок на любой сайт одной строкой

Ну ладно, тремя строками. Это, считай, одна.

medium
Добавляем веб-интерфейс к телеграм-боту
Добавляем веб-интерфейс к телеграм-боту

Показываем, как один бэкенд может обслуживать разные фронтенды

medium
Как добавить бесящую плашку про куки себе на сайт
Как добавить бесящую плашку про куки себе на сайт

Иногда без этого не обойтись

easy
Делаем непобедимую игру Ним
Делаем непобедимую игру Ним

Применяем теорию игр

medium
Адаптируем «Пирамиду» для игры на смартфонах
Адаптируем «Пирамиду» для игры на смартфонах

Это несложно

easy
Что означает ошибка ReferenceError: Can't find variable
Что означает ошибка ReferenceError: Can't find variable

Ошибка в JavaScript: что она значит и что делать

easy
medium