Разработка программы на языке C++

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

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

?ента. А вместо дифференциальных операторов - разностные. Будем называть параметром сетки такую величину h, что расстояние между любыми двумя соседними узлами сетки не превосходит h.

В моей программе использован метод Рунге-Кутта четвертого порядка, вот вид этого уравнения:

 

уi+1=уi+(k1+2k2+2k3+k4)/6,=hf(xi,yi),=hf(xi+h/2, yi+k1/2),=hf(xi+h/2, yi+k2/2),=hf(xi+h, yi+k3),+1=xi+h,

где уi+1,уi - значения искомой функции в точках xi+1, xi соответственно, индекс i показывает номер шага интегрирования, h - шаг интегрирования. Начальные условия при численном интегрировании учитываются на нулевом шаге: i=0, x=x0, y=y0

 

 

Заключение

 

В ходе выполнения курсовой работы я закрепила знания работы с программой C++Builder . Благодаря уникальному сочетанию удобства разработки пользовательских интерфейсов, компонентной архитектуры, однотипности доступа к разнообразным базам данных было проще программировать.

 

 

Список использованных источников

 

1. Шилдт, Г. А. Программирование на C и C++ для Windows / Г. Шилдт - М.: BHV, 1996.-235с.

. Петзолд, Ч. Р. Программирование для Windows / Ч. Петзолд - Санк-Петербург: BHV, 1997.-345с.

. Страуструп, Б. В. Язык программирования Си++ / Б. Страуструп- М: Радио и связь, 1991.-468с.

. Архангельский, В.В. Программирование в С++ Builder 6 / В.В. Архангельский - М.: Бином, 1998г.- 560с.

. Подбельский, В.В. Программирование на языке Си / В.В Подбельский. - М: Финансы и статистика, 2002. - 600с.

 

 

Разработка программы на языке C++

 

Содержимое файла Unit1.h

 

//файл Unit1.h

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

#ifndef Unit1H

#define Unit1H

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

">#include

">#include

">#include

">#include

">#include

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

classTForm1 : publicTForm//Создание нового класса формы

{

__published:// Органы управления

TMemo *Screen;//Поле вывода данных

TButton *Solve;//Кнопкарешить

TButton *approx;//Кнопка аппроксимировать

TButton *CalcDy;//Кнопка рассчитать погрешность

TButton *Draw;//Кнопка построить график

TGroupBox *Draws;*Solution;//Кнопки выбора типа графика*AppFunc;*Mistake;*Operation;*Clear;//Кнопка отчистить*Timer1;//Таймер__fastcall FormCreate(TObject *Sender);__fastcall SolveClick(TObject *Sender);__fastcall approxClick(TObject *Sender);__fastcall ClearClick(TObject *Sender);__fastcall CalcDyClick(TObject *Sender);__fastcall SolutionClick(TObject *Sender);__fastcall AppFuncClick(TObject *Sender);__fastcall MistakeClick(TObject *Sender);__fastcall FormShow(TObject *Sender);__fastcall Timer1Timer(TObject *Sender);__fastcall DrawClick(TObject *Sender);:// User declarations:// User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------PACKAGE TForm1 *Form1;

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

#endif

 

Содержимое файла Unit1.cpp

 

//ФайлUnit1.cpp

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

#include

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.cpp"

#include

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

#pragma package(smart_init)

#pragma resource "*.dfm"1 *Form1;

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

//Описание глобальных переменных

#defineNONE 0 //Не требуется построения графика

#defineSOL 1 //График решения

#defineAPR 2 //График аппроксимирующей функции

#defineMIS 3 //График погрешности

intx_c=30,y_c=170; //Начало координат

double x0 = 0.5; //Интервалxk = 1.5; y0 = 0.6; //Начальное условие

double h = 0.1; //Шаг

double h_half = h/2.0; //Полушаг

intn = 2+(xk-x0)/h; //Количество узлов сетки

intg_type=NONE; //Вид графика для построения

double *knots; //Узлы сетки*knots_half; //Узлы сетки*solutions; //Значения решений*solutions_half; //Значения решений c полушагом*approxim; //Значения апроксимир. функции*correct; //Уточнённое решение*errors; //Значения поправок*approxim_correct; //Значения аппроксим. с поправкой[3][4]; //Система уравнений для поиска коэф. апр. функции

double Parab[3]={0,0,0}; //Коэффициенты аппроксимирующей функции

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

//Прототипы функций

doubleMy(double, double); //Функция в правой части диф.уравнения

double ApproxFunc(double); //Аппроксимирующая функция

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TForm1::FormCreate(TObject *Sender)

{

solutions = newdouble [n]; //Выделение памяти под массивы значений

approxim = new double [n];= new double [n];= new double [n];_half = new double [n*2];= new double [n];_correct = new double [n];_half= new double [n*2];(int i=0; i<n; i++) knots[i]=x0+i*h; //Вычисление узлов сетки

//Вычисление узлов сетки с полушагом(int i=0; i<2*n; i++) knots_half[i]=x0+i*h_half;

}

//---------------------------------------------------------------------------__fastcall TForm1::SolveClick(TObject *Sender)

{i;k1,k2,k3,k4;[0]=y0; //Начальное условие_half[0]=y0;->Enabled=true; //Разрешение ранее недоступных объектов управления

Solution->Enabled=true;

//Вычисления методом Рунге-Кутта 4 порядка

for(i=0; i<n-1; i++)

{=My(knots[i],solutions[i]);=My(knots[i]+h/2.0,solutions[i]+h/2.0*k1);=My(knots[i]+h/2.0,solutions[i]+h/2.0*k2);=My(knots[i]+h,solutions[i]+h*k3);[i+1]=solutions[i]+h/6*(k1*+2*k2+2*k3+k4);

}

//Вычисления методом Рунге-Кутта 4 порядка с полушагом

for(i=0; i<2*n-1; i++)

{=My(knots_half[i],solutions_half[i]);=My(knots_half[i]+h_half/2.0,solutions_half[i]+h_half/2.0*k1);=My(knots_half[i]+h_half/2.0,solutions_half[i]+h_half/2.0*k2);=My(knots_half[i]+h_half,solutions_half[i]+h_half*k3);_half[i+1]=solutions_half[i]+h_half/6*(k1*+2*k2+2*k3+k4);

}

//Вывод решения на экран

Screen->Lines->Add("Решение диф. уравнения");

Screen->Lines->Add("-------------------------------------------------------------------");(i=0; iAdd("x = " + AnsiString(knots[i]) +

"\t f(x,y) = " + AnsiString(solutions[i]));->Lines->Add("-------------------------------------------------------------------");

//Вывод решения с полушагом на экран

Screen->Lines->Add("Решение диф. уравнения c полушагом");

Screen->Lines->Add("-------------------------------------------------------------------");(i=0; iAdd("x = " + AnsiString(knots_half[i]) +

"\t f(x,y) = " + AnsiString(solutions_half[i]));>Lines->Add("---------------------------------------------------------