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

    0

    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
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    #include <iostream>
    #include <cmath>
    #include "govno.h"
    using namespace std;
    
    class SqrtQual {
        const string not_kor = "Нет корней!\n";
        long double A;
        long double B;
        long double C;
        long double D;
        void vspomog();
        void konez();
        public:
        void hello();
    } obj;
    
    int main() {
        obj.hello();
    }
    
    void SqrtQual::hello() { 
        cout << "Программа решения квадратного уравнения по формуле: ";
        cout << "aX^2 + bX + c = 0" << endl;
        Govnokod obj;
        A = obj.opros('a');
        B = obj.opros('b'); 
        C = obj.opros('c');                              
        cout << endl;
        konez(); 
    }
    
    void SqrtQual::vspomog() {
        D = B*B - 4*A*C;
        cout << "Дискриминант = " << D << endl;
        
        if (D < 0)
            cout << not_kor;
        
        else if (D == 0)
            cout << "X = " << (-B/(2*A));
        
        else {
            long double dsqrt = sqrt(D);
            cout << "X1 = " << ((-B + dsqrt) / 2*A) << endl;
            cout << "X2 = " << ((-B - dsqrt) / 2*A) << endl;
        }        
    }
    
    void SqrtQual::konez() {
        bool any_digit = ((A == 0) 
                      and (B == 0) 
                      and (C == 0));
        
        bool not_equal_zero = ((A == 0) 
                           and (B == 0) 
                           and (C != 0));
        
        bool equal_zero_v1 = ((A == 0) 
                          and (B != 0) 
                          and (C == 0));
        
        bool equal_zero_v2 = ((A != 0) 
                          and (B == 0) 
                          and (C == 0));
        
        bool equal_zero = equal_zero_v1
                       or equal_zero_v2;
                       
        bool bx_plus_c = ((A == 0) 
                      and (B != 0) 
                      and (C != 0));
        
        if (any_digit) 
            cout << "X -- любое число." << endl;
        
        else if (not_equal_zero) {
            cout << C << " != 0" << endl;
            cout << not_kor; 
        }
        
        else if (equal_zero) 
            cout << "X = 0" << endl;
        
        else if (bx_plus_c) {
            cout << "Решение частного случая (bX + c = 0):" << endl;
            cout << "X = " << (-C/B) << endl;
        }
        
        else vspomog(); 
    }

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

    Запостил: Westnik_Govnokoda, 25 Декабря 2020

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

    • В 41 строке в конце забыл поставить endl.
      Ответить
      • std::endl!

        Два математика в ресторане поспорили, насколько хорошо знают математику большинство людей. Один (пессимист) утверждал, что большинство ее вообше не знает, а другой (оптимист) - что хоть и не много, но знают. Когда пессимист отошел в туалет, оптимист подозвал симпатичную официантку-блондинку и говорит:
        - Когда мой коллега вернется, я задам вам вопрос. Суть не важна.
        Все, что вы должны сделать - это сказать "Треть икс куб".
        - Как-как? Третий скуп? - переспрашивает официантка?
        - Да нет, Треть Икс Куб, Понятно?
        - А-а! Третик скуп? - повторяет официантка.
        - Да, да. Это все о чем я вас прошу.
        Официантка уходит твердя про себя как заклинание фразу "Третик скуп".
        Тут возвращается пессимист. Оптимист говорит - давай спросим у нашей официантки чему равен какой-нибудь простенький интеграл. Пессимист, со смехом соглашается. Оптимист вызывает официантку и спрашивает:
        - Извините, вы не помните чему равен интеграл от x^2 по dх?
        - Треть икс куб... - отвечает официантка.
        Пессимист сильно удивлен, оптимист весело смеется. Официантка отходит на несколько шагов, и обернувшись через плечо добавляет:
        - ... Плюс константа.
        Ответить
        • Где-то слышал версию анекдота, где тем, кто забывал про константу, прописывали в дыню. Хотел процитировать именно её, но не нашёл. Кто-нибудь помнит?
          Ответить
    • Я высказался насчёт архитектуры в соседнем треде.

      1. hello, vspomog, konez - нехорошие имена.
      2. hello, вызывающее konez - странно звучит.
      3. vspomog и konez будут бесполезны везде, кроме этой конкретной версии этой программы. Значения только вводятся из stdin и выводятся в stdout, без ведома пользователя не удастся позаниматься математикой.

      Вопросы на обсуждение:
      1. Как надо переписать код, чтобы решить два квадратных уравнения, коэффициенты которых записаны в long double ks[] = {1,2,1,3,10,2};
      2. Как надо переписать код, чтобы решить два квадратных уравнения и вывести кубы решений для первого и модули решений - для второго?
      3. Как надо переписать код, чтобы подставить в формулу для второго закона Ньютона хотя бы одно решение квадратного уравнения на массу ускоряющейся питушни?
      4. Как надо переписать код, чтобы в случаях 1..3 его так сильно не переписывать?
      Ответить

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