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

Назначение программы, ее пользователи, основные функции и цели, которые преследуются при разработке. Теоретические основы разработки, выбор инструментальных средств. Разработка пользовательского интерфейса. Архитектура программы, основные функции.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 04.04.2012
Размер файла 1,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Пояснительная записка к курсовому проекту

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

Дисциплина: Программирование и основы алгоритмизации

ВВЕДЕНИЕ

В сегодняшнем информационном обществе, программные продукты находят широкое применение в процессе обучения и являются хорошими помощниками преподавателей. Образовательное программное обеспечение - вид программного обеспечения, главным назначением которого является обучение или развитие некоторых навыков. Принципы обучения, применённые в таких программах, могут быть совершенно различными, это может быть: игра, тест, среда программирования и т.д. Возрастная аудитория пользователей такого программного обеспечения занимает широчайший диапазон (от 3 лет и выше). Программа вычисления определенного интеграла методом прямоугольников с визуализацией решения рассчитана для обучения на уроках математики школьников старших классов. Обычно такое ПО создаётся с учётом удобства его отображения проектором на экране и использования в сети компьютеров.

1. АНАЛИЗ ЗАДАЧИ И ОПРЕДЕЛЕНИЕ ТРЕБОВАНИЙ К РАЗРАБАТЫВАЕМОЙ ПРОГРАММЕ

1.1 Назначение программы, ее пользователи, основные функции и цели, которые преследуются при разработке

Программа вычисления определенного интеграла методом прямоугольников с визуализацией решения предназначена для применения на уроках математики в целях ознакомления школьников с методами численного интегрирования. Поскольку пользователями данной программы являются дети школьного возраста, то интерфейс должен быть прост и предельно понятен. При разработке также учитывалась возможность демонстрации работы программы проектором на экране, поэтому область отведенная на графические изображения занимает большую часть окна. А также преследовались стандартные цели при разработке программных продуктов под которыми обычно понимается сочетание компактности, быстроты, функциональности и простоты в эксплуатации.

1.2 Теоретические основы разработки

Программа реализует вычисление определенного интеграла методом прямоугольников. Метод прямоугольников - метод численного интегрирования функции одной переменной, заключающийся в замене подынтегральной функции на многочлен нулевой степени, то есть константу, на каждом элементарном отрезке. Если рассмотреть график подынтегральной функции, то метод будет заключаться в приближённом вычислении площади под графиком суммированием площадей конечного числа прямоугольников, ширина которых будет определяться расстоянием между соответствующими соседними узлами интегрирования, а высота - значением подынтегральной функции в этих узлах. Если отрезок является элементарным и не подвергается дальнейшему разбиению, значение интеграла можно найти по

Формуле левых прямоугольников:

Формуле правых прямоугольников:

Формуле средних прямоугольников:

В случае разбиения отрезка интегрирования на элементарных отрезков приведённые выше формулы применяются на каждом из этих элементарных отрезков между двумя соседними узлами. В результате, получаются составные квадратурные формулы

Для левых прямоугольников:

Для правых прямоугольников:

Для средних прямоугольников:

Поскольку составные квадратурные формулы являются ни чем иным, как суммами, входящими в определение интеграла Римана, при они сходятся к точному значению интеграла. Соответственно, с увеличением точность получаемого по приближённым формулам результата возрастает.

1.3 Выбор инструментальных средств разработки

Для создания программы была выбрана среда визуальной разработки приложений Visual C++ 2008. Данное инструментальное средство было выбрано вследствие возможности создания в нем удобного пользовательского интерфейса, а так же хорошего встроенного компилятора, позволяющего получать быстро и надежно работающий исполняемый модуль.

2. ПРОЕКТНАЯ ЧАСТЬ РАЗРАБОТКИ

2.1 Разработка пользовательского интерфейса

