All pastes #2050473 Raw Edit

Stuff

public cpp v1 · immutable
#2050473 ·published 2011-04-25 14:33 UTC
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);