Перегрузка оператора 7897 - PullRequest
0 голосов
/ 23 апреля 2020

include #include #include #include #include с использованием пространства имен std; / * уравнение qudrati c имеет вид A X ^ 2 + B X + C = 0. В приведенном выше Уравнения A, B, C являются постоянными. Х является переменной. Пожалуйста, посмотрите мое видео о квадратичных c уравнениях, чтобы узнать о них больше. Когда A = 0, уравнение становится линейным как B * X + C = 0. И, конечно, и A, и B равны нулю, уравнения не существует. Подробнее о квадратичных c уравнениях: решение квадратичного c уравнения Ax2 + Bx + C = 0 может быть вычислено с использованием квадратичных c формул: X1 = (-B + (B ^ 2 - 4 *) A *C) ^ 0,5) / (2 * A) или X2 = (-B - (B ^ 2 - 4 * A *C) ^ 0,5) / (2 * A) Эти формулы могут использоваться, конечно, только если ведущий коэффициент А не равен нулю. При A = 0 уравнение адаптируется к линейной форме. Количество и тип решения определяется значением выражения под квадратом root (степень ½), B ^ 2 - 4 * A C, также известным как дискриминант. В приведенной ниже таблице описаны различные возможные решения, связанные со значением дискриминанта. ================================================== =================== Значение различного количества решений Характер решений ====================== ======================================================= Положительный 2 Real Zero 1 Real Negative 2 Воображаемый ================================================ =========================== Воображаемое решение будет иметь вид X1 = a + (I ) b ..... ........ уравнение X2 = a - (I *) b .............. уравнение2 В математике I = (-1) ^ 0,5 или квадрат root из - 1. Поскольку язык программирования не предоставляет мнимых чисел и средства для их вывода, вам придется предпринять соответствующие шаги для получения мнимых результатов в форме, показанной в выходных данных основной функции и соответствующих функций-членов. Просто помните, что пара действительных чисел определяет каждое воображаемое число. X1 и X2 в Eq1 и Eq2, а является действительной частью. (I *) b - мнимая часть, но b - обычное действительное число. И a, и b являются числами с плавающей точкой. Класс хранит значения A, B, C являются членами данных (см. Описание). если A не ноль, то уравнение всегда является квадратичным c уравнением. Если A = 0 и B! = 0, то уравнение является линейным уравнением. Тогда уравнение будет: B * X + C = 0 И одно линейное решение будет X = -C / B [Оба C и B являются целыми числами, поэтому приведение числителя или знаменателя к двойному типу потребуется для получения коэффициент с плавающей запятой. Если и A, и B равны нулю, тогда уравнения не существует.