Пользовательский интерфейс программы вычисления определенного интеграла методом прямоугольников с визуализацией решения предельно прост и интуитивно понятен. Он разработан таким образом, что любой пользователь ПК способен самостоятельно и быстро разобраться с программой. Интерфейс рассчитан на русскоязычных пользователей. Доступ ко всем функциям возможен с помощью кнопок и других компонентов главного окна (рис. 2.1.1), компоненты объединены в группы по своим функциям для наибольшей наглядности интерфейса и простоты использования программы. Большую часть главного окна занимает область, отведенная на графические изображения. Для лучшего понимания пользователем (школьником) предмета исследования данной программой на главной форме предусмотрена кнопка «Справка», при нажатии которой появляется вторая форма (рис. 2.1.2) с пояснениями.

Рис. 2.1.1

Рис. 2.1.2

3. РЕАЛИЗАЦИЯ ПРОГРАММЫ НА ЯЗЫКЕ С++

3.1 Архитектура программы

Программа состоит из двух форм. Одна- главная, на ней размещены основные компоненты для ввода данных и вывода результатов, Вторая служит для вывода справки, на ней содержится только текстовая информация не изменяемая пользователем.

3.2 Выбор стандартных визуальных и не визуальных компонентов

При создании программы были использованы следующие компоненты панели Toolbox интерфейса Visual C++: colorDialog и pictureBox- для создания графических изображений; comboBox, textBox, numericUpDown, label- для ввода и вывода данных; button и radioButton- для управления и выбора функций; а также panel и groupBox.

3.3 Описание основных функций

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)- основная функция программы, при ее выполнении производится расчет интеграла исходя из введенных данных, выполняется визуализация решения и вывод результатов. Данная функция обращается к процедурам разработанным при создании программы:

double funkcia (double &x1)- служит для ввода исследуемой функциональной зависимости, возвращает значение введенной функции от входного x1, блок- схема приведена рис. 3.1;

bool check(double &x1, double &x2)- служит для проверки введенных пределов интегрирования;

bool checktoch(double &tochnost)- для проверки введенной точности;

double LEVPR, double PRAVPR, double SREDPR(double &buf,double &x2,int &n,double &delX, double &delY)- эти функции реализуют методы левых, правых и средних прямоугольников соответственно, возвращают значение интеграла. Блок- схемы данных функций индентичны рис. 3.2.

Еще одна функция: private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)- служит для создания второй формы.

Рис. 3.1

Рис. 3.2

4. РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ ПРОГРАММЫ

Тест 1. Соответствие результатов выдаваемых программой результатам, полученным расчетным путем.

Результат работы программы на рис. 4.1.

Рис. 4.1

При пределах интегрирования -3 и 4 и точности вычисления 0.01 программа выдает значение интеграла равное 50.87 (расчет методом средних прямоугольников). Посчитаем интеграл по формуле:

как видим, результаты совпадают.

Тест 2. Программа не должна зависеть от конкретной функциональной зависимости, поэтому предложим программе визуализировать нахождение интеграла допустим от логарифмической функции. Результат работы программы на рис. 4.2.

Рис. 4.2

Результат работы программы вполне удовлетворительный.

программа разработка интерфейс архитектура

Тест 3. Работа программы на маленьком отрезке интегрирования.

Результат работы программы на рис. 4.3. Отрезок на котором выполнялось интегрирование составлял всего 0,00531, но программа отлично справилась с поставленной перед ней задачей, наилучшим образом отмасштабировала график, а также вывела значени меток по координатным осям.

Рис. 4.3

Тест 4. Реакция программы на случай когда отрезок интегрирования не соответствует области определения функции.

Предоставим программе посчитать интеграл логарифмической функции в пределах от -3 до 2, результат работы программы на рис. 4.4.

Рис. 4.4

Программа требует изменить пределы интегрирования, это вполне адекватная реакция на данную задачу.

Тест 5. Реакция программы на невведенный метод решения, перепутанные местами верхний и нижний пределы интегрирования и на некорректно введенные пределы (рисунки 4.5, 4.6, 4.7 соответственно).

