- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
#include <iostream>
using namespace std;
int main()
{
for(int i = 0x1; 0x1 <= i; i++)
{
int a = 0x5;
int b = 0xa;
cin >> i;
if(b || a)
{
a += 0x5;
cout << "\n ";
cout << "первое условие: ";
cout << "\n ";
cout << "переменная a = " << a;
cout << "\n ";
cout << "переменная b = " << --b + 0x5 - 0x9;
cout << "\n";
goto var;
}
else
{
var:
cout << "\n ";
cout << "второе условие: ";
a = (0xa - 0x5);
cout << "\n ";
cout << "переменная a = " << a;
cout << "\n ";
cout << "переменная b = " << ++b;
cout << "\n";
}
break;
}
system("pause");
return 0;
}
Попросил чела решить классическую задачку - обменять значениями две переменные, не используя третьей
Ushlepok 08.06.2012 19:41 # −11
↓↓↓↓↓ ОН ПИДОР. ↓↓↓↓↓
guest 08.06.2012 19:42 # 0
guest 08.06.2012 20:15 # −9
Ushlepok 08.06.2012 20:19 # −10
HaskellGovno 08.06.2012 23:47 # −7
guest 08.06.2012 20:26 # −7
guest 08.06.2012 20:47 # 0
JavaGovno 08.06.2012 20:57 # −8
guest 08.06.2012 21:04 # −6
guest 08.06.2012 21:09 # −6
movaxbx 08.06.2012 21:17 # +11
vercetti 08.06.2012 22:11 # +2
А это что?
roman-kashitsyn 08.06.2012 22:20 # +8
vercetti 08.06.2012 22:22 # +2
guest 08.06.2012 23:18 # −1
telhar 09.06.2012 10:02 # 0
telhar 09.06.2012 10:12 # 0
guest 09.06.2012 11:01 # 0
bormand 09.06.2012 11:19 # 0
Lure Of Chaos 09.06.2012 11:45 # +3
bormand 09.06.2012 12:08 # +2
А для произвольного типа это же невозможно?
Или я туплю?
P.S. С += для чисел с плавающей точкой может возникнуть погрешность, а для целых, если язык проверяет, исключение по переполнению. Так что я совсем в сомнениях.
Lure Of Chaos 09.06.2012 12:16 # 0
bormand 09.06.2012 12:31 # +2
Или я совсем туплю?
Lure Of Chaos 09.06.2012 13:00 # 0
а что если менять не значения, а ссылки?
bormand 09.06.2012 13:11 # 0
Да вроде должно нормально поменять.
defecate-plusplus 09.06.2012 15:15 # 0
TarasB 09.06.2012 15:50 # 0
defecate-plusplus 09.06.2012 15:59 # 0
TarasB 09.06.2012 16:06 # 0
defecate-plusplus 09.06.2012 16:25 # 0
ну и вызвать его с swap(a, a), вывести a
TarasB 09.06.2012 17:25 # 0
bormand 09.06.2012 17:50 # 0
Ну собственно это не проблема ссылок, а проблема самого алгоритма с ксорами - он по определению не пашет на одной переменной.
А для устранения этого досадного случая можно добавить в начало функции if (&a != &b) return
TarasB 09.06.2012 18:39 # 0
Lure Of Chaos 09.06.2012 16:43 # +3
a,b=b,a
или
[a,b]=[b,a]
даж в пхп
list(a,b)=array(b,a)
я уж молчу про перл
bormand 09.06.2012 17:51 # 0
roman-kashitsyn 09.06.2012 18:27 # 0
Lure Of Chaos 09.06.2012 18:34 # 0
Говногость 09.06.2012 22:37 # +2
http://ideone.com/Zq26N
Lure Of Chaos 09.06.2012 22:43 # +2
а вообще, задача не такая частая, чтобы спецконструкцию городить, чреватую неоднозначностями
USB 09.06.2012 23:00 # +2
В таких случаях используют swap постоянно по коду.
Lure Of Chaos 09.06.2012 23:02 # +1
JavaGovno 10.06.2012 01:30 # −6
TheHamstertamer 10.06.2012 16:11 # 0
(a, b) = (b, a)
Если именно оператор, то в Icon есть :=:
USB 10.06.2012 17:00 # 0
Костыли.
std::swap(a, b) и то лучше смотрится. Хоть дублирования переменных нет и меньше шансов на опечатку.
bormand 10.06.2012 17:10 # 0
USB 10.06.2012 17:43 # +1
В случае value типов это может быть неприятно.
В том же C++ это тоже возможно, хоть и не так красиво:
Для того же std::vector это жуткий перерасход. Создастся по копии на каждый вектор, в то время, когда достаточно одной, а в случае stl даже 0. std::swap тем и хорош, что для stl контейнеров обмен происходит за О(1) и потребление памяти О(1).
Я однажды видел в С++ коде обмен через кортежи в те времена, когда ещё boost::tuple отсутствовал в стандарте С++ и выглядело это так:
Но, думаю, и так понятно, что Акеллагоре-оптимизатор промахнулся.
roman-kashitsyn 10.06.2012 16:31 # +3
bormand 09.06.2012 13:48 # 0
А сами ссылки они же иммутабельны, как их поменять...
TarasB 09.06.2012 15:50 # +1
Опять я про кулхацкерские байтоёбские штучки...
И да, с неподами может случиться хуйня.
Lure Of Chaos 09.06.2012 16:45 # 0
TarasB 09.06.2012 17:25 # 0
не-POD
JavaGovno 11.06.2012 13:21 # −7