[C++] Как поменять местами 2 переменные без использования третьей

  Рет қаралды 19,513

Efremov Engineer

Efremov Engineer

7 жыл бұрын

В этом видео я покажу как поменять местами 2 переменные без использования третьей. Мы сделаем это 3-мя способами, используя: математику и булеву логику. В третьем способе мы поменяем местами 2 строки, без дополнительной переменной, с помощью адресации и указателей.
Задавайте Ваши вопросы:
Я в VK - id297086696
Я в FB - i2m.su/klotNf
Group VK - codrob
Group FB - i2m.su/xRPlWf
Бесплатный курс программирования: school.it2moro.ru/?...

Пікірлер: 23
@user-pq5fl5mo2x
@user-pq5fl5mo2x 6 жыл бұрын
Странно - в книге страуструпа всегда, когда обсуждают работу с указателями, говорят, что переменные должно что то связывать - проще говоря две эти строки не обязательно будут находиться рядом в памяти.
@urpersonalchance
@urpersonalchance 7 жыл бұрын
Очень хороший канал и темы для видео! Спасибо за труды! Хотел бы от тебя услышать какие-то рекомендации по книгам по С++ или советы по обучению этому языку. Последний год писал на JS, сталкивался с LISP и python, но понимаю, что именно на плюшках можно почувствовать всю силу программирования. Еще раз спасибо.
@urpersonalchance
@urpersonalchance 7 жыл бұрын
Уже нашел ваш репозиторий на гитхабе :D
@hiotensokatsui7044
@hiotensokatsui7044 7 жыл бұрын
как сделать в Qt стиль редактора как у тебя (VS), скинь xml файл через pastebin, или еще как-то
@user-iz8qz5fg4e
@user-iz8qz5fg4e 7 жыл бұрын
А в примере с указателями применяется такая усложненная формула как раз для того, чтобы избежать переполнения, да?
@user-iz8qz5fg4e
@user-iz8qz5fg4e 7 жыл бұрын
И зачем нужно умножать на 2? Или указатели могут представляться только чётными числами?
@efremov_engineer
@efremov_engineer 7 жыл бұрын
Умножение на 2 происходит чтобы создать буферное пространство. Для изменения мест переменных, т.к. мы можем использовать только (бинарный -), бинарный + для типа char не определен по умолчанию. При попытке написать x -= (x+y); Получите ошибку, приходится использовать умножение
@user-iz8qz5fg4e
@user-iz8qz5fg4e 7 жыл бұрын
Спасибо, кажется понял! забыл, что указатели нельзя складывать. Поскольку их нельзя складывать, вместо этого смещаемся от 2го указателя на их разницу с первым [первую операцию ведь можно записать как x = y + (y-x)]
@avamnepohui7260
@avamnepohui7260 6 жыл бұрын
+ faridenCo, примеры из видео лучше вообще нигде и никогда не применять в боевом коде. Хочешь что-то поменять местами - есть вот тот самый тупой и простой способ с переменной-акумулятором. Данные примеры хоть и интересны, но опасны.
@user-lj1sz8kl4j
@user-lj1sz8kl4j 5 жыл бұрын
В первом способе и переполнении, можно операцию "+" заменить на "-", и тогда переполнения не будет, зная разницу между двумя числами и одно из чисел можно поменять их местами, и тогда результат суммирования не будет превышать исходных значений.
@romasenkevich9907
@romasenkevich9907 5 жыл бұрын
тогда будет ограничение с отрицательными числами. минус 2 миллиарда минус 3 лярда
@rauan008
@rauan008 4 жыл бұрын
спасибо
@pavelneman8983
@pavelneman8983 7 жыл бұрын
тип инт(знаковый в большинстве случаев) хранит до 2+ млрд значение: так как тип знаковый, старший бит хранит знак. usigned int хранит до 4+ млрд значение.
@efremov_engineer
@efremov_engineer 7 жыл бұрын
Все верно, при работе с памятью у нас нет отрицательных адресов, вот и сказал, что до 4-х млрд
@itforall89
@itforall89 Жыл бұрын
Странно, почему не воспользовался адресной ссылкой &. С ее помощью можно легко изменять текущие значения переменной, прибегнув к ее адресу в памяти
@banaaboy6504
@banaaboy6504 4 жыл бұрын
проще всего swap(x,y)
@romankashirov9718
@romankashirov9718 5 жыл бұрын
по моему ты сам не понял как у тебя последний пример получился. или почему ты не удосужился объяснить зачем там умножение/деление на 2? или почему там нельзя напрямую взять и поменять местами физические адреса указателей как в самом первом примере?
@romankashirov9718
@romankashirov9718 5 жыл бұрын
п.с. я так понял дело в том что при вычитании или сложении сырых адресов указатели будут указывать на недопустимые или несуществующие обрласти памяти.
@anatoliy9696
@anatoliy9696 7 жыл бұрын
Я сделал как в первом примере ) А вот остальные не додумался (
@efremov_engineer
@efremov_engineer 7 жыл бұрын
Ну теперь знаешь)
@TheVanya96
@TheVanya96 7 жыл бұрын
аааа математично !!
@user-nj3ct5qj1x
@user-nj3ct5qj1x Жыл бұрын
Здравствуйте, могу ли я вам написать в телеграм у меня есть ошибка, но я не могу её исправить, код маленький, пожалуйста🙏
[C++] Битовые поля и объединения
17:40
Efremov Engineer
Рет қаралды 10 М.
Survival skills: A great idea with duct tape #survival #lifehacks #camping
00:27
ОСКАР vs БАДАБУМЧИК БОЙ!  УВЕЗЛИ на СКОРОЙ!
13:45
Бадабумчик
Рет қаралды 4,8 МЛН
He sees meat everywhere 😄🥩
00:11
AngLova
Рет қаралды 11 МЛН
Динамическая память в языке C++
19:02
Оксана Еськова. Основы программирования
Рет қаралды 281
Копирование массива, реверс циклический сдвиг на Си
20:30
КАК ЧИТАТЬ И ПОНИМАТЬ С/C++ КОД?
8:21
Winderton
Рет қаралды 186 М.
Programming Fundamentals - #1 - Logic and algorithms
15:29
loftblog
Рет қаралды 1,5 МЛН
Survival skills: A great idea with duct tape #survival #lifehacks #camping
00:27