Рис. 4.5

Рис 4.6

Рис. 4.7

На все случаи программа реагирует соответствующей ошибкой.

Тест 6. Оценка скорости выполнения вычислений.

Вычисление интеграла от квадратичной функции в пределах от -100 до 100 с точностью 0,05 заняло менее 5 секунд, этот факт говорит о хорошей вычислительной скорости программы

ЗАКЛЮЧЕНИЕ

Программа вычисления определенного интеграла методом прямоугольников с визуализацией решения представляет собой готовый программный продукт, пригодный для использования. Данная программа должна помочь школьникам в усвоении учебного курса. Возможности усовершенствования разработки довольно обширны. Например, можно создать возможность пользователю самому прописывать или хотя бы выбирать из списка исследуемую функцию.

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ

1. Либерти,Дж. Освой самостоятельно C++ за 21 день / Дж. Либерти; пер. с англ. - М.: Вильямс, 2000. - 816 с.

2. Подбельский В. Язык С++: Учебное пособие для ВУЗов / В.В. Подбельский - М.: Финансы и статистика, 2002. - 560 с.

3. Ник Рендольф Visual C++ 2010 - М.: ЗАО «Издательство БИНОМ», 2011. 224 с.

ПРИЛОЖЕНИЕ

#pragma endregion

int xx,yy,prexx,preyy;

double funkcia (double &x1) {

double yk;

if (x1==0) x1=0.00000001;//чтоб лишний раз через ноль перескочил

yk=x1*x1;

yk=-yk;

if ((Convert::ToString(yk)=="NaN")){ textBox1->Text="Измените";//исключения проверяю

textBox2->Text="Измените"; yk=0;}

return yk;

}

bool check(double &x1, double &x2) {

//конвертируем текст в первом поле в число

try{

x1 = Convert::ToDouble(textBox1->Text);

}

catch(...) {

textBox1->Focus();

}

//конвертируем текст во втором поле в число

try{

x2 = Convert::ToDouble(textBox2->Text);

}

catch(...) {

textBox2->Focus();

}

return true;

}

bool checktoch(double &tochnost) { //проверка ввода точности

try{tochnost = Convert::ToDouble(textBox3->Text);}

catch(...) {textBox3->Focus(); MessageBox::Show("Значение погрешности введено некорректно");}

return true;

}

