Skip to content

Commit 3db6943

Browse files
committed
добавил функционал в нелинейные уравнения, при запуске происходит моментальный краш, заккоментировал кусок функционала в функции change, так всё работает. Не могу понять в чем там косяк. Отладчик у меня походу сломалсо, потому что выкидывает всегда в дизассемблер... Петя, помоги
1 parent e148ef2 commit 3db6943

7 files changed

+135
-13
lines changed

Frames/integralConstStepFrame.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ private slots:
3535

3636
private:
3737
Ui::IntegralConstStepFrame *ui;
38-
3938
void change();
4039
};
4140

Frames/integralFloatingStepFrame.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
IntegralFloatingStepFrame::IntegralFloatingStepFrame(QWidget *parent) : FrameThreadHelper(parent), ui(new Ui::IntegralFloatingStepFrame)
77
{
88
ui->setupUi(this);
9-
setValidator();
9+
validatorSetup();
1010
setTimeOutUse(true);
1111
change();
1212
}
@@ -18,8 +18,8 @@ IntegralFloatingStepFrame::~IntegralFloatingStepFrame()
1818

1919
void IntegralFloatingStepFrame::change(void)
2020
{
21-
double a, b, e;
2221
QString func;
22+
double a, b, e;
2323
ModeInt mode = ModeIntLeftRect; //default mode
2424

2525
cancel();
@@ -106,7 +106,7 @@ ModeInt IntegralFloatingStepFrame::getMode()
106106
return ModeIntSimpson;
107107
}
108108

