Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив2 / курсовая docx100 / kursovoy_2012_MAI.docx
Скачиваний:
45
Добавлен:
07.08.2013
Размер:
453.6 Кб
Скачать

После нажатия кнопки ок пользователь увидит на форме таблицу с

результатами работы программы и 4 графика, соответствующие заданию:

Рисунок 4. Форма с выполненным заданием и результатами

5 БЛОК-СХЕМА АЛГОРИТМА

5.1 БЛОК-СХЕМЫ ПРОЦЕДУР

5.1.1 iteration

5.1.2newton

5.1.3HalfDivide

5.1.4Chordes

6 ПРОВЕРКА СЧЕТА ПО ПРОГРАММЕ

При сравнении данных, полученных при решении задачи выяснилось, что наиболее быстрыми оказались методы касательных и итерация.Эти методы вычислили значение корня необходимой точности за 3 прохода. Наиболее медленным оказался метод половинного деления. Метод хорд вычислил корень необходимой точности за 4 прохода.

ЗАКЛЮЧЕНИЕ

В данном курсовом проекте я реализовал программу расчета задачи симплекс – метода. Программа была написана мной на объектно-ориентированном языке С++ в среде разработки Borland C++ Bulder 6. Данная среда программирования довольно широко охватывает потребности объектно-ориентированного программирования – она не только имеет огромный набор уже готовых компонентов, созданных в ней же самой, но и позволяет легко создавать свои объекты. Благодаря этой особенности, все компоненты сторонних разработчиков ничем не отличаются от стандартного набора и не требуют особых ухищрений, при добавлении их в среду и использовании в ней.

ЛИСТИНГ ПРОГРАММЫ

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include <stdlib.h>

#include <math.h>

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

#define ABS(A) ((A) >= 0 ? (A) : -(A))

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

doublefs(doublex)// первая производная

{

return 15*x*x-1;

}

//---------------------------------------------------------------------------

doublef(doublex) // исходное уравнение

{

return 5*x*x*x-x-1;

}

//---------------------------------------------------------------------------

long double f1(long double x) // сжимающая функция

{

return x*x;

}

//---------------------------------------------------------------------------

void newton(double a, double b)// касательные

{

double c,cnext,c1;

double ex[6] = { 0.01, 0.001, 0.0001, 0.00001, 0.000001, 0.0000001 };

int i,count=0;

c=(a+b)/2; // подсчитал первое и нулевое значение

cnext=c-(f(c)/fs(c));

for ( i = 0; i < 6; i++)

{

while (ABS(cnext-c)>ex[i])

{

c=cnext;

cnext=c-(f(c)/fs(c));

count++;

}

Form1->StringGrid1->Cells[3][i+1]=IntToStr(count);

}

}

//---------------------------------------------------------------------------

void iteration(double a, double b)

{

long double x,xnext;

long double ex[6] = { 0.01, 0.001, 0.0001, 0.00001, 0.000001, 0.0000001 };

int i,count=0;

x=(a+b)/2;

xnext=f1(x);

for ( i = 0; i < 6; i++)

{

while (ABS(xnext-x)>=ex[i])

{

x=xnext;

xnext=f1(x);

count++;

}

Form1->StringGrid1->Cells[4][i+1]=IntToStr(count);

}

}

//---------------------------------------------------------------------------

void HalfDivide(double a, double b)

{ double c;

int i,count=0;

double epsilon;

double ex[6] = { 0.01, 0.001, 0.0001, 0.00001, 0.000001, 0.0000001 };

for ( i = 0; i < 6; i++)

{

while (ABS(b-a)>ex[i])

{

c=(a+b)/2.0;

if(f(a)*f(c)<0.0)

{

b=c;

}

else

{

a=c;

}

count=count+1;

}

Form1->StringGrid1->Cells[1][i+1]=IntToStr(count);

}

}

//---------------------------------------------------------------------------

void Chordes(double a, double b)

{ int i,count=0;

double ex[6] = { 0.01, 0.001, 0.0001, 0.00001, 0.000001, 0.0000001 };

for ( i = 0; i < 6; i++)

{

while(ABS(b-a)>ex[i])

{

a = b - ((b - a) * f(b)/(f(b) - f(a)));

b = a - ((a - b) * f(a)/(f(a) - f(b)));

count++;

}

Form1->StringGrid1->Cells[2][i+1]=IntToStr(count);

}

}

//---------------------------------------------------------------------------

void ShowNotice()

{

MessageDlg("Задача решена", mtInformation, TMsgDlgButtons() << mbOK,1200);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

int i,j;

double c;

int count=0;

double a, b;

a=StrToFloat(Edit3->Text);

b=StrToFloat(Edit4->Text);

iteration(a,b);

Chordes(a,b);

HalfDivide(a,b);

newton(a,b);

ShowNotice();

Label1->Visible=true;

Label3->Visible=true;

Label4->Visible=true;

Label5->Visible=true;

for (i=1;i<=StringGrid1->RowCount-1;i++)

{

Series1->AddXY(i,StrToInt(StringGrid1->Cells[1][i]),clBlack);

Series8->AddXY(i,StrToInt(StringGrid1->Cells[3][i]),clBlack);

Series5->AddXY(i,StrToInt(StringGrid1->Cells[2][i]),clBlack);

Series2->AddXY(i,StrToInt(StringGrid1->Cells[4][i]),clBlack);

}

Form1->StringGrid1->Visible=True;

Form1->Chart1->Visible=True;

Form1->Chart2->Visible=True;

Form1->Chart3->Visible=True;

Form1->Chart4->Visible=True;

}

//ShowNotice();

void__fastcallTForm1::FormCreate(TObject*Sender) // внешний вид таблицы , а также разметка и действия обьектов при старте формы

{

int i;

Form1->StringGrid1->ColCount=5;

Form1->StringGrid1->RowCount=7;

Form1->StringGrid1->Cells[1][0]="Метод половинного деления";

Form1->StringGrid1->Cells[2][0]="Метод хорд";

Form1->StringGrid1->Cells[3][0]="Метод касательных";

Form1->StringGrid1->Cells[4][0]="Метод итераций";

Form1->StringGrid1->Cells[0][1]="0.01";

Form1->StringGrid1->Cells[0][2]="0.001";

Form1->StringGrid1->Cells[0][3]="0.0001";

Form1->StringGrid1->Cells[0][4]="0.00001";

Form1->StringGrid1->Cells[0][5]="0.000001";

Form1->StringGrid1->Cells[0][6]="0.0000001";

for (i=1;i<5;i++)

Form1->StringGrid1->ColWidths[i]=175;

Form1->StringGrid1->RowHeights[0]=30;

Form1->StringGrid1->ColWidths[0]=100;

Edit1->Clear();

Edit3->Clear();

Edit4->Clear();

}

//---------------------------------------------------------------------------

24

Соседние файлы в папке курсовая docx100