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

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
//---сортировка по возрастанию методом выбора отдельно реальной и мнимой составляющих---------------
bool F_Sorted(T_VectorComplex * VC, bool)
{
    int i, j, m, N;
    double z;
    N = (*VC).size();
    for (j = N - 1; j > 0; j--) {
        m = j;
        z = real((*VC)[j]);
        for (i = j - 1; i >= 0; i--)
            if (z < real((*VC)[i])) {
                z = real((*VC)[i]);
                m = i;
            }
        if (j != m) {
            (*VC)[m] = T_Complex(real((*VC)[j]), imag((*VC)[m]));
            (*VC)[j] = T_Complex(z, imag((*VC)[j]));
        }
    }
    for (j = N - 1; j > 0; j--) {
        m = j;
        z = imag((*VC)[j]);
        for (i = j - 1; i >= 0; i--)
            if (z < imag((*VC)[i])) {
                z = imag((*VC)[i]);
                m = i;
            }
        if (j != m) {
            (*VC)[m] = T_Complex(real((*VC)[m]), imag((*VC)[j]));
            (*VC)[j] = T_Complex(real((*VC)[j]), z);
        }
    }
    return (true);
}

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

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

  • Помоему govnokod вреден. Я, насмотревшись, начинаю писать также... Х_Х
    Ответить
  • Мне больше нравится не используемые bool параметр и всегда возвращаемое true
    Ответить
    • Возможно, возращаемое true сделано с расчётом на будущую возможность возращать "false". Спросите "а зачем тогда до этого момента возращать true", дак чтобы в местах использования данной функции уже сейчас можно было использовать "if(F_Sorted(a,b))"... а передаваемый параметр тоже вполне может делаться для "forward compatibility".

      Хотя с другой стороны, возможно что это наоборот функция с "backward compatibility" на замену какой-то другой (более ранней) функции.

      А если ближе к телу функции, то вглядываться лень, но сразу режет глаз постоянное "(*VC)". Правильнее было бы определить ещё одну переменную, которой один раз присвоить "(*VC)", и после этого везде работать с новой переменной. Спросите "почему", дак для того, чтобы уменьшить глубину реальных значений (чтобы рабоатть не поинтером из поинтера, а напрямую с поинтером)... ну и так же из эстетических соображений
      Ответить
      • мне кажется, что второй параметр нужен был для того что бы производить реверс-сортировку.
        Если присвоить (*VC) переменной, то произойдёт глубокое копирование всего вектора. А вообще в С/C++ есть такой оператор как ->, а ещё лучше использовать ссылку или итераторы. А ещё лучше не городить велосипеды и использовать std::sort (которая, сортирует О(n log(n)) против О(N^2) в вышеприведённом говнокоде) и сортировка контейнера выполняется банальным определением предиката для комплексных чисел, например вот так:
        typedef std::complex<double> complex_t;
        struct less_complex : public std::binary_function<complex_t, complex_t, bool> {
            bool operator()(complex_t lhs, complex_t rhs) {
                return std::make_pair(lhs.real(), lhs.imag()) <
                    std::make_pair(rhs.real(), rhs.imag());
            }
        };


        Ниже приведён полный текст проверочная программа, советую не полениться, а почитать 😉

        #include <complex>
        #include <utility>
        #include <vector>
        #include <algorithm>
        #include <iterator>
        #include <iostream>
        
        typedef std::complex<double> complex_t;
        struct less_complex : public std::binary_function<complex_t, complex_t, bool> {
            bool operator()(complex_t lhs, complex_t rhs) {
                return std::make_pair(lhs.real(), lhs.imag()) <
                    std::make_pair(rhs.real(), rhs.imag());
            }
        };
        
        complex_t make_random_complex() {
            return complex_t(std::rand() % 100, std::rand() % 100);
        }
        
        template <typename Range>
        void print_vector(const Range& r) {
            std::ostream_iterator<typename Range::value_type> out(std::cout, "\n");
            std::copy(r.begin(), r.end(), out);
        }
        
        int main() {
            std::vector<complex_t> cvec(42);
            std::generate(cvec.begin(), cvec.end(), &make_random_complex);
            std::cout << "before sort:\n";
            print_vector(cvec);
            std::sort(cvec.begin(), cvec.end(), less_complex());
            std::cout << "after sort:\n";
            print_vector(cvec);
        }
        Ответить
        • Нам говнокод подавай а не STL примерчики из книжечек...
          Ответить
          • вообще-то это не из книжечки, сам вчера, будучи не трезвым написал ))
            Ответить
        • Как у тебя получаются такие нечитаемые программы? А ведь вроде хорошо написано...
          Ответить
        • Уважуха.
          Лаконичный, предельно ясный код. +
          Хорошее зеркало говнокода.
          Ответить
              • Это совершенно непонятный говнокод. И там. И там.
                Ответить
                • правильно, потому что вы не говнокодер, а всего лишь студент, который ещё даже не дорос до статуса говнокодера. Но скоро вы им станенете, не бойтесь. Сидите на этом сайте побольше и всё у вас получится.
                  Ответить
              • govnokod состоит из говнокодеров чуть более, чем полностью и этот тред это отлично показывает. В основном здесь школота в глаза не видевшая С++, разве что по книжке архангельского, которую они читали в институте при сдаче лаб...
                Ответить
          • Потому что ты хуй! Это, блядь ты тупая, самый что ни на есть правильный стиль. И если ты, уебок, начитался ебыных говноучебников с примерами из вижуал студио то молчи блядища.
            Ответить
        • Написано make_RANDOM_complex, а генерит не случайные числа rand() % 100.
          Нужно rand()/RAND_MAX * maxololol использовать.
          Ответить
          • генерит радномные числа от 0 до 99. На тот случай если не поняли.
            Ответить
        • А че везде std:: ?
          using namespace std; не дано использовать?
          Ответить
          • привычка (или приницип) не использовать using директиву в области видимости ограниченной только единицей трансляции.
            Ответить
    • >и всегда возвращаемое true
      Даже в случае ошибки. 😛
      Ответить
    • Давно уже пора пользоваться исключениями, а не кодировать ошибки магическими значениями. На дворе 21 век, все-таки.
      Ответить
      • да ну? программа сортировки кидающая исключения? Эх, школота...
        Ответить
          • спасибо я там был, да только Вас там не видел 🙂 Не, ну а серьезно, Вы считаете, что я не прав и мы должны кидать исключения из алгоритма сортировки?
            Ответить
        • Вообще какие в сортировке могут быть возращаемые значения или исключения?
          Сигнализирующие о том, что отсортировать элементы не удалось? 😀
          Что-за бред?
          Ответить
          • ну а я обо что? Сортировка никогда не бросает исключений, если только не бросают исключений используемые ею операции: сравнения, копирования, присваивания и инкрменетирования. Обычно эти операции не кидают исключений.
            Ответить
    • тщательно замаскирован ))

      T_VectorComplex - это std::vector<std::complex<double> >
      T_Complex - это std::complex<double>
      real, imag и прочие...

      но это конечно не умоляет заслуг автора ...))
      Ответить

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

Помни, guest, за тобой могут следить!

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


    8