Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
ОСТОРОЖНО МОШЕННИКИ! В последнее время в соиальных сетях учстились случаи педложения помощи в написании прогамм от лиц, прикрвающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в псторонних группах ВК. Для связи с нами используйте исключительно эти контакт: vscoderu@yandex.ru, https://vk.com/vscode
Поменять значения двух переменных
Рассмотрим, как поменять местами значения двух переменных в коде программы. Статья предназначена тем, кто только начинает делать первые шаги в программировании.
Как только вы начнете писать свою второю в жизни программу (первая — вывод слов Hello World), вы столкнетесь с необходимостью обмена значениями между двумя числовыми переменными, поскольку манипуляции с данными непременно это предполагают. В примерах кода, которые приводятся в статье мы оперируем с целочисленными переменными типа int, но данные примеры легко адаптировать под любой вид числовых переменных: byte, long, float, double и т.п. Для этого вам будет достаточно заменить все ключевые слова int, на требуемый тип данных.
Примеры подходят и будут работать во всех Си-подобных языках программирования: C, C++, C#; а также в языке Java.
Поменять значения двух переменных
Прежде чем писать программный код, давайте подумаем, как поменять значения двух переменных в принципе. Решим данную задачу у себя в голове. А затем формализуем выработанный алгоритм действий.
Начнем с тезиса о том, что переменные в программе имеют содержимое. Они содержат информацию. Для того, чтобы провести какую-либо аналогию с жизнью, нужно подумать: а какие предметы что-нибудь в себе содержат? Первое, что приходит на ум — это ёмкость с жидкостью.
Пусть у нас есть два стакана: в одном налито молоко, а в другом кока-кола. Как нам перелить содержимое одного стакана в другой (нельзя же смешивать эти два совершенно несовместимых продукта) [заметили аналогию? ведь содержимое двух переменных нам тоже нужно поменять местами]? Ответ очевиден — понадобится третий (пустой) стакан. С помощью него удастся перелить содержимое одного стакана в другой. Вот так:
- Перелить молоко из первого стакана в третий.
- Перелить кока-колу из второго стакана в первый.
- Из третьего стакана перелить молоко во второй стакан. Готово!
Иллюстрация действий приводится на рисунке ниже.

Возвращаясь к программированию, делаем вывод, что для того, чтобы поменять значения двух переменных, понадобится промежуточная третья.
Пусть даны переменные a и b, и их значения нужно поменять местами. Нам понадобится промежуточная временная третья переменная, назовем её temp (сокращение от английского слова temporary — временный). Чтобы выполнить замену, придется также выполнить три действия:
Реализуем описанный выше алгоритм действий и составим программу обмена значениями двух переменных величин. Ниже представлен её код:
Как поменять значение двух переменных, не используя третью в 1С
Недавно мой старый знакомый посетовал на то, что не смог пройти собеседование на должность 1С программист. Узнав, что у него спрашивали, я задумался. Что и говорить, в его ситуации растерялся бы и я. Хотя ничего страшного в заданиях нет. Просто как-то необычно, что спрашивают алгоритмы вместо прикладных объектов.
Задача поменять местами значения переменных часто встречается при программировании. Например, без нее не обходится алгоритмы сортировки. Однако там часто используется третья буферная переменная. На С++ это будет выглядеть так:
int a=3,b=5,buf; buf=a; a=b; b=buf;
Значения поменялись. Задача выполнена. Так рекомендуется делать. Однако есть и другие способы. Один из моих любимых это использование xor (можете ознакомиться с ним в уроках по другим языкам программирования, например по С++).
Этот метод изящен и непонятен на первый взгляд. Кроме того, исключающий ИЛИ значительно медленнее обычного свопирования (обмена) переменных через буфер.
Давайте теперь поменяем значения xorом наших переменных a и b:
int a=3, b=5; a^=b^=a^=b; coutДанный способ легко позволяет выполнить поставленную задачу. Почему-то, многие даже не знают, что так можно решить эту задачу.
Все хорошо, однако в 1С нет xor. Разработчики решили, что он там не нужен. Ну и бог с ним. Решим другим способом.
a=3;
b=5;
a=a+b;
b=a-b;// здесь уже будет 3
a=a-b; // а теперь равно 5
Как видите, простая математика упростила нам жизнь. Ничего сложного здесь нет. К слову, так можно делать и в других языках.
Работодатель хочет быть уверенным в том, что ему попался хороший работник. Поэтому могут возникнуть подобные коллизии. Не бойтесь использовать свою логику –решайте так, как вам кажется нужным.
Я же, в свою очередь, в этом блоге постараюсь разобрать для вас всевозможные каверзные вопросы.
Меняем переменные местами без использования третьей переменной
Сегодня разберём хороший приём по информатике: как поменять значения переменных между собой, без использования третьей переменной.
Задача: Поменять значения целочисленных переменных между собой любыми тремя различными способами.
Данные приёмы способствуют росту мастерства по информатике и программированию и приводят ум в порядок!
Первый способ самый привычный для нас в информатике. Он заключается в том, что мы использованием третью переменную. Код приведён на языке C#.
Второй способ без использование третьей переменной.
Рассмотрим операцию исключающего ИЛИ, и почему она нам помогает менять значения у переменных местами.
| бит1 | бит2 | бит1^бит2 |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Если биты разные, то результат будет 1, если одинаковые, то 0. Как переменные меняются значениями показано на рисунках:


В результате у нас получается в переменной a число 5, а в переменной b число 3.
Сегодня мы продвинулись на ступеньку, на пол ступеньки в программировании и информатике. До новых встреч!
Пишем код: как поменять местами значения переменных
Что делать, если третью переменную использовать нельзя.
Эта задача — мини-практика для тех, кто уже освоился в программировании и хочет попробовать свои силы в решении настоящих задач.
Представьте такое: вы пишете код для брелока от управления охраной всего дома. Памяти в таких брелоках мало, каждый байт на вес золота. Ваша задача — поменять местами числовые значения в двух переменных:
- Например, в переменной A хранится число 3, а в переменной B — число 5.
- Нужно сделать так, чтобы в A оказалось 5, а в B — 3.
Как это сделать, если можно использовать только эти две переменные? Третью временную переменную использовать нельзя, чтобы не занимать лишнюю память.
Те, кто только начинают осваивать программирование, могут написать такой код:
Но мы с вами уже сразу видим, в чём здесь ошибка: как только мы напишем 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 );

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