Кресты / Говнокод #10760 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 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;
 }

Попросил чела решить классическую задачку - обменять значениями две переменные, не используя третьей

Запостил: telhar telhar, (Updated )

Комментарии (52) RSS

  • Соси мой горячий хуй.

    ↓↓↓↓↓ ОН ПИДОР. ↓↓↓↓↓
    Ответить
  • telhar вы уебством занимаитесь,написал чел да и похуй
    Ответить
  • на хуй твоя жопа хороша уебок в реали избил бы тебя как щенка
    Ответить
  • vercetti да пох на переменную решение было сделано прально условие работает но код хз какой,про такой говорят индуский код
    Ответить
      • Бесконечный цикл, не повторяющийся ни разу. Внутри цикла объявляются a и b, им присваиваются значения и сразу же проверяется существование. зачем-то goto, которое ведет к следующей же строчке.
        Ответить
          • Ну можно ^= поменять на += и -= для числовых типов.
            А для произвольного типа это же невозможно?
            Или я туплю?

            P.S. С += для чисел с плавающей точкой может возникнуть погрешность, а для целых, если язык проверяет, исключение по переполнению. Так что я совсем в сомнениях.
            Ответить
              • Ну кастовать &a в (char*) тоже нехорошо. У разных типов разный размер, придется вставлять например switch по sizeof(a)...
                switch (sizeof(a)) {
                case 8:
                    *((uint64_t*)&a) ^= *((uint64_t*)&b);
                    *((uint64_t*)&b) ^= *((uint64_t*)&a);
                    *((uint64_t*)&a) ^= *((uint64_t*)&b);
                    break;
                case 4:
                    *((uint32_t*)&a) ^= *((uint32_t*)&b);
                    *((uint32_t*)&b) ^= *((uint32_t*)&a);
                    *((uint32_t*)&a) ^= *((uint32_t*)&b);
                    break;
                case 2:
                    *((uint16_t*)&a) ^= *((uint16_t*)&b);
                    *((uint16_t*)&b) ^= *((uint16_t*)&a);
                    *((uint16_t*)&a) ^= *((uint16_t*)&b);
                    break;
                case 1:
                    *((uint8_t*)&a) ^= *((uint8_t*)&b);
                    *((uint8_t*)&b) ^= *((uint8_t*)&a);
                    *((uint8_t*)&a) ^= *((uint8_t*)&b);
                    break;
                default:
                    throw InvalidArgumentError();
                }

                Или я совсем туплю?
                Ответить
                • да, в принципе нормально.
                  а что если менять не значения, а ссылки?
                  Ответить
                  • Вы про случай void test(int &a, int &b)?
                    Да вроде должно нормально поменять.
                    Ответить
                          • Передача целого по ссылке в Аде - это не передача указателя. Помнишь, обсуждали?
                            Ответить
                            • предлагаю тебе всего лишь взять что то типа ideone и написать уже аналог swap(int & a, int & b) в три классических ксора, чтобы было наглядно
                              ну и вызвать его с swap(a, a), вывести a
                              Ответить
                              • На слово поверишь? А то может мне ещё код сложения 2+2 на Аде тоже на идеоне выписать?
                                Ответить
                              • При вызове swap(a,a) он его обнулит первым xor'ом?
                                Ну собственно это не проблема ссылок, а проблема самого алгоритма с ксорами - он по определению не пашет на одной переменной.

                                А для устранения этого досадного случая можно добавить в начало функции if (&a != &b) return
                                Ответить
                                • Как раз Ада при вызове Swap не обнулит. Потому что в Аде передача целого по ссылке - это копирование значения в функцию, вызов функции, копирование изменённых значений обратно. И никаких тормозных указателей. Значения могут прийти в функцию (и выйти из неё) в регистрах, например. говНяшка с её указателями сосёт.
                                  Ответить
                        • в питоне, руби, груви ваще без проблем
                          a,b=b,a
                          или
                          [a,b]=[b,a]
                          даж в пхп
                          list(a,b)=array(b,a)

                          я уж молчу про перл
                          Ответить
                            • куда уж короче?
                              а вообще, задача не такая частая, чтобы спецконструкцию городить, чреватую неоднозначностями
                              Ответить
                            • В пайтоне, перле и пхп можно что типа этого:
                              (a, b) = (b, a)

                              Если именно оператор, то в Icon есть :=:
                              Ответить
                              • >(a, b) = (d, a)
                                Костыли.
                                std::swap(a, b) и то лучше смотрится. Хоть дублирования переменных нет и меньше шансов на опечатку.
                                Ответить
                              • Интересно вот - создается ли при этом в куче временный тупл?
                                Ответить
                                • От реализации и от языка зависит, но обычно создаётся.
                                  В случае value типов это может быть неприятно.
                                  В том же C++ это тоже возможно, хоть и не так красиво:
                                  http://ideone.com/j4Mw2
                                  tie(b, a)=make_tuple(a, b);

                                  Для того же std::vector это жуткий перерасход. Создастся по копии на каждый вектор, в то время, когда достаточно одной, а в случае stl даже 0. std::swap тем и хорош, что для stl контейнеров обмен происходит за О(1) и потребление памяти О(1).
                                  Я однажды видел в С++ коде обмен через кортежи в те времена, когда ещё boost::tuple отсутствовал в стандарте С++ и выглядело это так:
                                  tie(b, a)=tie(a, b);
                                  Но, думаю, и так понятно, что Акеллагоре-оптимизатор промахнулся.
                                  http://ideone.com/98C8j
                                  Ответить
                  • Но поменяет значения, на которые ссылались ссылки...
                    А сами ссылки они же иммутабельны, как их поменять...
                    Ответить
          • Для любых битовых последовательностей одной длины.
            Опять я про кулхацкерские байтоёбские штучки...
            И да, с неподами может случиться хуйня.
            Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8