Класс имеет конструкторы и функции-члены для поиска корней квадратичной c формы и решения линейной формы. Вы НЕ обязаны писать основную функцию, но настраиваете все функции-члены класса, так что предоставленная мной основная дает результат, который производит моя программа. Описание каждого члена класса описано в комментариях, чуть выше объявления члена. / class Quadratic {private: / Коэффициент X квадрат. Может быть ноль. В этом случае уравнение может быть линейным, но если B также равно нулю, то уравнения не существует. / int A; / Коэффициент X. Может быть ноль. если A также равен нулю, то уравнения нет. / int B; / Константа. Может быть нулевым, положительным или отрицательным. / int C; / isLinear получает истинное значение, если A = 0, но B! = 0. Он получает ложное значение, если уравнение имеет квадратичное значение c. / bool isLinear; / isEquation получает истинное значение, если уравнение, образованное A, B, C, является либо квадратичным c, либо линейным. В противном случае он получает ложное значение. / bool isEquation; publi c: / Конструктор по умолчанию: устанавливает A, B и C в ноль, а isLinear и isEquation в false. / Quadrati c (); / Явный конструктор: Сначала инициализируется члены данных класса A, B и C в in_a, in_b и in_ c соответственно. Затем правильно устанавливает isLinear и isEquation в true или false в зависимости от значений A, B и C. / Quadrati c (int in_a, int in_b, int in_ c); / возвращает A, коэффициент X ^ 2. Это всего лишь одна строка кода. / int getCeffXSquare () const; / возвращает B, коэффициент X. Это всего лишь одна строка кода. / int getCoeffOfX () const; / Класс имеет конструкторы и функции-члены для поиска корней квадратичной c формы и решения линейной формы. Вы НЕ обязаны писать основную функцию, но настраиваете все функции-члены класса, так что предоставленная мной основная дает результат, который производит моя программа. Описание каждого члена класса описано в комментариях, чуть выше объявления члена. / class Quadratic {private: / Коэффициент X квадрат. Может быть ноль. В этом случае уравнение может быть линейным, но если B также равно нулю, то уравнения не существует. / int A; / Коэффициент X. Может быть ноль. если A также равен нулю, то уравнения нет. / int B; / Константа. Может быть нулевым, положительным или отрицательным. / int C; / isLinear получает истинное значение, если A = 0, но B! = 0. Он получает ложное значение, если уравнение является квадратичным c. / bool isLinear; / isEquation получает истинное значение, если уравнение, образованное A, B, C, является либо квадратичным c, либо линейным. В противном случае он получает ложное значение. / bool isEquation; publi c: / Конструктор по умолчанию: устанавливает A, B и C в ноль, а isLinear и isEquation в false. / Quadrati c (); / Явный конструктор: Сначала инициализируется члены данных класса A, B и C в in_a, in_b и in_ c соответственно. Затем правильно устанавливает isLinear и isEquation в true или false в зависимости от значений A, B и C. / Quadrati c (int in_a, int in_b, int in_ c); / возвращает A, коэффициент X ^ 2. Это всего лишь одна строка кода. / int getCeffXSquare () const; / возвращает B, коэффициент X. Это всего лишь одна строка кода. / int getCoeffOfX () const; / возвращает C, константу. Это всего лишь одна строка кода. / int getConstant () const; / Описание функции-члена getRealRoots: если дискриминант = B ^ 2 - 4 * A *C> = 0, то уравнение имеет реальные корни. Если дискриминант> 0, то root1 и root2, возвращаемые по ссылке, имеют два действительных значения. Используйте эти два уравнения, чтобы найти root1 и root2. [Необходима обе формы C ++] root1 = (-B + (B ^ 2 - 4 * A *C) ^ 0.5) / (2 * A) root2 = (- B - (B ^ 2 - 4 * A *C) ^ 0.5) / (2 * A) Если дискриминант = 0, то root1 = root2 и корни имеют действительное значение. В этом случае root = (-B) / (2 * A) Но B, 2 и A являются целыми числами. Вам нужно привести хотя бы операнд к типу double, чтобы получить с плавающей точкой root / void getRealRoots (double & root1, double & root2) const; / Описание функции-члена getRealPartAndImagPart: Когда дискриминант или B ^ 2 - 4 * A *C <0, тогда решение является комплексным числом. Вы можете прочитать о комплексных числах по ссылке ниже: <a href="https://en.wikipedia.org/wiki/Complex_number" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/Complex_number В root будет содержаться действительная часть (называемая вещественной), которая задается как действительная = (-B) / (2 * A) Но оба B, 2 и A являются целыми числами. Вам нужно привести хотя бы операнд к типу double, чтобы получить значение с плавающей точкой для Real. Мнимая часть Imag вычисляется следующим образом: Imag = sqrt (abs (дискриминант)) / (2 * A). / void getRealPartAndImagPart (double & Real, double & Imag) const; / Описание функции-члена toString: это будет самая трудная функция для написания. Я, однако, чувствую, что вы освоите много программирования, освоив эту функцию. Эта функция не может быть завершена за один сеанс написания кода, и вам, возможно, придется написать значительное количество алгоритма на бумаге, чтобы получить практические навыки со всеми его движущимися частями. Весь вывод в этой функции выполняется для объекта ostringstream. У вас была практика с этим в прошлой лаборатории. Все ссылки на ostringstream, представленные в прошлой лаборатории, все еще очень полезны в этом случае. Моя функция tostring имеет около 101 строки кода. Я не говорю, что это не может быть сделано в меньшем количестве строк, но это то, что я имею в данный момент. Это, конечно, включает в себя {и} наличие своих собственных и пустых строк. Функция возвращает строку, которая содержит уравнение, а затем его корни, будь они действительными, комплексными числами или линейными. Или функция вернет строку, в которой нет уравнения, если его нет. Вывод нашей основной функции является яркой демонстрацией того, как эта функция работает. Мы просто приведем несколько примеров кода и вывода здесь. Для отдыха вы должны порыться в коде основной функции и вывести ее из основной функции. ======================= Код ------------------- Quadrati c Q1 (2 -5, -3); соиЬ / оператор друга bool! = (Const Quadrati c & left, const Quadrati c & right); / Stati c функция-член GCD возвращает GCD целых чисел a и b. Он использует алгоритм Евклида. Ссылка на алгоритм Евклида ниже https://en.wikipedia.org/wiki/Euclidean_algorithm Это может быть сложно или легко в зависимости от вашего предыдущего математического фона. Эта функция будет использоваться внутри перегруженного оператора == * / stati c int GCD (int a, int b);}; Quadrati c :: Quadrati c () {} Quadrati c :: Quadrati c (int in_a, int in_b, int in_ c) {} int Quadrati c :: getCeffXSquare () const {throw "To be complete";} int Quadrati c :: getCoeffOfX () const {throw "Будет завершено";} int Quadrati c :: getConstant () const {throw "To be complete";} void Quadrati c :: getRealRoots (double & root1, double & root2) const {} void Quadrati c :: getRealPartAndImagPart (double & Real, double & Imag) const {} const string Quadrati c :: toString () const {throw "To be complete";} const Quadrati c оператор + (const Quadrati c & left, const Quadrati c & right) {throw "To be complete";} const Quadrati c operator - (const Quadrati c & left, const Quadrati c & right) {throw "To be завершено ";} const Quadrati c оператор (множитель int, const Quadrati c & Original) {throw" To be complete ";} двойной квадратик c :: Valu e (double IN_X) const {throw "Быть завершенным"; } int Quadrati c :: GCD (int a, int b) {бросить "будет завершено";} оператор bool == (const Quadrati c & left, const Quadrati c & right) {throw "to complete ";} оператор bool! = (const Quadrati c & left, const Quadrati c & right) {throw" to complete ";} / Как только вы заполните тело функций-членов класса и друзей , Используйте основную функцию ниже и убедитесь, что выход соответствует выходу, показанному сразу после основной функции. * / int main (int arg c, const char * argv []) {try {Quadrati c Q1 (2, -5, -3); cout <<p> ================================================ Исходное уравнение : X ^ 2 + X + 1 = 0 Два корня комплексных чисел: X1 = -5.0000e-01 - I * (8.6603e-01) X2 = -5.0000e-01 + I * (8.6603e-01) === =======================================

...