double LEVPR(double &buf,double &x2,int &n,double &delX, double &delY){// метод левых прямоугольников (считает интригал)

double y,S,x1,post;

int postX1,postY,xx,yy;

for (x1=buf;x1<x2;x1=x1+((x2-buf)/n))

{yy=Convert::ToInt64(funkcia(x1)*delY);

post=x1+((x2-buf)/n);

postX1=Convert::ToInt64((x1+((x2-buf)/n))*delX);

postY=Convert::ToInt64(funkcia(post)*delY);

y=funkcia(x1);

post=x1+((x2-buf)/n);

if (abs(yy)<abs(postY)&&((yy>0&&postY>0)||(yy<0&&postY<0))&&postX1<=x2*delX )

{

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

else{

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

}

return S;

}

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

double y,S,x1,post;

int postX1,postY,xx,yy;

for (x1=buf;x1<x2;x1=x1+((x2-buf)/n))

{yy=Convert::ToInt64(funkcia(x1)*delY);

post=x1+((x2-buf)/n);

postX1=Convert::ToInt64((x1+((x2-buf)/n))*delX);

postY=Convert::ToInt64(funkcia(post)*delY);

y=funkcia(x1);

post=x1+((x2-buf)/n);

if (abs(yy)<abs(postY)&&((yy>0&&postY>0)||(yy<0&&postY<0))&&postX1<=x2*delX ) {

S=S+y*((x1+((x2-buf)/n))-x1);}

if (abs(yy)>=abs(postY)&&((yy>0&&postY>0)||(yy<0&&postY<0))&&postX1<=x2*delX) {

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

}

return S;

}

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

double y,S,x1,post;

int postX1,postY,xx,yy;

for (x1=buf;x1<x2;x1=x1+((x2-buf)/n))

{yy=Convert::ToInt64(funkcia(x1)*delY);

post=x1+((x2-buf)/n);

postX1=Convert::ToInt64((x1+((x2-buf)/n))*delX);

postY=Convert::ToInt64(funkcia(post)*delY);

y=funkcia(x1);

post=x1+((x2-buf)/n);

if (abs(yy)<abs(postY)&&((yy>0&&postY>0)||(yy<0&&postY<0))&&postX1<=x2*delX) {

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

if (abs(yy)>=abs(postY)&&((yy>0&&postY>0)||(yy<0&&postY<0))&&postX1<=x2*delX) {

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

}

return S;

}

double y;

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

pictureBox1->Image =

gcnew System::Drawing::Bitmap(pictureBox1->Size.Width,

pictureBox1->Size.Height);

System::Drawing::Graphics^ g =

System::Drawing::Graphics::FromImage(pictureBox1->Image);

System::Drawing::Pen^ pen =

gcnew System::Drawing::Pen(colorDialog1->Color);

System::Drawing::Brush^ brush =

gcnew System::Drawing::SolidBrush(colorDialog1->Color);

double x1,x2;

x1=1;

x2=1;

int n;//число прямоугольников

double shag,//шаг в циклах, т.е. приращение по оси X

raznostX;//разность между верхним и нижним пределами интегрирования, необходима для нахождения шага

if (radioButton1->Checked==true) n=Convert::ToInt64(numericUpDown1->Value);

double maxY,minY;

if (radioButton2->Checked==true) n=6;

if (check(x1,x2)&&(x2>x1))

{double delX;

if ((x1<=0)&&(x2>=0))

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

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

//Смещение по оси Х:

int sdvigX,sdvigY;

if (x1<0)

sdvigX=Convert::ToInt64(abs(x1)*delX);

else sdvigX=Convert::ToInt64(-x1*delX);

double buf;

sdvigX=sdvigX+80;//чтобы справа умещалась шкала X

buf=x1;//необходим для запоминания Х1

raznostX=abs(x2-x1);

shag=0.001*raznostX;

//Поиск наибольшего и наименьшего Y -необходимо для масштабирования

minY=0;

maxY=0;

double srY;

for (x1=x1;x1<=(x2);x1=x1+shag)

{

srY=funkcia(x1);///////////////////////////////////////////////////////////////////////////////////////////

if ((srY>maxY)) maxY=srY;

if ((srY<minY)) minY=srY;}

if (textBox1->Text=="Измените") MessageBox::Show("Измените пределы интегрирования");

else

{

x1=buf;

double delY;

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

if ((minY<=0)&&(maxY>=0))

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

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

//Смещение по оси Y:

if (minY<0) sdvigY=Convert::ToInt64(abs(minY)*delY);

else sdvigY=0;

prexx=Convert::ToInt64(x1*delX);

y=funkcia(x1);

double ddelY;

ddelY=1000;

if (abs(maxY-minY)<0.001) ddelY=1000000000000;

preyy=Convert::ToInt64(y*delY);

double m11,m22;

m22=-(maxY)*delY;//для изменения координаты черточки единичного отрезка на оси Y

m11=buf*delX;//для изменения координаты черточки единичного отрезка на оси X

String pointX;//для циферок единичных отрезков

String pointY;//для циферок единичных отрезков

int kolX, kolY;

kolX=Convert::ToInt64(numericUpDown2->Value);//количество меток по оси X

kolY=Convert::ToInt64(numericUpDown3->Value);//количество меток по оси Y

double iY,iX;

iX=buf; iY=-maxY; if (abs(maxY-Convert::ToInt64(maxY))<0.0000001) iY=-Convert::ToInt64(maxY);

pointX=Convert::ToString(iX) ;

pointY=Convert::ToString(iY);

for (x1=x1;x1<=(x2);x1=x1+shag)

{

y=funkcia(x1); /

yy=Convert::ToInt64(y*delY);

xx=Convert::ToInt64(x1*delX);

g->DrawLine(pen,prexx+sdvigX,preyy+sdvigY+40,xx+sdvigX,yy+sdvigY+40);//рисую график

//рисую единичные отрезки на оси X:

g->DrawLine(pen,50,sdvigY+40,726,sdvigY+40);// оззь Х

g->DrawString(pointX,fontDialog1->Font,brush,sdvigX+m11,sdvigY+40);//метки единичных отрезков по оси X

g->DrawString(pointY,fontDialog1->Font,brush,3,sdvigY-m22+40);//метки единичных отрезков ось Y

//выбор меток по оси Y

m22=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=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);

//манипуляции с триллиардами для округления

prexx=xx;

preyy=yy;}

//выбор количества интервалов в соответствии с точностью

double S;//значение интеграла

S=0;

double preX1,post;

int v;

v=0;

int postX1, postY ;//необходимы для рисования прямоугольников

int i;

double tochnost;

x1=buf;

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

{

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

{

n=3;

i=0;

double preS;

preS=tochnost*10;//2*S+tochnost;//чтобы выполнилось условие которое ниже

while (abs(S-preS)>abs(tochnost))

{preS=S;

S=0;

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

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

}

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

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

}

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

{

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

}

n=n*2;

}

}

if (radioButton1->Checked==true)

{

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

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

}

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

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

}

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

{

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

//визуализация методов

v=0;

for (x1=buf;x1<=x2;x1=x1+((x2-buf)/n))

{ double mnx=x2-(x2-buf)/n;

double y2; y2=Convert::ToInt64((y2=funkcia(mnx))*delY);

y=funkcia(x1);

xx=Convert::ToInt64(x1*delX);

yy=Convert::ToInt64(y*delY);

post=x1+((x2-buf)/n);

postX1=Convert::ToInt64((x1+((x2-buf)/n))*delX);

postY=Convert::ToInt64(funkcia(post)*delY);

//визуализация метода левых прямоугольников

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

{g->DrawLine(pen,xx+sdvigX,sdvigY+40,xx+sdvigX,yy+sdvigY+40);//вертикальные линии

if (abs(funkcia(post)-funkcia(x2))<0.001) g->DrawLine(pen,postX1+sdvigX,sdvigY+40,postX1+sdvigX,postY+sdvigY+40);//чтобы строило последнюю вертикальную линию даже в том случае если интервал нельзя поделить на равные части

if(x2-post<0.000001) g->DrawLine(pen,xx+sdvigX,postY+sdvigY+40,Convert::ToInt64(x2*delX)+sdvigX,postY+sdvigY+40); //чтобы строил последнюю горизонтальную линию

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

if (abs(yy)<abs (postY)&&((yy>0&&postY>0)||(yy<0&&postY<0)) &&postX1<=x2*delX) {g->DrawLine (pen,xx+sdvigX,postY+sdvigY+40,postX1+sdvigX,postY+sdvigY+40);

g->DrawLine (pen,xx+sdvigX,yy+sdvigY+40,xx+sdvigX,postY+sdvigY+40);}

if (abs(yy)>=abs(postY)&& ((yy>0&&postY>0)|| (yy<0&&postY<0))&&postX1<=x2*delX) {g->DrawLine (pen,postX1+sdvigX,postY+sdvigY+40,xx+sdvigX,postY+sdvigY+40);

}//вычисление интеграла

}

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

{g->DrawLine (pen,xx+sdvigX,sdvigY+40,xx+sdvigX,yy+sdvigY+40);//вертикальные линии

if (abs(funkcia(post)-funkcia(x2))<0.000001)g-> DrawLine (pen,postX1+sdvigX,sdvigY+40,postX1+sdvigX,postY+sdvigY+40);//чтобы строило последнюю вертикальную линию даже в том случае если интервал нельзя поделить на равные части

if (x2-post<0.000001) g-> DrawLine (pen,xx+sdvigX,yy+sdvigY+40,Convert::ToInt64(x2*delX)+sdvigX,yy+sdvigY+40); // чтобы строил последнюю горизонтальную линию

if (abs(yy)<abs(postY)&&((yy>0&&postY>0)||(yy<0&&postY<0))&&postX1<=x2*delX) {g->DrawLine (pen,xx+sdvigX,yy+sdvigY+40,postX1+sdvigX,yy+sdvigY+40);

}// дорисовываю вертикальные линии

if (abs(yy)>=abs(postY)&&((yy>0&&postY>0)||(yy<0&&postY<0))&&postX1<=x2*delX) {g->DrawLine(pen,postX1+sdvigX,yy+sdvigY+40,xx+sdvigX,yy+sdvigY+40);

g->DrawLine (pen,postX1+sdvigX,postY+sdvigY+40,postX1+sdvigX,yy+sdvigY+40);//дорисовываю вертикальные линии

}

if(x2-post<0.0001) g->DrawLine (pen,postX1+sdvigX,postY+sdvigY+40,postX1+sdvigX,yy+sdvigY+40);//чтобы дорисовывало последнюю вертикальную линию

}

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

{

g->DrawLine (pen,xx+sdvigX,sdvigY+40,xx+sdvigX,yy+sdvigY+40);//вертикальные линии

if (abs(funkcia(post)-funkcia(x2))<0.001) g->DrawLine (pen,postX1+sdvigX,sdvigY+40,postX1+sdvigX,postY+sdvigY+40);//чтобы строило последнюю вертикальную линию даже в том случае если интервал нельзя поделить на равные части

if (x2-post<0.0001) g->DrawLine(pen,xx+sdvigX,postY-(postY-yy)/2+sdvigY+40,Convert::ToInt64(x2*delX)+sdvigX,postY-(postY-yy)/2+sdvigY+40);//чтобы строил последнюю горизонтальную линию

if ((abs(funkcia(post)-funkcia(x2))<0.001) && (x2-post<0.000001)) g->DrawLine(pen,xx+sdvigX,yy+sdvigY+40,xx+sdvigX,postY-((postY-yy)/2)+sdvigY+40);//чтобы дорисовал предпосл вертикальную линию

if (abs(yy)<abs(postY)&&((yy>0&&postY>0)|| (yy<0&&postY<0))&&postX1<=x2*delX ) {g->DrawLine(pen,xx+sdvigX,postY-(postY-yy)/2+sdvigY+40,postX1+sdvigX,postY-(postY-yy)/2+sdvigY+40);

g->DrawLine(pen,xx+sdvigX,yy+sdvigY+40,xx+sdvigX,postY-((postY-yy)/2)+sdvigY+40);// дорисовываю вертикальные линии

}//вычисление интеграла

if (abs(yy)>abs(postY)&& ((yy>0&&postY>0)|| (yy<0&&postY<0)) &&postX1<=x2*delX) {g->DrawLine(pen,postX1+sdvigX,yy+(postY-yy)/2+sdvigY+40,xx+sdvigX,yy+(postY-yy)/2+sdvigY+40);

g->DrawLine(pen,postX1+sdvigX,postY+((yy-postY)/2) +sdvigY+40, postX1+sdvigX,postY+sdvigY+40);//дорисовываю вертикальные линии

}//вычисление интеграла

if(x2-post<0.0001) g->DrawLine(pen,postX1+sdvigX,postY+((yy-postY)/2)+sdvigY+40,postX1+sdvigX,postY+sdvigY+40);//чтобы дорисовывал последнюю вертикальную линию

}

}

if (radioButton2->Checked==true) {

if (tochnost<1)

{S=Convert::ToInt64(S/tochnost); S=S*tochnost;}

else {S=Convert::ToInt64(S);}}

label4->Text=Convert::ToString(-S);

label4->BackColor=colorDialog1->Color;

label10->Text=Convert::ToString(n);//вывод количества интервалов разбиения

}

else

{MessageBox::Show("Не выбран метод решения");}

}

}

