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

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
#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 MaRLiN, (Updated )

Комментарии (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
      Ответить
        • икс один – это половина делённого на а вычитания бэ из корня квадратного из разности квадрата бэ и четырех умноженного на а умноженного на цэ
          икс два – это половина делённого на а арифметического отрицания суммы бэ и корня квадратного из разности квадрата бэ и четырех умноженного на а умноженного на цэ
          Ответить
    • Костыль для языка, в который в 2018 году ещё не завезли модульность.
      Ответить
      • а в каком языку есть хороший модульность?

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

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

              C++ использует костыль, доставшийся от Си: препроцессор по каждому упоминанию #include включает в твой исходник куски чьих то чужих исходников с определениями функций и компилирует эти определения по миллиону раз. Precompiled headers -- это кэш для такой компиляции, но всё равно это костыль.
              Ответить
              • 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 тоже есть namespaces.

                  Говен, ты их используешь?
                  Ответить
                  • Namespaces используются только в новых фреймворках, а фреймворки не нужны. На "PHP" можно писать, как тебе нравится, в отличие от "Java", которая заставляет использовать ненужное ООП.
                    Ответить
                    • >>>"На "PHP" можно писать, как тебе нравится"

                      Но быдло считает, что это плохо и что влажная "Java" дисциплинирует.
                      Ответить
                      • Кста, на джаве легко можно написать неподдерживаемый код с шестью уровнями наследования, каждый из которых добавляет восемь методов и переписывает три из предыдущих
                        Ответить
                              • Ну вот на "PHP" можно натворить примерно то же самое, что и на "Java". Кстати, в обоих языках есть слово "final", которое запрещает наследование.
                                Ответить
                                • В нормальных языках наследование запрещено по умолчанию
                                  Ответить
                                • Я даже не знаю, что такое наследование - просто программирую в процедурном стиле и теку.
                                  Ответить
                  • Терпеть не могу это говно - надо написать функцию "__autoload" под свою структуру проекта, в код привносится некоторая неясность... Куда проще прописать "include".
                    Ответить
        • Рекомендую "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 действительно выглядят по-уебански.
      Ответить
      • Ну и типобезопасность. В Qt вот семейство функций arg специально для этого:
        QString("My name is %2 %3, I have %1 cm,").arg(22).arg("Steve", "Brown")
        Ответить
    • Потому что если убрать cout, то в этой программе от крестов ничего не останется.
      Ответить

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

Где здесь C++, guest?!

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


    8