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

    −3

    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
    #include "pch.h"
    #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    int main()
    {
    	setlocale(LC_ALL, "rus");
    	int a,b,c;
    	double X1, X2;
    	cout << "Введите число a:" << endl;
    	cin >> a;
    	cout << "Введите число b:" << endl;
    	cin >> b;
    	cout << "Введите число c:" << endl;
    	cin >> c;
    	cout << "Получилось выражение:\n" <<a<<"x^2+"<<b<<"x+"<< c <<"=0"<<endl;
    	cout << "Дискриминант равен:\nD=b^2*4*a*c="<< (b*b)*4*a*c << endl;
    	X1 = (-b + abs(b*b))/2*a;
    	X2 = (-b - abs(b*b))/2*a;
    	cout<<"Корни уравнения равны:"<<endl;
    	cout << "X1=" << X1 << endl;
    	cout << "X2=" << X2 << endl;
    }

    Прога для нахождения корней квадратного уравнения. (Я просто новичок которому нехер делать).

    Запостил: MaRLiN, 18 Сентября 2018

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

    • Советую сходить на acmp.ru или на e-olymp.com
      Ответить
    • # (b*b)*4*a*c
      (b*b)-4*a*c

      # X1 = (-b + abs(b*b))/2*a;
      X1 = (-b + sqrt((b*b)-4*a*c))/2*a;

      # X2 = (-b - abs(b*b))/2*a;
      X2 = (-b - sqrt((b*b)-4*a*c))/2*a;
      Ответить
      • Ипатьевский монастырь.
        Ответить
        • Надо бы святой водой окропить этот код, а то чем-нибудь заразимся и будем писать такие же вореции вместо кода.
          Ответить
      • > X1 = (-b + sqrt((b*b)-4*a*c))/2*a;
        X1 = (-b + sqrt((b*b)-4*a*c))/(2*a);
        или
        X1 = (-b + sqrt((b*b)-4*a*c))/2/a;

        fixed
        Ответить
        • Море скобок, то ли дело J:
          x1 =: -:a%~b-~%:(*:b)-4*a*c
          x2 =: -:a%~-b+%:(*:b)-4*a*c
          Ответить
          • икс один – это половина делённого на а вычитания бэ из корня квадратного из разности квадрата бэ и четырех умноженного на а умноженного на цэ
            икс два – это половина делённого на а арифметического отрицания суммы бэ и корня квадратного из разности квадрата бэ и четырех умноженного на а умноженного на цэ
            Ответить
    • Что за "pch.h"?
      Ответить
      • precompiled header
        Ответить
      • Костыль для языка, в который в 2018 году ещё не завезли модульность.
        Ответить
        • а в каком языку есть хороший модульность?

          только чур говорите про мейнстримы, про такие на которые можно за доширак писать
          Ответить
          • В "PHP" её вообще нет. Там всё включено по умолчанию. Именно поэтому я за "PHP".

            Модульность есть в Java, в C#, в Delphi.
            Ответить
            • Даже в Питоне есть нормальные модули.
              Ответить
            • что такова есть в C# чево нету в C++?
              Ответить
              • Там на два плюсика больше.
                Ответить
              • Я же написал: модульность. Слово "using", которое вытаскивает определения функций из скомпилированных модулей.

                C++ использует костыль, доставшийся от Си: препроцессор по каждому упоминанию #include включает в твой исходник куски чьих то чужих исходников с определениями функций и компилирует эти определения по миллиону раз. Precompiled headers -- это кэш для такой компиляции, но всё равно это костыль.
                Ответить
                • Ничего не понял. Переведи под экосистему "PHP".
                  Ответить
                  • В PHP тоже есть namespaces.

                    Говен, ты их используешь?
                    Ответить
                    • Терпеть не могу это говно - надо написать функцию "__autoload" под свою структуру проекта, в код привносится некоторая неясность... Куда проще прописать "include".
                      Ответить
                    • Namespaces используются только в новых фреймворках, а фреймворки не нужны. На "PHP" можно писать, как тебе нравится, в отличие от "Java", которая заставляет использовать ненужное ООП.
                      Ответить
                      • >>>"На "PHP" можно писать, как тебе нравится"

                        Но быдло считает, что это плохо и что влажная "Java" дисциплинирует.
                        Ответить
                        • Кста, на джаве легко можно написать неподдерживаемый код с шестью уровнями наследования, каждый из которых добавляет восемь методов и переписывает три из предыдущих
                          Ответить
                          • Ничего не понял. Покажи на примере "PHP".
                            Ответить
                            • Про слово "class" в "PHP" слышал?
                              Ответить
                              • Читал.
                                Ответить
                                • Ну вот на "PHP" можно натворить примерно то же самое, что и на "Java". Кстати, в обоих языках есть слово "final", которое запрещает наследование.
                                  Ответить
                                  • В нормальных языках наследование запрещено по умолчанию
                                    Ответить
                                  • Я даже не знаю, что такое наследование - просто программирую в процедурном стиле и теку.
                                    Ответить
                • using открывает namespace, верно?
                  ну вот в С++ тоже есть namespaces.

                  >> #include
                  Вот, это уже ближе к телу: C# умеет дергать структуры из .dll (как и java из .class) а C++ делать этого не умеет.

                  Так что если ты написал полезную библиотеку "libpituh" и решил ее мне отдать, то в случае c# мне хватит pituh.dll, в случае java pituh.jar (с одним файлом pituh.class), а в случае C++ мне нужны pithuh.h и (в зависимости от копелятора и способа линковки) .so, .lib или .a.

                  Правильно-ли я понимаю что если бы .h мне был не нужен, то можно было бы сказать что у С++ есть модульность?
                  Ответить
                  • Суть модульности в том, что когда ты "инклудишь" модуль, тебе в область видимости не протекают автоматически все его зависимости, как это сейчас происходит с заголовочными файлами в с++. Это самая главная фича. А сколько там файлов в модуле и как он оптимизирован-кеширован - это детали реализации.
                    Ответить
                    • >>Суть модульности в том, что когда ты "инклудишь" модуль, тебе в область видимости не протекают автоматически все его зависимости

                      В таком случае и в С++ при использовании неймспейсов этого не просиходит, нет?
                      Ответить
                      • Нет. В С++ когда ты инклудишь <fmt/format.h> (*), тебе автоматически становятся доступны std::string, std::sort, std::sqrt и все остальное добро, которое инклудится в этом заголовочном файле. В языках с модулями это работает не так.

                        * Речь в моем примере вот об этой библиотеке https://github.com/fmtlib/fmt/blob/master/include/fmt/format.h
                        Ответить
                        • >> тебе автоматически становятся доступны std::string
                          Однако под своими namespaces, правильно?

                          То есть проблема в том, что ты становишься счастливым обладателем того говна что наинклудилось в .h. Это действительно плохо.
                          Ответить
                          • В "PHP" тоже также.
                            Ответить
                            • Я понял. В серьезных языках вроде С++ и PHP модульности нет, а в жабах и питонах есть потому что это языки глупые
                              Ответить
          • Рекомендую "PHP". Про модульность не могу утверждать точно, так как данный язык многогранен; но в целом он охуенен.
            Ответить
    • И, кстати, где проверка дискриминанта? Два тебе по алгебре. Завтра с родителями в школу, будем говорить о твоей успеваемости.
      Ответить
      • А зачем его проверять, если он корень не извлекает?

        Чел открыл нестандартный метод решения уравнений, а ты ему про какую-то школьную хуйню.
        Ответить
      • Еще проверки на a = 0 нету
        Ответить
    • З.Ы. Лол, там ещё и деление целочисленное. Кто там говорил, что кресты первым языком нормально заходят?)
      Ответить
      • То ли дело Паскаль.
        Ответить
        • Поэтому я за "PHP".
          Ответить
          • Проверим... И правда, "PHP" выполняет не целочисленное деление, а приводит к плавающему питуху: 3/2 == 1.5.
            https://ideone.com/oP27PP
            Ответить
        • Кстати, да. В Паскале для целочисленного деления выбрали отдельный оператор (div вместо /).

          В Бейсике тоже был отдельный оператор (\ вместо /).
          Ответить
      • Да ладно, об это и в питоне можно споткнутся.
        Ответить
      • Именно поэтому плюсы должны быть первым языком, чтобы ньюфаги понимали куда попали. Что программирование - это не "алгоритмы", "прикладная математика" и "архитектура", а фигурное ковыряние в говне.
        Ответить
        • тогда их лучше сразу сажать поддерживать небольшой сайт на PHP4 без VCS
          Ответить
    • Ну да, где-то читал такое... Мол программирование - это просто, надо просто быть не брезгливым и внимательным? А напишите хотя бы решение квадратного уравнения. Элементарная школьная задача. Формулу, небось, еще помните. Ну, предположим, что вы, конечно же, не забыли проверить знак дискриминанта. А то, что a может быть равно 0? А b? Надеюсь, вы не сравниваете флоаты с помощью "==". Но как вы выбрали порог? 0.000001 достаточно или много? А вдруг у нас все коэффициенты такого порядка? Это к дискриминанту тоже может относиться, кстати. И вот еще: вот мы вычитаем b2-4ac. А если эти значения большие, но близкие? Какая будет погрешность разницы? Да и вообще, какая погрешность результата, оценили?
      Ответить
      • Я придумал:
        sqrt_D = (abs(b) - 2 * sqrt(abs(a*c))) * (abs(b) + 2 * sqrt(abs(a*c)));

        Так потеря точности будет меньше, ведь теперь перед вычитанием мы не возводим уменьшаемое и вычитаемое в квадрат? Или будет та же фигня?
        Ответить
        • Просто D, конечно. Сам не помню, почему написал sqrt_D.
          Ответить
      • > Но как вы выбрали порог? 0.000001 достаточно или много? А вдруг у нас все коэффициенты такого порядка?
        Я давно думал над этим. Допустим, нужно 8 знаков мантиссы после запятой. Напишем так:
        abs(a - b) < 1e-8 * max(abs(a), abs(b))

        А вдруг у нас a и b настолько маленькие, что порядок 1e-8 * abs(a) выйдет за допустимые для типа пределы и случится underflow, т. е. фактически получится ноль?
        Ответить
      • Я не понимаю, зачем нужна эта формула, если есть метод ньютона (или бинарный поиск на крайний случай).
        Ответить
        • А на каком отрезке будешь искать (если бинарный поиск)? Какое стартовое значение брать (если метод Ньютона)? Когда останавливаться? А вдруг метод Ньютона зациклится?
          Ответить
          • > Какое стартовое значение брать

            А это имеет значение? Бери любое. Нуль возьми. Второй корень из формулы Виета посчитаешь.

            > А вдруг метод Ньютона зациклится?

            Ну в теории метод ньютона УДВАИВАЕТ число правильных знаков на каждой итерации. Поэтому поставь лимит на число итераций (log_2 64 + 1, ну или 64 для верности), и будет тебе счастье.
            Ответить
            • > Нуль возьми.
              А если у меня уравнение x² - 16 = 0? Взял нуль — а там касательная горизонтальна, получил бесконечность, кровь-кишки.
              Ответить
              • Да, ты прав. Нельзя просто так взять и решить квадратное уравнение.
                Ответить
          • Переведи на "PHP".
            Программист не обязан знать математику
            Ответить
        • Я не понимэ, зойчем считать в сыкле, если есть маленькая и няшная страна формула?
          Ответить
          • Потому что cходящиеся итеративные процессы зачастую дают более точные результаты, чем маленькие и няшные, но неустойчивые, формулы.
            Впрочем, тут я не иксперт, из своего опыта численных методов я понял только то, что это чёрная магия, и надо пользоваться только проверенными заклинаниями.
            Ответить
    • > cout << "Получилось выражение:\n" <<a<<"x^2+"<<b<<"x+"<< c <<"=0"<<endl;
      Почуму плюсовички так любят cout? Ведь printf со своей строкой формата гораздо красивше и удобне.
      Ответить
      • cout без проблем может выводить структуры и т.п., а printf только макросами можно расширить...

        З.Ы. Но все эти std::hex << std::setw(10) << std::setfill('0') << x действительно выглядят по-уебански.
        Ответить
        • Поэтому я за "PHP".
          Ответить
        • Ну и типобезопасность. В Qt вот семейство функций arg специально для этого:
          QString("My name is %2 %3, I have %1 cm,").arg(22).arg("Steve", "Brown")
          Ответить
      • Потому что если убрать cout, то в этой программе от крестов ничего не останется.
        Ответить

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