1. C++ / Говнокод #4683

    +145

    1. 1
    2. 2
    3. 3
    4. 4
    if (mode == MASTER)
    	Dev_Mode = MASTER;
    else
    	Dev_Mode = SLAVE;

    Vanuan, 19 Ноября 2010

    Комментарии (3)
  2. C++ / Говнокод #4669

    +145

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    for(i=0;i<=15;i++) {
     o=Odd(N[i]);s=Simple(N[i]);//Odd-проверка на нечётность всех цифр, Simple-на простое число
     if((o&&s)||(N[i]==3||N[i]==5||N[i]==7)) 
    {
    }
     else cprintf("%d ",N[i]); //и вот тут замкнуло...но по другому никак)
     if(i>n+4) goto exit;//потерялись 4 элемента...
     }

    лаба..сдам на следующей неделе, в надежде что у препода произойдёт переполнение и поставит, всё-таки всё работает =)

    aelaa, 17 Ноября 2010

    Комментарии (7)
  3. C++ / Говнокод #4628

    +183

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    bool or(bool x1, bool x2) {
    	if (x1 || x2)
    		return true;
    	else
    		return false;
    }

    Я РЕАЛЬНО видел такой код, написанный на полном серьёзе.

    Alever, 14 Ноября 2010

    Комментарии (40)
  4. C++ / Говнокод #4625

    +163

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    long Date :: ConvertToDays()
        {
            int M=0,Y=0;
            for(int i=2;i<=m_Year;i++) 
            {
                if((i%4 == 0) && (i%100 !=0) || (i%400==0))Y+=366;
                else Y+=365;
            }
            for(i=2;i<=m_Month;i++){
                if (i == 1)M=0;else
                if ((((m_Year%4 == 0) && (m_Year%100 !=0) || (m_Year%400==0)) && (i == 3)))M+=29;else
                if ((((m_Year%4 != 0) || ((m_Year%100 ==0) && (m_Year%400 !=0))) && (i == 3)))M+=28;else
                if ((i == 2) || (i == 4) || (i == 6)  || (i == 8) || (i == 9) || (i == 11))M+=31;else
                if ((i == 5) || (i == 7) || (i == 10) || (i == 12))M+=30;
            }
            return m_Day+M+Y;
        }

    Взято с forum.xakep.ru

    psina-from-ua, 14 Ноября 2010

    Комментарии (21)
  5. C++ / Говнокод #4624

    +159

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    41. 41
    int makedata(int id,int part,void *d,int datalen,void *buf)
    {
        //packet struct :
        // code = short int, lenght = shotr int, id = int, numofpart = int, data = 1024
    
        int packlen = sizeof(short int)*2 + sizeof(int)*2 + datalen;
        char *tbuf = new char [packlen];
        char* tbufptr = tbuf;
        *((short int *)tbufptr) = data;  //first field
        (short int *)tbufptr++;
        *((short int *)tbufptr) = packlen;  //second field
        (short int *)tbufptr++;
        *((int *)tbufptr) = id;
        (int *)tbufptr++;
        *((int *)tbufptr) = part;
        (int *)tbufptr++;
        *((short int *)tbufptr) = datalen;
        (short int *)tbufptr++;
        memcpy((void*)tbufptr,d,datalen);
    
        buf=tbuf;
        return packlen;
    }
    
    fileinfo* getask(void *b)
    {
        fileinfo *fi = new fileinfo();
        char *bufptr = (char*)b;
        (short int*)bufptr++;
        short int plen = *((short int*)bufptr);
        (short int*)bufptr++;
        fi->numofpart = *((int*)bufptr);
        (int*)bufptr++;
        fi->filelenght = *((int*)bufptr);
        (int*)bufptr++;
        int filelen = plen-(bufptr-(char*)b);
        fi->filename = new char[filelen];
        strncpy(fi->filename,bufptr,filelen);
    
        return fi;
    }

    Вместо того, что бы воспользоваться структурой, забиваем всё ручками.

    KoirN, 14 Ноября 2010

    Комментарии (6)
  6. C++ / Говнокод #4614

    +160

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    int m[3][3]={
    {1, 6, 7},
    {2, 5, 8},
    {3, 4, 9}};
    int tmp[3]={m[0][0],m[0][1],m[0][2]}; m[0][0]=m[1][0];m[0][1]=m[1][1];m[0][2]=m[1][2]; m[1][0]=tmp[0];m[1][1]=tmp[1];m[1][2]=tmp[2];

    Программа меняет местами 2 строки

    qbasic, 13 Ноября 2010

    Комментарии (9)
  7. C++ / Говнокод #4612

    +160

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    for( int b = 0; b < cntblocket; ++b )
    {
        delete msrLst[b]->record;
        delete msrLst[b]->record;
    }

    Сразу вспоминается: "- А зачем у вас тут два одинаковых jump'а стоять? - А вдруг один не сработает?"

    Видимо, совсем не выспался программист ;)

    ftptrash, 13 Ноября 2010

    Комментарии (11)
  8. C++ / Говнокод #4608

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    char* setw_c(int width, char* str, const char align){
        width = width - strlen(str) / 2; 
    
        if (align == 'l'){
            std::cout << str;
            if (width > 0)
                for (int i = 0; i < width - 1; i++)
                    std::cout << " ";
    		return " ";
        } else {
            if (width > 0)
                for (int i = 0; i < width; i++)
                    std::cout << " ";
    		return str;
        }
    }

    вот так коряво я решил проблему с setw(), кириллицей и utf-8.
    strlen() - чуть ли не единственная функция из cstring, более-менее нормально работающая с кириллицей в utf-8, да и то возвращает не реальную длину, а в два раза бОльшую, т.к. в utf-8 символ кириллицы занимает 2 байта, вместо одного, чего эта функция не учитывает.

    bugaga_, 13 Ноября 2010

    Комментарии (8)
  9. C++ / Говнокод #4604

    +163

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    std::vector<double> WBuffer;
    std::vector<double> CleanWBuffer;
    std::vector<Color> PixelBuffer;
    std::vector<Color> CleanPixelBuffer;
    
    void Scene3D::ClearBuffers()
    {
            const size_t n = static_cast<size_t>(ScreenSize[0] * ScreenSize[1]);
    
            memcpy(&*(WBuffer.begin()), &*(CleanWBuffer.begin()), n * sizeof(*(WBuffer.begin())));
            memcpy(&*(PixelBuffer.begin()), &*(CleanPixelBuffer.begin()), n * sizeof(*(PixelBuffer.begin())));
    }

    Быстрая очистка буферов.
    CleanWBuffer предварительно заполнен 0.0, CleanPixelBuffer предварительно заполнен нужным цветом.

    Можно было воспользоваться std::fill, но оно работает в несколько раз дольше.


    Пришлось так вот лезть в потроха std::vector. Доставляют подряд идущие & и *.

    burdakovd, 12 Ноября 2010

    Комментарии (39)
  10. C++ / Говнокод #4602

    +157

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    void Scene3D::DrawTriangle(const Point3D &A, const Point3D &B, const Point3D &C, const Color& color)
    {
            // ---------------------------------------------------------------------------------------
            // вспомогательные вычисления
            // нормаль
            const Vector3D& n = (B - A) ^ (C - A);
    
            // ...
    
            // центр треугольника
            const Point3D& medium = (A + B + C) / 3.0;

    Руки как-то привыкли const TypeName& variableName набирать в определении параметров методов.
    И случайно набралось такое (строки 6, 11)

    Операторы (+, -, ^, /) над векторами возвращают Vector3D, не const Vector3D&.

    Заметил только через полгода, и всё это время оно почему-то работало, и даже ворнингов не было.

    Но такое ведь не должно работать!
    Результат вычисления в правой части присваивания структура, то есть она возвращается в стеке. Если бы я присвоил её какой-то локальной переменной, для которой выделена память в стеке текущей функции, то она бы перед удалением скопировалась в локальную переменную. А так получается что ссылка (n, medium) указывает куда-то на стек, где временно хранится возвращенное оператором значение. И при следующем вызове любой функции эта область стека должна перезаписаться.

    burdakovd, 12 Ноября 2010

    Комментарии (7)