109-
void IntegralFloatingStepFrame::setValidator()
109+
void IntegralFloatingStepFrame::validatorSetup()
110110
{
111111
QRegExpValidator *validator = new QRegExpValidator;
112112
validator->setRegExp(QRegExp("^[+-]?[\\d]+($|[\\.][\\d]+|([\\.][\\d]+[Ee]|[Ee])[+-]?\\d+)$"));

Frames/integralFloatingStepFrame.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class IntegralFloatingStepFrame : public FrameThreadHelper
1414
void showAnswer(QString ans);
1515
ModeInt getMode(void);
1616

17-
void setValidator();
17+
void validatorSetup();
1818

1919
public:
2020
explicit IntegralFloatingStepFrame(QWidget *parent = 0);

Frames/nonlinearEquationsFrame.cpp

Lines changed: 109 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,121 @@
11
#include "nonlinearEquationsFrame.h"
22
#include "ui_nonlinearEquationsFrame.h"
33

4-
NonlinearEquationsFrame::NonlinearEquationsFrame(QWidget *parent) :
5-
QWidget(parent),
4+
#include "UIConsts.h"
5+
6+
NonlinearEquationsFrame::NonlinearEquationsFrame(QWidget *parent, ModeEq mode) :
7+
FrameThreadHelper(parent),
68
ui(new Ui::NonlinearEquationsFrame)
79
{
810
ui->setupUi(this);
11+
this->mode = mode;
12+
validatorSetup();
13+
setTimeOutUse(true);
14+
change();
915
}
1016

1117
NonlinearEquationsFrame::~NonlinearEquationsFrame()
1218
{
1319
delete ui;
1420
}
21+
22+
void NonlinearEquationsFrame::change()
23+
{
24+
QString func;
25+
double a, b, e;
26+
27+
cancel();
28+
29+
// a = Expression(QStrToCStr(ui->limitAEdit->text()));
30+
// if(IsNan(a))
31+
// {
32+
// showAnswer("Неверный параметр a");
33+
// return;
34+
// }
35+
36+
// b = Expression(QStrToCStr(ui->limitBEdit->text()));
37+
// if(IsNan(b))
38+
// {
39+
// showAnswer("Неверный параметр b");
40+
// return;
41+
// }
42+
43+
// if(a >= b)
44+
// {
45+
// showAnswer("b должн быть больше a");
46+
// return;
47+
// }
48+
49+
// e = ui->epsilonEdit->text().toDouble();
50+
51+
// if(e >= 1 || e <= 1e-99)
52+
// {
53+
// showAnswer("Точность должна быть в пределах (1..1e-99)");
54+
// return;
55+
// }
56+
57+
// func = ui->equationEdit->text();
58+
59+
// setThread(new EquationThread(func, a, b, e, mode));
60+
61+
// connect(getThread(), SIGNAL(sendResultSignal(double, int)), SLOT(onResult(double,int)));
62+
// connect(getThread(), SIGNAL(sendErrorSignal(int)), SLOT(onError(int)));
63+
64+
// start();
65+
66+
// showAnswer(sCalculating);
67+
}
68+
69+
void NonlinearEquationsFrame::showAnswer(QString ans)
70+
{
71+
ui->answerEdit->setText(ans);
72+
ui->interationCountLabel->setText("");
73+
}
74+
75+
void NonlinearEquationsFrame::onResult(double value, int iterations)
76+
{
77+
end();
78+
79+
if(!IsNan(value))
80+
showAnswer(QString::number(value));
81+
else
82+
showAnswer(sNanError);
83+
84+
ui->interationCountLabel->setText(sIterationsCountForAccuracy(QString::number(iterations)));
85+
}
86+
87+
void NonlinearEquationsFrame::onError(int code)
88+
{
89+
end();
90+
91+
if(code == CalcError)
92+
showAnswer(sSyntaxError);
93+
else showAnswer(sIntTimeoutError);
94+
}
95+
96+
void NonlinearEquationsFrame::validatorSetup()
97+
{
98+
QRegExpValidator *validator = new QRegExpValidator;
99+
validator->setRegExp(QRegExp("^[+-]?[\\d]+($|[\\.][\\d]+|([\\.][\\d]+[Ee]|[Ee])[+-]?\\d+)$"));
100+
ui->epsilonEdit->setValidator(validator);
101+
}
102+
103+
void NonlinearEquationsFrame::on_equationEdit_textChanged(const QString &arg1)
104+
{
105+
change();
106+
}
107+
108+
void NonlinearEquationsFrame::on_limitAEdit_textChanged(const QString &arg1)
109+
{
110+
change();
111+
}
112+
113+
void NonlinearEquationsFrame::on_limitBEdit_textChanged(const QString &arg1)
114+
{
115+
change();
116+
}
117+
118+
void NonlinearEquationsFrame::on_epsilonEdit_textChanged(const QString &arg1)
119+
{
120+
change();
121+
}

Frames/nonlinearEquationsFrame.h

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,37 @@
22
#define NONLINEAREQUATIONSFRAME_H
33

44
#include <QWidget>
5+
#include "X.h"
56

67
namespace Ui {
78
class NonlinearEquationsFrame;
89
}
910

10-
class NonlinearEquationsFrame : public QWidget
11+
class NonlinearEquationsFrame : public FrameThreadHelper
1112
{
1213
Q_OBJECT
1314

15+
ModeEq mode;
16+
17+
void showAnswer(QString ans);
18+
void validatorSetup();
19+
1420
public:
15-
explicit NonlinearEquationsFrame(QWidget *parent = 0);
21+
explicit NonlinearEquationsFrame(QWidget *parent = 0, ModeEq mode = ModeEqDich);
1622
~NonlinearEquationsFrame();
1723

24+
private slots:
25+
void on_equationEdit_textChanged(const QString &arg1);
26+
void on_limitAEdit_textChanged(const QString &arg1);
27+
void on_limitBEdit_textChanged(const QString &arg1);
28+
void on_epsilonEdit_textChanged(const QString &arg1);
29+
30+
void onResult(double value, int iterations);
31+
void onError(int code);
32+
1833
private:
1934
Ui::NonlinearEquationsFrame *ui;
35+
void change();
2036
};
2137

2238
#endif // NONLINEAREQUATIONSFRAME_H

X.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ extern "C" {
99

1010
// Тут все ссылки на все вычислительные треды
1111
#include "Core/IntegralThreads.h"
12+
#include "Core/EquationThread.h"
1213

1314
#endif // X_H

mainwindow.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,11 @@ void MainWindow::createMenu()
3838
{"Метод Рунге-Кутты", new QLabel("Метод Рунге-Кутты")}
3939
};
4040

41-
const int nolinearItemsCount = 3;
41+
const int nolinearItemsCount = 2;
4242
TMember nolinearItems[nolinearItemsCount] =
4343
{
44-
{"Метод Дихотомии", new NonlinearEquationsFrame},
45-
{"Метод касательных (Ньютона)", new NonlinearEquationsFrame},
46-
{"Метод хорд", new NonlinearEquationsFrame}
44+
{"Метод Дихотомии", new NonlinearEquationsFrame(this, ModeEqDich)},
45+
{"Метод хорд", new NonlinearEquationsFrame(this, ModeEqChord)}
4746
};
4847

4948
const int simpleFunctionsItemsCount = 2;

0 commit comments

Comments
 (0)