Министерство образования Республики Беларусь
УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ
МОГИЛЕВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра "ЭП и АПУ"
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
К курсовой работе по дисциплине
“Вычислительная техника и программирование”
Выполнил студент группы ЭП-012
Гончаров А. М.
Могилев, 2003
Министерство образования Республики Беларусь
УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ
МОГИЛЕВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра "ЭП и АПУ"
Курсовая работа
Разработка программы расчета определенного интеграла по формуле Буля по схеме двойного пересчета с заданной точностью
Пояснительная записка
БУЛ 07.00.00.000 ПЗ
Руководитель ст. преподаватель
______________ Абрашкин
В.П.
Студент группы ЭП-
02
______________ Гончаров
А.М.
Могилев, 2003
Содержание
Введение
1 Постановка задачи
1. Общая характеристика задачи
2. Анализ литературных источников
3. Расчётные формулы метода
1. Разработка алгоритма задачи
1. Описание данных , используемых для решения задачи
2. Описание схемы программы
2. Кодирование программы
1. Описание структуры разрабатываемого пакета
2. Описание используемых типов данных
3. Проектирование интерфейса программы
3. Тестирование программы
4. Разработка гипертекстового варианта документа
Заключение
Список используемых источников
Приложение А. Твёрдая копия
Приложение Б. Результаты тестирования программы
Приложение В. Тестирование данных в математическом пакете
Приложение Г. Гипертекстовый вариант документа
Приложение Д. Акт приёмки программы
Введение
Данный курс «Вычислительной техники и программирования» мы заканчиваем
курсовым проектом, в котором нам следует разработать программу согласно
полученному заданию.
Стремительное развитие науки и техники, в том числе и вычислительной, требует знания её от каждого, считающего себя образованным, человека. Из-за всё возрастающей сложности многих объектов требуется улучшенная организация процесса программного моделирования и высокая степень образованности специалистов, а повышение требований к функционированию этих объектов делают нашу задачу еще более сложной. Для решения этой задачи применяется математическое моделирование, которое осуществляется опять же с помощью вычислительной техники, в частности компьютера.
Нельзя не упомянуть о том, что широкое применение в современной науке и технике получили дифференциальные уравнения различной степени и вида сложности. В частности, они применяются в электротехнике, машиностроении, электронике, разработке различного рода аппаратного обеспечивания, математике, физике и других видах деятельности человека.
Наша задача: создать способ быстрого, качественного, удобного и недорого решения поставленных перед нами задач.
В данной курсовой работе мы применили численные методы нахождения определенного интеграла.
Данной курсовой работой мы заканчиваем цикл лекций и лабораторных работ по изучению среды программирования C Builder v5.0, программы выполнения расчетов MathCad, работы в многофункциональном текстовом редакторе Word XP, программы выполнения чертежей AutoCad и использованию функциональных возможностей операционной системы Windows XP. Все эти знания я постарался использовать в своем курсовом проекте.
1 Постановка задачи
1.1 Общая характеристика задачи
Численное интегрирование используется для приближенного поиска значения определенного интеграла непрерывной функции f(x) на заданном интервале [a,b] согласно выражению
[pic], ( 1.1 ) где Q[f] – формула численного интегрирования;
E[f] – ошибка усечения.
Формула численного интегрирования называется формулой квадратуры. В общем виде она может быть представлена как сумма
[pic] ( 1.2 ) где X0, ... , XK – узлы квадратуры;
(0, ... , (K – веса квадратуры.
Степень точности формулы квадратуры равна положительному целому числу n. Величина ошибки отсечения определяется в общем случае согласно выражению
E[f]=K(f(n+1)(c), ( 1.3 ) где К – определенный коэффициент, n – степень точности.
1.2 Анализ литературных источников
В зависимости от вида выражения квадратуры для нахождения значения определенного интеграла используются следующие численные методы:
1) правых, левых и средних прямоугольников;
2) трапеций;
3) формулы Симпсона и Буля;
4) Монте-Карло;
5) формулы Гаусса-Лежандра,
6) рекуррентные формулы.
В зависимости от степени производной, учитываемой численным методом,
определяется степень точности метода.
Шаг интегрирования может быть постоянным на всём расчётном интервале
аргумента X или изменяться в зависимости от величины ошибки определения
функции.
1.3 Расчётные формулы метода
Составная формула Буля с порядком m=4 имеет вид
[pic]
[pic] ( 1 )
2 Разработка алгоритма решения задачи
2.1 Описание данных, используемых для решения задач
В данной задаче использовались следующие данные:
1) исходные(входные)данные:
- начало отрезка а;
- конец отрезка b;
- точность.
2) выходные результаты решения:
-значение интеграла.
2.2 Описание схемы программы
Схема алгоритма составлена в соответствии с математическим описанием курсовой работы и отображает последовательность операций в программе. При ее изображении используются правила и требования ГОСТ 19.701.90.
Произведено выделение основных этапов в виде подпрограмм, выполняющих следующие действия:
а) ввод исходных данных с клавиатуры; б) выполнение расчета; в) вывод полученных результатов на экран и в файл.
Все подпрограммы выполнены в виде процедур [2]. Основные процедуры и программа выполнены на листе. При этом описание функционального назначения блоков схемы алгоритма приведено в комментариях.
3 Кодирование программы
3.1 Описание структуры разрабатываемого пакета
Программа курсовой работы разработана в среде визуального
программирования CBuilder 5.0 и состоит из головной программы,
блоковUnit1, Unit2, Unit3.
Программа выполнена на основе структурного программирования и содержит
следующие процедуры и функции: а) f; б) Вооl.
3.2 Описание используемых типов данных
В данной задаче использовались следующие типы данных:
1) переменная: a,b,e,I ,h,s,N типа float;
2) локальные переменные для перебора элементов массивов: i,j,k типа int;
3.3 Проектирование интерфейса программы
Основные процедуры, используемые при составлении
алгоритма:
а) f-вызывает расчётную функцию;
б) Bool- расчёт определённого интеграла.
4 Тестирование программы
4.1 Тестирование программы в математическом пакете.
[pic]
[pic]
4.2 Тестирование программы
Для тестирования использована функция f(x)=5*x5-x3.
[pic]
Рисунок 1- Основное окно.
[pic]
Рисунок 2 – Ввод данных.
Тестирование проводилось на ЭВМ со следующими характеристиками:
- центральный процессор – Intel Pen tium 2.2 GHz;
- оперативная память – 1024Mb;
- видеоадаптер – GeForce 4 64 Mb;
- монитор – Sony Trinitron;
- операционная система – Windows XP.
5 Разработка гипертекстового варианта документа
[pic]
Рисунок 3-Гипертекстовый вариант
Для перевода текста программы в формат HTML использовалась команда приложения MicrosoftWord (пакета Office XP) “Сохранить как Web-страницу”.
Вид полученного документа, отображаемого InternetExplorer 5.0 представлен на рисунке 3.
Заключение
В данной курсовой работе разработана программа расчета определенного интеграла по формуле Буля по схеме двойного пересчета с заданной точностью
При работе над программой пройдены все этапы создания программных продуктов. Получены навыки в математическом описании задачи, разработке алгоритма программы, составлении текста программы и проведении тестирования программы. Использована система программирования C Builder v5.0.
Список использованных источников
1 Крылов В.И. Вычислительные методы высшей математики. Т.1./ Под ред. И.П.
Мысовских. — Мн.: Вышэйшая школа, 1972.
2 Мудров А.Е. Численные методы для ПЭВМ на языках Бейсик, Фортран, Паскаль
- Томск: МП Таско", 1992
3 Херхагер М., Партолль X. MathCAD 2000; полное руководство: Пер. с нем. -
К.: Издательская группа BHV, 2000. - 416с.
4 Гусак А.А., Гусак ГМ. Справочник по высшей математике. - Мн.: Наука и
техника, 1991.
Приложение А
(обязательное)
Твёрдая копия
Project1.cpp
//--------------------------------------------------------------------------
-
#include
#pragma hdrstop
USERES("Project1.res");
USEFORM("Unit1.cpp", Form1);
USEFORM("Unit2.cpp", Form2);
USEFORM("Unit3.cpp", Form3);
//--------------------------------------------------------------------------
-
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{ try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2);
Application->CreateForm(__classid(TForm3), &Form3);
Application->Run();
} catch (Exception &exception)
{
Application->ShowException(&exception);
} return 0;
}
//--------------------------------------------------------------------------
-
Unit1.cpp
//--------------------------------------------------------------------------
-
#include
#include
#include
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include
//--------------------------------------------------------------------------
-
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
float a=0,b=10,e=0.01,I[2];
float f(float x)
{ return 5*pow(x,5)-pow(x,3);
}
//-------------------------------------
void Bool()
{ float h,s,x[5],N=2; int i,l; do
{ for(l=0;lSimpleText="Выход";
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::N1Click(TObject *Sender)
{
Form2->Show();
SB1->SimpleText="Ввод данных закончен";
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::N2Click(TObject *Sender)
{
Bool();
Form3->Show();
SB1->SimpleText="Произведен расчет";
}
//--------------------------------------------------------------------------
-
Unit2.cpp
//--------------------------------------------------------------------------
-
#include
#include
#pragma hdrstop
#include "Unit2.h"
//--------------------------------------------------------------------------
-
#pragma package(smart_init)
#pragma link "ibctrls"
#pragma link "ibreg"
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm2 *Form2;
extern float a,b,e;
//--------------------------------------------------------------------------
-
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//------------------------------------------
//--------------------------------------------------------------------------
-
void __fastcall TForm2::Button2Click(TObject *Sender)
{
Form2->Close();
}
//--------------------------------------------------------------------------
-
float __fastcall TForm2::checkf(TObject *Sender,TEdit *e1,float w)
{ float buf; do{ try
{ if(e1->Text!="") buf=StrToFloat(e1->Text);else buf=w;
} catch(const EConvertError &e)
{ int j=Application->MessageBox("Неверные данные", NULL, MB_OK); buf=-1; e1->Text=FloatToStr(w);
}}while((buf==-1)); return buf;
}
//----------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{ e=checkf(Sender,Edit4,e); a=checkf(Sender,Edit1,a); b=checkf(Sender,Edit2,b);
Form2->Close();
}
//--------------------------------------------------------------------------
-
void __fastcall TForm2::FormCreate(TObject *Sender)
{
Edit1->Text=FloatToStr(a);
Edit2->Text=FloatToStr(b);
Edit4->Text=FloatToStr(e);
}
//--------------------------------------------------------------------------
-
void __fastcall TForm2::GroupBox1Click(TObject *Sender)
{
}
//--------------------------------------------------------------------------
-
Unit3.cpp
//--------------------------------------------------------------------------
-
#include
#pragma hdrstop
#include "Unit3.h"
//--------------------------------------------------------------------------
-
#pragma package(smart_init)
#pragma link "PERFGRAP"
#pragma resource "*.dfm"
TForm3 *Form3;
extern float I[2];
//--------------------------------------------------------------------------
-
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------
-
void __fastcall TForm3::BitBtn1Click(TObject *Sender)
{
Form3->Close();
}
//--------------------------------------------------------------------------
-
void __fastcall TForm3::FormCreate(TObject *Sender)
{
SaveDialog1->InitialDir= GetCurrentDir();
Edit1->Text=FloatToStr(I[1]);
}
//--------------------------------------------------------------------------
-
void __fastcall TForm3::Button1Click(TObject *Sender)
{
TStringList *s; s= new TStringList;
SaveDialog1->Execute(); s->Add(" Значение интеграла равно"+FloatToStr(I[1])); s->SaveToFile(SaveDialog1->FileName); delete s;
}
//--------------------------------------------------------------------------
-
void __fastcall TForm3::Label1Click(TObject *Sender)
{
}
//--------------------------------------------------------------------------
-
Приложение Б
Результаты тестирования программы.
[pic]
Рисунок 4 - Результат тестирования
Приложение В.
Тестирование данных в математическом пакете.
[pic]
Приложение Г
Гипертекстовый вариант документа
1 Постановка задачи
1 Постановка задачи
1.1 Общая характеристика задачи
Численное интегрирование используется для приближенного поиска значения определенного интеграла непрерывной функции f(x) на заданном интервале [a,b] согласно выражению
,
(
1.1 )
где Q[f] – формула численного интегрирования;
E[f] – ошибка усечения.
Формула численного интегрирования называется формулой квадратуры. В общем виде она может быть представлена как сумма
( 1.2
)
Приложение Д
Акт приёмки программы
Разработанная в ходе выполнения курсового проекта программа расчета определенного интеграла по формуле Буля по схеме двойного пересчета с заданной точностью работоспособна и полностью соответствует требованиям задания.
Студент гр. ЭП-012
Гончаров А.М.
Руководитель работы старший преподаватель кафедры «ЭП и АПУ»
Абрашкин В.П.
-----------------------
БУЛ 07.00.00.000 ПЗ
Лист
[pic]
[pic]
[pic]
[pic]
[pic]
Дата
Подп.
№докум.
Лист
Изм.
БУЛ 07.00.00.000 ПЗ
Лист
[pic]
[pic]
[pic]
[pic]
[pic]
Дата
Подп.
№докум.
Лист
Изм.
[pic]
Листов
Лист
Лит.
Утв.
Н.контр.
Н.контр.
Пров.
Проверил
Разраб.
Дата
Подп.
№ докум.
БУЛ 07.00.00.000 ПЗ
БУЛ 07.00.00.000 ПЗ
Лист
[pic]
[pic]
[pic]
[pic]
[pic]
Дата
Подп.
№докум.
Лист
Изм.
БУЛ 07.00.00.000 ПЗ
Лист
[pic]
[pic]
[pic]
[pic]
[pic]
Дата
Подп.
№докум.
Лист
Изм.
БУЛ 07.00.00.000 ПЗ
Лист
[pic]
[pic]
[pic]
[pic]
[pic]
Дата
Подп.
№докум.
Лист
Изм.
БУЛ 07.00.00.000 ПЗ
Лист
[pic]
[pic]
[pic]
[pic]
[pic]
Дата
Подп.
№докум.
Лист
Изм.
Лист
[pic]
[pic]
[pic]
[pic]
[pic]
Дата
Подп.
№докум.
БУЛ 07.00.00.000 ПЗ
Лист
[pic]
[pic]
[pic]
[pic]
[pic]
Дата
Подп.
№докум.
Лист
Изм.
Лист
Изм.
Изм.
Лист
№докум.
Подп.
Дата
[pic]
[pic]
[pic]
[pic]
[pic]
Лист
БУЛ 07.00.00.000 ПЗ
БУЛ 07.00.00.000 ПЗ
Лист
[pic]
[pic]
[pic]
[pic]
[pic]
Дата
Подп.
№докум.
Лист
Изм.
БУЛ 07.00.00.000 ПЗ
МГТУ гр. ЭП-012
Разработка программы расчета определенного интеграла по формуле Буля по схеме двойного пересчета с заданной точностью
Гончаров
Абрашкин
[pic]
[pic]
[pic]
[pic]
Лист
Изм.