rendered paste bodyui->meet_plot->setVisible(false); //+++++++++++++++++++++++++++++++++++++++++ ui->progressBar->setValue(0); //+++++++++++++++++++++++++++++++++++++++++ Ver_Otkl=ui->Otklonenie->text().toDouble(); if (Ver_Otkl<0.5 || Ver_Otkl>0.99) { QMessageBox::information(0,"Внимание!","Вероятность отклонения не может быть < 0.5 и > 0.99\nТеоретическая погрешность рассчитана не будет",QMessageBox::Yes); }// ====================================================================================================// КОНСТРУКТОР// ==================================================================================================== 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; } //+++++++++++++++++++++++++++++++++++++++++ ui->progressBar->setValue(5); //+++++++++++++++++++++++++++++++++++++++++// ====================================================================================================// ОСНОВНЫЕ РАСЧЁТЫ// ==================================================================================================== double progr=ui->progressBar->value(); double progr_step=25.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++) { r=qrand()%10; if (r<5) coin=0; else { coin=1; Eagle++; } 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=25.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);// ====================================================================================================// ОТРИСОВКА РАССЧЁТОВ 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->rezult->setFont(font); otvet="Отклонение от теоретического значения:\n"; if ((0.5-MidAllSeries[ui->Exp_in_s->value()-1])<0) rez.setNum((0.5-MidAllSeries[ui->Exp_in_s->value()-1])*-1); else rez.setNum(0.5-MidAllSeries[ui->Exp_in_s->value()-1]); rez.remove(6,rez.length()-6); otvet+=rez; ui->Otkl_ot_teor->setText(otvet); ui->Otkl_ot_teor->setAlignment(Qt::AlignCenter); ui->label_6->setText("Теоретическое значение: 0.5"); ui->label_6->setAlignment(Qt::AlignCenter);// ui->label_6->setFont(font); ui->label_6->setVisible(true); ui->Otkl_ot_teor->setVisible(true); ui->line->setVisible(true); ui->line_2->setVisible(true);// ====================================================================================================// ОТКЛОНЕНИЕ УСРЕДНЁННЫХ ЧАСТОТ 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); MidAllSeries[i]=0.5-MidAllSeries[i]; if (MidAllSeries[i]<0) MidAllSeries[i]*=(-1); } ErrorMidCurve->setData(xPlot,MidAllSeries,ui->Exp_in_s->value()-1); ErrorMidCurve->setVisible(true); delete[] MidAllSeries;// ====================================================================================================// ОТРИСОВКА ПОГРЕШНОСТЕЙ 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); ErrorMidCurve->setVisible(false); ErrorExpCurveUp->setVisible(false); ErrorExpCurveDown->setVisible(false); ErrorExpCurve->setVisible(false); ErrorLap->setVisible(false); delete[] xPlot; delete MidCurve; delete ErrorMidCurve; delete ErrorExpCurveUp; delete ErrorExpCurveDown; delete ErrorExpCurve; delete ErrorLap; ui->progressBar->setValue(100);