- •Томский государственный университет систем управления и радиоэлектроники (тусур)
- •Курсовая работа на тему
- •Оглавление
- •Тема работы
- •5.3.Вычисление интеграла методом левых прямоугольников
- •5.4.Точное решение интеграла
- •5.5.Абсолютная и относительная погрешность вычисления
- •6.Описание методики тестирования программы
- •7.Руководство пользователя по работе с программой.
- •8.Блок-схема программы
- •9.Распечатка текста программы
- •Integral.Cpp– вычисление интеграла методом левых прямоугольников и получение точного решения интеграла
- •10.Выводы по работе
- •11.Использованная литература
7.Руководство пользователя по работе с программой.
При запуске программы предоставляется выбор: ввести данные с клавиатуры или ввести название файла, из которого необходимо прочесть эти данные.
При вводе данных необходимо учесть, что:
Пределы интегрирования (x1и x2) должны иметь значения от -1000 до 1000, их разность не должна быть нулевой;
Коэффициенты в уравнениях являются (a, b, c) являются вещественными числами;
Число интервалов разбиения (n) - натуральное число не более 500.
При нарушении этих требований ввод данных необходимо повторить.
Файл с исходными данными должен иметь следующую структуру данных:
Значения x1,x2,a, b, c,n, разделенные пробелами или знаками переноса на следующую строку.
Если файл будет не найден, ввод необходимо повторить.
После корректного ввода данных будет отображены для заданных значений:
Значение интеграла, вычисленного методом левых прямоугольников;
Точное значение интеграла;
Абсолютная погрешность вычисления;
Относительная погрешность вычисления.
Для каждого из 3х уравнений:
;
;
.
И отображены графики этих уравнений для заданных исходных данных.
8.Блок-схема программы
Главная программа проекта
Вычисление интеграла методом левых прямоугольников
Вычисление точного значения интеграла
Вычисление значение функции с номером k
Вычисление значение первообразной от функции с номером k
Отображение графика одного уравнения с номером kна области отminxдоminyпо вертикали
Отображение трех графиков на одном экране
9.Распечатка текста программы
Main.cpp– главный элемент проекта
# include <iostream.h>
# include <conio.h>
# include <stdio.h>
# include <process.h>
# include <string.h>
#include "integral.cpp"
# ifndef __fstream_h
# include <fstream.h>
# endif
#include "graph.cpp"
void main()
{
float a, b, c,//коэффициенты уравнения
x1, x2;//пределы интегрирования
int n;//число интервалов разбиения
clrscr();
int successVubor,//успешный выбор команды меню и корректный выбор исходных значений
successVvod;//успещный ввод данных
do
{
cout<<"\nVvod dannuh:\n 1. S klaviatyru;\n 2. Iz faila;\n e. Vuhod.\n";
successVubor = 0;
switch(getch())
{
case '1'://ввод исходных данных с клавиатуры
do
{
fflush(stdin);//очистка буфера
cout<<"\nVvedite levuj predel integrirovaniya: ";
if((scanf("%f",&x1))==0)//если введено не число
{
cout<<"Tol'ko chislovoe znachenie!\n";
successVvod = 1;
}
else successVvod = 0;
}
while(successVvod);//пока не будет введено число
do
{
fflush(stdin);//очистка буфера
cout<<"Vvedite pravuj predel integrirovaniya: ";
if((scanf("%f",&x2))==0)//если введено не число
{
cout<<"Tol'ko chislovoe znachenie!\n";
successVvod = 1;
}
else successVvod = 0;
}
while(successVvod);//пока не будет введено число
do
{
fflush(stdin);//очистка буфера
cout<<"Vvedite znachenie a: ";
if((scanf("%f", &a))==0)//если введено не число
{
cout<<"Tol'ko chislovoe znachenie!\n";
successVvod = 1;
}
else successVvod = 0;
}
while(successVvod);//пока не будет введено число
do
{
fflush(stdin);//очистка буфера
cout<<"Vvedite znachenie b: ";
if((scanf("%f", &b))==0)//если введено не число
{
cout<<"Tol'ko chislovoe znachenie!\n";
successVvod = 1;
}
else successVvod = 0;
}
while(successVvod);//пока не будет введено число
do
{
fflush(stdin);//очистка буфера
cout<<"Vvedite znachenie c: ";
if((scanf("%f", &c))==0)//если введено не число
{
cout<<"Tol'ko chislovoe znachenie!\n";
successVvod = 1;
}
else successVvod = 0;
}
while(successVvod);//пока не будет введено число
do
{
fflush(stdin);//очистка буфера
cout<<"Vvedite kolichestvo otrezkov razbienij: ";
if((scanf("%d", &n))==0)//если введено не число (округляется, если введено нецелое)
{
cout<<"Tol'ko celoe chislovoe znachenie!\n";
successVvod = 1;
}
else successVvod = 0;
}
while(successVvod);//пока не будет введено число
break;
case '2'://чтение данных из файла
do
{
cout<<"\nVvedite pyt' i imya faila (vuhod iz programmu: e): ";
char fileName[40];
cin>>fileName;
if(!strcmp(fileName, "e"))
exit(1);
ifstream stream(fileName, ios::in);
if(stream == NULL)
cout<<"Oshibka otkrutiya faila. Prover'te pravilnost pyti faila.";
else
{
stream>>x1>>x2>>a>>b>>c>>n;
stream.close();
break;
}
}
while(1);
break;
case 'e'://выход
exit(1);
break;
default://любая другая клавиша = неудачный выбор подменю
successVubor = 1;
}
if(!successVubor)//если был осуществлен ввод исходных данных => проверка на их корректность
{
if(x1 == x2)
{
cout<<"Oshibka. Nylevoj interval integrirovaniya. Povtorite vvod.";
successVubor = 1;
}
if((x1 > 1000) || (x1 < -1000) || (x2 > 1000) || (x2 < -1000))
{
cout<<"Oshibka. Predelu integrirovaniya doljnu but' ot -1000 do 1000. Povtorite vvod.";
successVubor = 1;
}
if((n < 1) || (n > 500))
{
cout<<"Oshibka. Chislo razbienij doljno but 0 < n <= 500.";
successVubor = 1;
}
}
}
while(successVubor);//пока не будет осуществлен корректный ввод исходных данных
for(int k = 0; k < 3; k++)//для каждого из 3х уравнений
{//вычисляем приближенное значение интеграла, точное значение, абсолютную и относительную погрешности
float pribl = integr(x1, x2, n, a, b, c, k),
toch = integrToch(x1, x2, a, b, c, k);
cout<<"\n\nReshaem integral ot "<<(k + 1)<<" yravneniya.\nNaidennoe znachenie: "<<
pribl<<
"\nTochnoe znachenie: "<<toch<<
"\nAbsolytnaya pogr: "<<fabs(pribl - toch)<<
"\nOtnositelnaya pogr: "<<fabs((pribl - toch)) / toch * 100;
}
getch();
showGraphs(x1, x2, n, a, b, c);//отображаем графики этих уравнений
}