Программа вычисления определенного интеграла методом прямоугольников с визуализацией решения

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

p;&postX1<=x2*delX )

{=S+funkcia(post)*((x1+((x2-buf)/n))-x1);} //вычисление интеграла{=S+funkcia(post)*((x1+((x2-buf)/n))-x1);}//вычисление интеграла

}S;

}PRAVPR(double &buf,double &x2,int &n,double &delX, double &delY){y,S,x1,post;postX1,postY,xx,yy;(x1=buf;x1<x2;x1=x1+((x2-buf)/n))

{yy=Convert::ToInt64(funkcia(x1)*delY);=x1+((x2-buf)/n);=Convert::ToInt64((x1+((x2-buf)/n))*delX);=Convert::ToInt64(funkcia(post)*delY);=funkcia(x1); =x1+((x2-buf)/n);(abs(yy)0)||(yy<0&&postY<0))&&postX1<=x2*delX) {=S+y*((x1+((x2-buf)/n))-x1);}//вычисление интеграла

}S;

}SREDPR(double &buf,double &x2,int &n,double &delX, double &delY){

double y,S,x1,post;postX1,postY,xx,yy;(x1=buf;x1<x2;x1=x1+((x2-buf)/n))

{yy=Convert::ToInt64(funkcia(x1)*delY);=x1+((x2-buf)/n);=Convert::ToInt64((x1+((x2-buf)/n))*delX);=Convert::ToInt64(funkcia(post)*delY);=funkcia(x1);=x1+((x2-buf)/n);(abs(yy)0)||(yy<0&&postY<0))&&postX1<=x2*delX) {=S+(funkcia(post)+(y-funkcia(post))/2)*((x1+((x2-buf)/n))-x1);}//вычисление интеграла

}S;

Image=System::Drawing::Bitmap(pictureBox1->Size.Width,->Size.Height);::Drawing::Graphics^g=::Drawing::Graphics::FromImage(pictureBox1->Image);::Drawing::Pen^pen=System::Drawing::Pen(colorDialog1->Color);::Drawing::Brush^brush=System::Drawing::SolidBrush(colorDialog1->Color);x1,x2;=1;=1;n;//shag,//,..X;//,(radioButton1->Checked==true)n=Convert::ToInt64(numericUpDown1->Value);maxY,minY;(radioButton2->Checked==true)n=6;(check(x1,x2)&&(x2>x1))">}y;: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {->Image = System::Drawing::Bitmap(pictureBox1->Size.Width,->Size.Height);::Drawing::Graphics^ g = ::Drawing::Graphics::FromImage(pictureBox1->Image);::Drawing::Pen^ pen = System::Drawing::Pen(colorDialog1->Color);::Drawing::Brush^ brush = System::Drawing::SolidBrush(colorDialog1->Color);x1,x2;=1;=1;n;//число прямоугольниковshag,//шаг в циклах, т.е. приращение по оси X;//разность между верхним и нижним пределами интегрирования, необходима для нахождения шага(radioButton1->Checked==true) n=Convert::ToInt64(numericUpDown1->Value);maxY,minY;(radioButton2->Checked==true) n=6;(check(x1,x2)&&(x2>x1))

