Рассмотрим, как поменять местами значения двух переменных в коде программы. Статья предназначена тем, кто только начинает делать первые шаги в программировании.
Как только вы начнете писать свою второю в жизни программу (первая — вывод слов Hello World), вы столкнетесь с необходимостью обмена значениями между двумя числовыми переменными, поскольку манипуляции с данными непременно это предполагают. В примерах кода, которые приводятся в статье мы оперируем с целочисленными переменными типа int, но данные примеры легко адаптировать под любой вид числовых переменных: byte, long, float, double и т.п. Для этого вам будет достаточно заменить все ключевые слова int, на требуемый тип данных.
Примеры подходят и будут работать во всех Си-подобных языках программирования: C, C++, C#; а также в языке Java.
Поменять значения двух переменных
Прежде чем писать программный код, давайте подумаем, как поменять значения двух переменных в принципе. Решим данную задачу у себя в голове. А затем формализуем выработанный алгоритм действий.
Начнем с тезиса о том, что переменные в программе имеют содержимое. Они содержат информацию. Для того, чтобы провести какую-либо аналогию с жизнью, нужно подумать: а какие предметы что-нибудь в себе содержат? Первое, что приходит на ум — это ёмкость с жидкостью.
Пусть у нас есть два стакана: в одном налито молоко, а в другом кока-кола. Как нам перелить содержимое одного стакана в другой (нельзя же смешивать эти два совершенно несовместимых продукта) [заметили аналогию? ведь содержимое двух переменных нам тоже нужно поменять местами]? Ответ очевиден — понадобится третий (пустой) стакан. С помощью него удастся перелить содержимое одного стакана в другой. Вот так:
- Перелить молоко из первого стакана в третий.
- Перелить кока-колу из второго стакана в первый.
- Из третьего стакана перелить молоко во второй стакан. Готово!
Иллюстрация действий приводится на рисунке ниже.
Возвращаясь к программированию, делаем вывод, что для того, чтобы поменять значения двух переменных, понадобится промежуточная третья.
Пусть даны переменные a и b, и их значения нужно поменять местами. Нам понадобится промежуточная временная третья переменная, назовем её temp (сокращение от английского слова temporary — временный). Чтобы выполнить замену, придется также выполнить три действия:
- Присвоим переменной temp значение из переменной a.
- Присвоим a значение b.
- Присвоим b значение переменный temp. Готово!
Реализуем описанный выше алгоритм действий и составим программу обмена значениями двух переменных величин. Ниже представлен её код:
1 2 3 4 5 6 7 8 |
int a = 3; int b = 5; int tmp; tmp = a; a = b; b = tmp; |
Поменять значения двух переменных не используя третью
Но переменные в программировании это всё-таки не стаканы, это вещь в некоторой степени абстрактная, и приведенная выше аналогия не корректна полностью, поскольку существует способ обмена значений двух переменных без использования третьей. Как же это сделать?
Объявим a = 3, b = 5. Чтобы поменять значения этих переменных, необходимо выполнить четыре операции (но не придётся использовать промежуточную временную переменную), они приведены в таблице. В столбцах значений переменных намеренно представлены выражения (а не их результат) для большей наглядности.
Операция | a | b |
a = a + b | 3 | 5 |
b = b — a | 3 + 5 | 5 |
b = -b | 3 + 5 | 5 — 3 — 5 = -3 |
a = a — b | 3 + 5 | 3 |
3 + 5 — 3 = 5 | 3 |
Формализуем табличные данные в виде кода:
1 2 3 4 5 6 7 |
int a = 3; int b = 5; a = a + b; b = b - a; b = -b; a = a - b; |
Надеемся, что алгоритмическая последовательность действий, записанная в виде таблицы, а также программный код, помогли вам разобраться и понять, как поменять значения двух переменных без третьей.
Спасибо за прочтение статьи!
Поделиться в соц. сетях:
Добрый день, не пойму — зачем столько действий если можно
a = 3;
b = 6;
b = a + b; 3+6=9
a = b — a; 9-3=6
b = b — a; 9-6=3
a = 6;
b = 3;
Добрый день. У Вас совершенно правильный код. На одну операцию короче.
Если сравнить с нашим кодом, то Вы шестую строку интегрировали в седьмую. А смысл, естественно, тот же самый.
а так?
a = — a — b
b = — a — b
a = — a — b
И так верно.
Запись фантастическая, посчитал все работает, проверил в программе, тоже отличный результат.
А как сделать, чтобы программа прочиталась? Что нужно писать во WriteLine-е?
Например, так:
Console.Write(«a = «);
int a = Convert.ToInt32(Console.ReadLine());
Console.Write(«b = «);
int b = Convert.ToInt32(Console.ReadLine());
int tmp;
tmp = a;
a = b;
b = tmp;
Console.WriteLine(«a = » + a);
Console.WriteLine(«b = » + b);
a=a+b
b=a-b
a=a-b