rendered paste body// ====================================================================================================// КОНСТРУКТОР// ==================================================================================================== int i; AllSeries=new double[ui->Exp_in_s->value()]; xPlot = new double [ui->Exp_in_s->value()]; MidAllSeries=new double[ui->Exp_in_s->value()]; temp=new double*[ui->Exp_in_s->value()]; for (i=0;i<ui->Exp_in_s->value();i++) temp[i]=new double [ui->Series->value()]; Curve = new QwtPlotCurve[ui->Series->value()]; MidCurve = new QwtPlotCurve;// ErrorMidCurve = new QwtPlotCurve; ErrorExpCurveUp = new QwtPlotCurve; ErrorExpCurveDown = new QwtPlotCurve; ErrorExpCurve = new QwtPlotCurve; ErrorLap = new QwtPlotCurve; Scale = new QwtLog10ScaleEngine; ErrorScale = new QwtLog10ScaleEngine; int r,j; double x=0; bool coin=0; MidAllSeries[0]=0.5; for (i=0;i<ui->Series->value();i++) { Curve[i].setPen(pen1); Curve[i].attach(ui->mainPlot); Curve[i].setRenderHint(QwtPlotItem::RenderAntialiased); } MidCurve->setPen(pen2); MidCurve->attach(ui->mainPlot); MidCurve->setRenderHint(QwtPlotItem::RenderAntialiased); ErrorExpCurveUp->setPen(pen3); ErrorExpCurveUp->attach(ui->mainPlot); ErrorExpCurveUp->setRenderHint(QwtPlotItem::RenderAntialiased); ErrorExpCurveDown->setPen(pen3); ErrorExpCurveDown->attach(ui->mainPlot); ErrorExpCurveDown->setRenderHint(QwtPlotItem::RenderAntialiased); ErrorLap->setPen(pen4); ErrorLap->attach(ui->error_Plot); ErrorLap->setRenderHint(QwtPlotItem::RenderAntialiased); ErrorExpCurve->setPen(pen3); ErrorExpCurve->attach(ui->error_Plot); ErrorExpCurve->setRenderHint(QwtPlotItem::RenderAntialiased);// ErrorMidCurve->setPen(pen2);// ErrorMidCurve->attach(ui->error_Plot);// ErrorMidCurve->setRenderHint(QwtPlotItem::RenderAntialiased); ui->mainPlot->setAxisScaleEngine(QwtPlot::xBottom, Scale); ui->mainPlot->setAxisScale(QwtPlot::xBottom,1,ui->Exp_in_s->value()); ui->mainPlot->setAxisScale(QwtPlot::yLeft,0,1,0.5); for (i=1;i<ui->Exp_in_s->value();i++) { xPlot[i]=i; MidAllSeries[i]=0; } double luzha=ui->ver_luzh->text().toDouble(); luzha*=1000; int loose_steps; int fall; //+++++++++++++++++++++++++++++++++++++++++ ui->progressBar->setValue(5); //+++++++++++++++++++++++++++++++++++++++++// ====================================================================================================// ОСНОВНЫЕ РАСЧЁТЫ// ==================================================================================================== double progr=ui->progressBar->value(); double progr_step=30.0/ui->Series->value(); for (j=0;j<ui->Series->value();j++) { x=0; progr+=progr_step; ui->progressBar->setValue(progr); for (i=1;i<ui->Exp_in_s->value();i++) { fall=ui->start_step->value(); for (loose_steps=0;loose_steps<50;loose_steps++) { r=qrand()%1000; if (r>luzha) { fall++; } else { fall--; } if (fall==0) { coin=1; break; } if (fall==20) { coin=0; break; } } if (loose_steps==50) coin=0; x+=coin; AllSeries[i]=x/i; MidAllSeries[i]+=AllSeries[i]; temp[i][j]=AllSeries[i]; } AllSeries[0]=AllSeries[1]; Curve[j].setData(xPlot,AllSeries,ui->Exp_in_s->value()-1); Curve[j].setVisible(true); } delete[] AllSeries; for (i=1;i<ui->Exp_in_s->value();i++) MidAllSeries[i]/=ui->Series->value(); MidCurve->setData(xPlot,MidAllSeries,ui->Exp_in_s->value()-1); MidCurve->setVisible(true); // ==================================================================================================== // РУКАВА progr = ui->progressBar->value(); progr_step=30.0/ui->Exp_in_s->value(); Rukav_Up=new double[ui->Exp_in_s->value()]; Rukav_Down=new double[ui->Exp_in_s->value()]; double temptemp; for (i=0;i<ui->Exp_in_s->value();i++) { progr+=progr_step; ui->progressBar->setValue(progr); for (int a = ui->Series->value() - 1; a > 0; a--) { for (int b = 0; b < a; b++) { if (temp[i][b] > temp[i][b + 1]) { temptemp=temp[i][b]; temp[i][b]=temp[i][b+1]; temp[i][b+1]=temptemp; } } } double otbros=(ui->Series->value()/100)*((1-Ver_Otkl)*100/2); int otbr=otbros; Rukav_Down[i]=temp[i][otbr]; Rukav_Up[i]=temp[i][ui->Series->value()-(otbr+1)]; } Rukav_Up[0]=Rukav_Up[1]; Rukav_Down[0]=Rukav_Down[1]; for (i=0;i<ui->Series->value();i++) delete[] temp[i]; delete[] temp; ErrorExpCurveUp->setData(xPlot,Rukav_Up,ui->Exp_in_s->value()-1); ErrorExpCurveUp->setVisible(true); ErrorExpCurveDown->setData(xPlot,Rukav_Down,ui->Exp_in_s->value()-1); ErrorExpCurveDown->setVisible(true); // ==================================================================================================== // ОТРИСОВКА РАССЧЁТОВ QwtPlotMarker *y_05 = new QwtPlotMarker(); y_05->setLabelAlignment(Qt::AlignRight|Qt::AlignTop); y_05->setLineStyle(QwtPlotMarker::HLine); y_05->setLinePen(QPen(Qt::black)); y_05->setYValue(0.5); y_05->attach(ui->mainPlot); ui->mainPlot->replot(); for (i=0;i<ui->Series->value();i++) Curve[i].setVisible(false); delete[] Curve; double OTKL_LAP=MidAllSeries[ui->Exp_in_s->value()-1]; // ==================================================================================================== // ТЕОРЕТИЧЕСКАЯ ПОГРЕШНОСТЬ // Ver_Otkl/=2; x=get_Laplass(Ver_Otkl); Laplas = new double[ui->Exp_in_s->value()]; progr = ui->progressBar->value(); progr_step=5.0/ui->Exp_in_s->value(); for (i=0;i<ui->Exp_in_s->value();i++) { progr+=progr_step; ui->progressBar->setValue(progr); Laplas[i]=x*sqrt((OTKL_LAP*(1-OTKL_LAP))/i); } ErrorLap->setData(xPlot,Laplas,ui->Exp_in_s->value()-1); ErrorLap->setVisible(true); double plusminus = Laplas[ui->Exp_in_s->value()-1]; delete[] Laplas; // ==================================================================================================== // ЭКСПЕРИМЕНТАЛЬНАЯ ПОГРЕШНОСТЬ progr = ui->progressBar->value(); progr_step=10.0/ui->Exp_in_s->value(); for (i=0;i<ui->Exp_in_s->value();i++) { progr+=progr_step; ui->progressBar->setValue(progr); Rukav_Up[i]=(Rukav_Up[i]-Rukav_Down[i])/2; } Rukav_Up[0]=Rukav_Up[1]; delete[] Rukav_Down; ErrorExpCurve->setData(xPlot,Rukav_Up,ui->Exp_in_s->value()-1); ErrorExpCurve->setVisible(true); delete[] Rukav_Up; // ==================================================================================================== // ВЫВОД РЕЗУЛЬТАТОВ QString rez; QString otvet; otvet="Результат: "; rez.setNum(MidAllSeries[ui->Exp_in_s->value()-1]); rez.remove(6,rez.length()-6); otvet+=rez; otvet+=" +-"; rez.setNum(plusminus); rez.remove(6,rez.length()-6); otvet+=rez; otvet+="\n(с вероятностью отклонения "; rez.setNum(ui->Otklonenie->text().toDouble()); otvet+=rez; otvet+=")"; ui->rezult->setText(otvet); ui->rezult->setAlignment(Qt::AlignCenter); ui->label_6->setVisible(false); ui->Otkl_ot_teor->setVisible(false); ui->line->setVisible(false); ui->line_2->setVisible(false); // ==================================================================================================== // ОТРИСОВКА ПОГРЕШНОСТЕЙ ui->error_Plot->setAxisScaleEngine(QwtPlot::xBottom,ErrorScale); ui->error_Plot->setAxisScale(QwtPlot::xBottom,1,ui->Exp_in_s->value()); ui->error_Plot->setAxisScale(QwtPlot::yLeft,0,1,0.2); ui->error_Plot->replot(); // ==================================================================================================== // ДЕСТРУКТОР // ==================================================================================================== MidCurve->setVisible(false); ErrorExpCurveUp->setVisible(false); ErrorExpCurveDown->setVisible(false); ErrorExpCurve->setVisible(false); ErrorLap->setVisible(false); delete[] xPlot; delete MidCurve; delete ErrorExpCurveUp; delete ErrorExpCurveDown; delete ErrorExpCurve; delete ErrorLap; ui->progressBar->setValue(100);