{double delX;((x1=0))

{delX=(600/(abs(x1)+abs(x2)));}{delX=600/(abs(x2-x1));}

//Смещение по оси Х:sdvigX,sdvigY;(x1<0) =Convert::ToInt64(abs(x1)*delX);sdvigX=Convert::ToInt64(-x1*delX);buf;=sdvigX+80;//чтобы справа умещалась шкала X=x1;//необходим для запоминания Х1 =abs(x2-x1);=0.001*raznostX;

//Поиск наибольшего и наименьшего Y -необходимо для масштабирования=0;=0;srY;(x1=x1;x1<=(x2);x1=x1+shag)

{=funkcia(x1);///////////////////////////////////////////////////////////////////////////////////////////((srY>maxY)) maxY=srY;((srYText=="Измените") MessageBox::Show("Измените пределы интегрирования");

{=buf;delY;

//единичный отрезок по оси Y (m2):((minY=0))

{delY=(500/(abs(minY)+abs(maxY)));}{delY=500/(abs(maxY-minY)); }

//Смещение по оси Y:(minY<0) sdvigY=Convert::ToInt64(abs(minY)*delY);sdvigY=0;=Convert::ToInt64(x1*delX);=funkcia(x1);ddelY;=1000;(abs(maxY-minY)<0.001) ddelY=1000000000000;=Convert::ToInt64(y*delY);m11,m22;=-(maxY)*delY;//для изменения координаты черточки единичного отрезка на оси Y

m11=buf*delX;//для изменения координаты черточки единичного отрезка на оси XpointX;//для циферок единичных отрезковpointY;//для циферок единичных отрезковkolX, kolY;=Convert::ToInt64(numericUpDown2->Value);//количество меток по оси X=Convert::ToInt64(numericUpDown3->Value);//количество меток по оси YiY,iX;=buf; iY=-maxY; if (abs(maxY-Convert::ToInt64(maxY))<0.0000001) iY=-Convert::ToInt64(maxY);=Convert::ToString(iX) ;=Convert::ToString(iY);(x1=x1;x1<=(x2);x1=x1+shag)

{ =funkcia(x1); /=Convert::ToInt64(y*delY);=Convert::ToInt64(x1*delX);>DrawLine(pen,prexx+sdvigX,preyy+sdvigY+40,xx+sdvigX,yy+sdvigY+40);//рисую график

//рисую единичные отрезки на оси X:>DrawLine(pen,50,sdvigY+40,726,sdvigY+40);// оззь Х>DrawString(pointX,fontDialog1->Font,brush,sdvigX+m11,sdvigY+40);//метки единичных отрезков по оси X>DrawString(pointY,fontDialog1->Font,brush,3,sdvigY-m22+40);//метки единичных отрезков ось Y

//выбор меток по оси Y=m22+(abs(-minY+maxY)/kolY)*delY; iY=iY+abs(maxY-minY)/kolY; iY=iY*ddelY; iY=Convert::ToInt64(iY); iY=iY/ddelY; pointY=Convert::ToString(iY) ;

//метки по оси Х=m11+(abs(x2-buf)/kolX)*delX; iX=iX+abs(x2-buf)/kolX; iX=iX*1000000000; iX=Convert::ToInt64(iX); iX=iX/1000000000; pointX=Convert::ToString(iX);

//манипуляции с триллиардами для округления =xx;=yy;}

//выбор количества интервалов в соответствии с точностьюS;//значение интеграла=0;preX1,post;v;=0;postX1, postY ;//необходимы для рисования прямоугольниковi;tochnost;=buf;((comboBox1->Text=="Метод левых прямоугольников")||(comboBox1->Text=="Метод правых прямоугольников")||(comboBox1->Text=="Метод средних прямоугольников"))

{((radioButton2->Checked==true)&&(checktoch(tochnost)))

{=3;=0;preS;=tochnost*10;//2*S+tochnost;//чтобы выполнилось условие которое ниже(abs(S-preS)>abs(tochnost))

{preS=S;=0;(comboBox1->Text=="Метод левых прямоугольников")

{S=LEVPR(buf,x2,n,delX,delY);

}(comboBox1->Text=="Метод правых прямоугольников")

{ S=PRAVPR(buf,x2,n,delX,delY);

}(comboBox1->Text=="Метод средних прямоугольников")

{=SREDPR(buf,x2,n,delX,delY);

}=n*2;

}

}(radioButton1->Checked==true)

{ (comboBox1->Text=="Метод левых прямоугольников")

{S=LEVPR(buf,x2,n,delX,delY);

}(comboBox1->Text=="Метод правых прямоугольников")

{ S=PRAVPR(buf,x2,n,delX,delY);

}(comboBox1->Text=="Метод средних прямоугольников")

{=SREDPR(buf,x2,n,delX,delY);}}

//визуализация методов=0;(x1=buf;x1<=x2;x1=x1+((x2-buf)/n))

{ double mnx=x2-(x2-buf)/n;y2; y2=Convert::ToInt64((y2=funkcia(mnx))*delY);=funkcia(x1);=Convert::ToInt64(x1*delX);=Convert::ToInt64(y*delY);=x1+((x2-buf)/n);=Convert::ToInt64((x1+((x2-buf)/n))*delX);=Convert::ToInt64(funkcia(post)*delY);

//визуализация метода левых прямоугольников(comboBox1->Text=="Метод левых прямоугольников")

{g->DrawLine(pen,xx+sdvigX,sdvigY+40,xx+sdvigX,yy+sdvigY+40);//вертикальные линии(abs(funkcia(post)-funkcia(x2))DrawLine(pen,xx+sdvigX,postY+sdvigY+40,xx+sdvigX,y2+sdvigY+40);//чтобы дорисовал предпосл