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

    +166

    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
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    int32 chance; 
    	
    if (SkillValue <= 115)
    {
        chance = 100;
    }
    
    else if (SkillValue > 115 && SkillValue <= 150)
    {
        chance = 50;
    }
    
    else if (SkillValue > 150 && SkillValue <= 170)
    {
        chance = 33,33;
    }
    
    else if (SkillValue > 170 && SkillValue <= 190)
    {
        chance = 25;
    }
    
    else if (SkillValue > 190 && SkillValue <= 215)
    {
        chance = 20;
    }
    
    else if (SkillValue > 215 && SkillValue <= 235)
    {
        chance = 16,67;
    }
    
    else if (SkillValue > 235 && SkillValue <= 260)
    {
        chance = 14,29;
    }
    
    else if (SkillValue > 260 && SkillValue <= 280)
    {
        chance = 12,5;
    }
    
    else if (SkillValue > 280 && SkillValue <= 325)
    {
        chance = 11,11;
    }
    
    else if (SkillValue > 325 && SkillValue <= 365)
    {
        chance = 10;
    }
    
    else if (SkillValue > 365 && SkillValue <= 450)
    {
        chance = 9,09;
    }
    
    else if (SkillValue > 450 && SkillValue <= 500)
    {
        chance = 11,11;
    }
    
    else if (SkillValue > 500)
    {
        chance = 10;
    }

    Формулы? Нет, не слышал.

    Запостил: chaoswithin, 27 Августа 2011

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

    • Запятые вместо десятичной точки тоже радуют.
      Ответить
      • есть такой оператор, не слышали?
        Ответить
        • Мдя ... видимо не слышали.
          Ну, проверьте код тогда и RTFM не забывайте.
          int a,b;
          a = 10,20;
          b = (10,20);
          printf( "a=%d; b=%d\n", a, b);

          В исходном ГК ошибка будет только в 55 строке из-за интерпретации восьмеричного числа.
          Ответить
          • При чем тут оператор запятая?
            Ответить
            • а при чем тут десятичная точка, если тип целый?
              Ответить
              • Раньше это было в виде формулы в одну строчку и тип int32, но формула изменилась и не обремененный мозгом автор сменил все на лестницу if'ов. А тип он видимо забыл сменить на double.
                Надо было сразу запостить пояснение.
                Ответить
                • надо сначала код компилябельный сделать, а потом уже рассуждать о double'ах.
                  P.s. а пояснения всегда приветствуются.
                  Ответить
            • При том, что запятая есть в исходном говнокоде.
              chance = 16,67;
              интерпретируется как
              chance = 16,
              67;

              То есть 67 — это не дробная часть, а висящее выражение.
              Точно так же можно вместо
              if(x) { doA; doB; doC; }
              писать
              if(x) doA, doB, doC;


              Заголовок оператора for уже никто не помнит?
              Ответить
              • Я смотрю, здесь местный слёт кэпов...
                Ответить
              • Вот что за люди? Несут чушь с умным видом и все ведутся.
                Нихрена ж не так. Вот пруф из талмуда.
                5.18/1
                The type and value of the result are the type and value of the RIGHT operand;
                То есть chance будет равен 67, а никак не 16. Учим матчасть, в общем....
                Ответить
                • так везде. в т.ч. и в перл
                  Ответить
                • А - БЛЯ. Сам чушь написал, тут же assignment, зараза. Все верно, афтор. Пошел учить матчасть сам.
                  Ответить
          • Оператор запятая нельзя использовать как замену десятичной точки.
            При его применении нет разницы между:
            66.7 и 66.07.
            Ответить
    • с повышением уровня грамотности падает шанс выжить?
      Ответить
    • >Формулы? Нет, не слышал.
      А распределение то дискретное ;)
      ИМХО, если закрыть глаза на запятые, тут больше case будет уместен, по производительности.
      Ответить
    • Если интерполировать функцию, то нифига прироста производительности не будет, скорее будет только медленнее из-за кучи умножений и делений. А вот загнать всё это в сортированный вектор и бинарным поиском вычислять chance может быть не лишним, на крайняк - кусочно-линейно интерполировать в промежутках.
      Ответить
    • А почему минус? Тут, даже если именно таким способом делать - половина условий лишние...
      Ответить
      • Плюсанул. Тут можно было сделать так (без else):
        if (SkillValue <= 115)
        {
            chance = 100;
        }
        
        if (SkillValue > 115 && SkillValue <= 150)
        {
            chance = 50;
        }

        Но тогда будут лишние проверки. Поэтому рациональнее так:
        if (SkillValue <= 115)
        {
            chance = 100;
        }
        
        else if (SkillValue <= 150)
        {
            chance = 50;
        }

        То есть пользуясь только неравенствами в одну сторону: либо все «меньше», либо все «больше». Тогда и конъюнкция не нужна.

        Хотя вообще тут можно было свернуть, используя цикл и массив либо формулу.
        Ответить
      • Вы имеете в виду, что расположив условия в обратном порядке, мы смогли бы избавиться от <=?
        Ответить
        • Тут два варианта. Если сохранить порядок, то остаются только условия с <=, если поменять порядок на обратный, то остаются только условия с >.
          Волшебное слово else уже отсекает часть условий, поэтому дублирование не нужно.
          Ответить
    • Чуть не забыл. Вопрос № 1: где здесь C++?
      Ответить
    • Понравилось, спасибо.
      Ответить

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