else MessageBox::Show("Проверте введенные пределы интегрирования");

if (x1==x2) {MessageBox::Show("Интеграл =0, данный случай визуализации не подлежит!"); label4->Text="0";}

brush->~Brush();

pen->~Pen();

g->~Graphics();

pictureBox1->Invalidate();

}

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {

}

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {

dopforma^ f = gcnew dopforma();

this->Hide();

f->ShowDialog();

this->Show();

}

private: System::Void radioButton1_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {

textBox3->Enabled=false;

numericUpDown1->Enabled=true;

}

private: System::Void radioButton2_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {//вторую форму создаю

numericUpDown1->Enabled=false;

textBox3->Enabled=true;

}

};

}

Размещено на Allbest.ru


Подобные документы

  • Разработка программы, которая по заданной самостоятельно функции будет выполнять интегрирование методом прямоугольников. Блок-схема алгоритма вычисления интеграла (функция rectangle_integrate). Экспериментальная проверка программы, ее текст на языке C.

    курсовая работа [232,0 K], добавлен 27.05.2013

  • Постановка задачи и математическое описание ее решения. Назначение программного обеспечения. Описание принятых идентификаторов. Выбор языка программирования и написание программы на входном языке. Методика отладки программы и проведение ее тестирования.

    курсовая работа [96,1 K], добавлен 25.06.2013

  • Средства Delphi для разработки Windows приложений. Математическая формулировка задачи, описание программы вычисления определенного интеграла по формуле левых прямоугольников. Руководство пользователя, методика испытаний продукта. Листинг программы.

    курсовая работа [178,1 K], добавлен 14.11.2010

  • Разработка алгоритма решения определенного интеграла методом трапеций для подынтегральной функции и моделирования задачи вынужденных колебаний без затухания. Описание интерфейса программы в среде Delphi и MathCad; идентификаторы, модули и приложения.

    курсовая работа [500,4 K], добавлен 28.05.2013

  • Формулирование и создание программы по вычислению определенного интеграла по формуле трапеций с тремя десятичными знаками и по формуле Симпсона. Выбор Delphi как программного средства разработки программы. Создание алгоритма и листинг программы.

    курсовая работа [990,9 K], добавлен 15.06.2009

  • Математическое обоснование метода решения задачи: определенный интеграл, квадратурная формула Симпсона (формула парабол). Словесное описание алгоритма и составление его блок-схемы. Выбор языка программирования. Текст программы решения задачи, ее листинг.

    курсовая работа [593,6 K], добавлен 09.07.2012

  • Математическое описание, алгоритм и программа вычисления определенного интеграла методом трапеций. Расчет n-значений исследуемой функции и вывод их в виде таблицы. Технические и программные средства. Входные и выходные данные, функциональное назначение.

    курсовая работа [21,0 K], добавлен 03.01.2010

  • Обзор известных программ, которые выполняют аналогичные функции. Выбор инструментальных средств разработки. Проектирование пользовательского интерфейса и структур данных (во внешней и оперативной памяти). Выбор стандартных визуальных компонентов.

    курсовая работа [1,1 M], добавлен 13.10.2015

  • Методика и основные этапы процесса поиска уравнения по методу половинного деления, его сущность и содержание, анализ результатов. Порядок вычисления экстремумов функции методом перебора. Расчет определенного интеграла по методу правых прямоугольников.

    контрольная работа [200,9 K], добавлен 20.01.2014

  • Метод хорд решения нелинейных уравнений. Вычисление интеграла методом Симпсона. Процесс численного решения уравнения. Окно программы расчета корней уравнения методом хорд. Алгоритм вычисления интеграла в виде блок-схемы. Выбор алгоритма для вычислений.

    курсовая работа [832,6 K], добавлен 24.07.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.