- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 100
#include <iostream>
#include <cmath>
#include <iomanip>
#include "govno.h"
using namespace std;
void prnt_msg_start() {
cout << endl << "Программа решения квадратного уравнения по формуле: ";
cout << "aX^2 + bX + c = 0" << endl;
cout << setprecision(69) << endl; }
long double ks[] = {1, 2, 1, 3, 10, 2};
class SqrtQual {
const string msg_not_roots = "Нет корней!\n",
msg_any_number = "X -- любое число.\n",
msg_special_event = "Решение частного случая (bX + c = 0):\n",
msg_discrim = "Дискриминант = ";
long double A, B, C, D, X1, X2;
bool flag_roots = true, flag_equal_zero, flag_special_event, flag_not_equal_zero,
flag_any_number, flag_input = true, flag_abs_roots, flag_cubes_roots;
void init_fields();
string answer();
bool to_decide();
void to_start();
public:
SqrtQual ();
SqrtQual (int z);
SqrtQual (long double a, long double b, long double c);
};
void variation_task(int variant) {
if (!variant) SqrtQual obj;
else {
for (int i = 0, j = 0; i < 2; i++, j += 3) {
if (variant < 2) SqrtQual obj(ks[j], ks[j+1], ks[j+2]);
else SqrtQual obj(i);
}
}
}
int main() {
prnt_msg_start();
for (int i = 1; i < 3; i++) variation_task(i);
}
SqrtQual::SqrtQual(int z) {
if (z) flag_abs_roots = true;
else flag_cubes_roots = true;
to_start(); }
SqrtQual::SqrtQual() {
to_start(); }
SqrtQual::SqrtQual(long double a, long double b, long double c) {
A = a;
B = b;
C = c;
flag_input = false;
to_start(); }
void SqrtQual::to_start() {
cout << endl;
if (flag_input) Govnokod l_obj(A, B, C);
init_fields();
cout << answer(); }
void SqrtQual::init_fields() {
flag_any_number = ((A == 0) && (B == 0) && (C == 0));
flag_not_equal_zero = ((A == 0) && (B == 0) && (C != 0));
flag_special_event = ((A == 0) && (B != 0) && (C != 0));
bool equal_zero_v1 = ((A == 0) && (B != 0) && (C == 0));
bool equal_zero_v2 = ((A != 0) && (B == 0) && (C == 0));
flag_equal_zero = equal_zero_v1 || equal_zero_v2;
D = B*B - 4*A*C;
if ((D < 0) || flag_not_equal_zero)
flag_roots = false; }
string SqrtQual::answer() {
string tmp = msg_discrim + to_string(D) + "\n";
if (flag_special_event)
tmp = msg_special_event + tmp;
if (flag_any_number)
return msg_any_number;
else if (not flag_roots)
return msg_not_roots;
else {
bool flag_args = to_decide();
string root1("X = "), root2("X2 = ");
if (flag_abs_roots) {
root1 = "| X | = ", root2 = "| X2 | = ";
X1 = abs(X1), X2 = abs(X2);
}
else if (flag_cubes_roots) {
root1 = "X ^3 = ", root2 = "X2 ^3 = ";
X1 = pow(X1, 3), X2 = pow(X2, 3);
}
tmp += root1 + to_string(X1) + "\n";
if (flag_args)
tmp += root2 + to_string(X2) + "\n";
}
return tmp;
}
bool SqrtQual::to_decide() /* if true then two roots else one root */ {
if (flag_equal_zero) X1 = 0;
else if (flag_special_event) X1 = (-C/B); // special event
else if (D == 0) X1 = (-B/2*A);
else {
X1 = ((-B + sqrt(D)) / 2*A), X2 = ((-B - sqrt(D)) / 2*A);
return true; }
return false; }
Немного расширил функционал говнокода с учётом замечаний (в том числе и по архитектуре).
YpaHeLI_ 27.12.2020 12:14 # +1
https://www.meme-arsenal.com/memes/3cbffb268177fe3b23f7aaca6677239e.jpg
guest6 27.12.2020 13:13 # 0
gostinho 28.12.2020 23:25 # 0
bormand 28.12.2020 23:26 # 0
MAKAKA 30.12.2020 01:34 # +2
Хочется najti_naibolshy_obshy_delitel(int, int) ?
1024-- 29.12.2020 00:58 # +3
Подзадачи "получить исходные данные", "посчитать квадратное уравнение", "посчитать питушню, которая использует его корни", "вывести данные" сливаются. Код, связанный с вбрасыванием исходных данных в решатель уравнения, а также связанный с печатью результатов, заставляет изменять код решателя. Но в то же время, алгоритмы вычисления и формулы корней квадратного уравнения в математике не зависят от того, как происходит их ввод и вывод. Это свойство полезно сохранить и в коде. Математические алгоритмы не должны знать о том, откуда появились коэффициенты (от пользователя или из массива) и куда они направляются далее (пользователю или ещё куда).
Я бы подумал над тем, как выделить часть, которая отвечает за решение уравнения, поскольку она является "движком" в данной задаче, на основе которого можно решать эту и сходные задачи пользователя.
Как может выглядеть такой класс?
1. Конструктор принимает коэффициенты через переданные аргументы
2. Есть "математические" методы вида "дискриминант" и "решение уравнения" (количество корней, в т.ч. бесконечность и сами корни). Может быть, "дискриминант", "количество корней", "корень n" (n=0 или 1). Они позволяют получить число и использовать его в программе далее.
3. Может быть, операторы ввода из потока и вывода в поток, но не факт, что они нужны в самом классе.
Может быть, для решения квадратного уравнения не нужен класс, достаточно только функции. Она принимает коэффициенты и возвращает решение в каком-то виде.
Остальной код будет строиться на использовании решателя квадратного уравнения, например:
bormand 29.12.2020 09:54 # +1
gostinho 29.12.2020 12:11 # 0
bormand 29.12.2020 14:01 # 0
Мартыwка к старости слаба глазами стала?
То не на тот коммент ответит, то кого-нибудь лишнего в уёбки запишет.
Desktop 29.12.2020 14:03 # 0
bormand 29.12.2020 14:26 # +1
1024-- 29.12.2020 21:04 # +1
gost 29.12.2020 21:11 # 0
Ты давно бормандскую диссертацию закончил?
1024-- 29.12.2020 21:39 # 0
bormand 30.12.2020 01:29 # 0
Как там в соседнем треде -- надо одеться приличнее, какую-нибудь цепочку нацепить, походить в качалку и потренироваться на кошках.
bormand 29.12.2020 23:49 # +1
Х.з., я бы госту передал это почётное бремя. Он и нгк подхватил и стандарт цитирует вместо меня и на аниме подсел. Идеальный кандидат.
gost 29.12.2020 23:53 # 0
Отрицаю.
CHayT 30.12.2020 00:51 # +2
bormand 30.12.2020 00:52 # +1
bootcamp_dropout 29.12.2020 23:53 # 0
bormand 30.12.2020 01:10 # 0
bootcamp_dropout 30.12.2020 02:07 # +4
bormandinho 03.01.2021 12:24 # 0
guest3 03.01.2021 15:44 # 0
CBuHOKYP 03.01.2021 16:40 # 0
1024-- 29.12.2020 20:59 # 0
> норм получается
Пара комментариев на ГК не считается, надо целый семестр продержаться.
bormand 29.12.2020 23:23 # 0