Разработка программы на языке 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("---------------------------------------------------------