Описание методики тестирования программы




Так как вычисления происходят по статичным формулам, удовлетворительными будут тесты с каждой функцией

Ниже приведены некоторые результаты работы программы при вводе данных для известных функций.

Таблица 4.1 – Описание тестов программы

Входные данные Результат
1 4 5 -10 10 The approximate value of the integral: 101.103 The exact value of the integral: 100.847 Absolute error: -0.256148 Relative error: 0.253996%
1 4 5 -100 100 The approximate value of the integral: 1000.01 The exact value of the integral: 1000.08 Absolute error: 0.0692462 Relative error: 0.00692407%
1 -1 5 10 50 The approximate value of the integral: 199.85 The exact value of the integral: 201.695 Absolute error: 0.313153 Relative error: 0.263796%

 

 


Руководство пользователя по работе с программой

Установка программы.

Скомпилировать программу g++ main.cpp –o outputfile

Запуск программы.

Запустить исполняющий файл./outputfile

Рисунок 5.2 – Интерфейс программы

Ввод данных с клавиатуры.

Следовать указаниям, появляющимся на экране.

Рисунок 5.3 – Пример работы с программой

Ввод данных из файла.

Необходимо ввести имя файла. Файл должен находиться в одной директории с программой.

Файл должен содержать информацию в следующем виде.

Таблица 5.1 – Пример оформления входного файла.

Input.txt
a b c mini max n

 

Где:-1000<=a,b,c<=1000, -1000<= mini,max<=1000, 2<=n<=5

Примечание.

Программа тестировалась и корректно работает в системе

Ubuntu 18.04, x86_64, RAM-4Gb, CPU-1.8Ggz

Скомпилированная программа занимает 19,264 байт


Заключение

Разработанный программный продукт соответствует поставленным задачам, протестирован и готов для работы.

Программа вычисления интеграла методом Гаусса-Лежандра может найти практическое применение, как и в учебном процессе так и в научных и практических целях.


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

1. Статья с неустановленным авторством https://qps.ru/ZuM60, - Режим доступа https://qilab.phys.msu.ru, свободный.(Дата обращения 10.06.2018)

 


Приложение А

Блок-схема программы

Приложение Б

Листинг программы

Файл main.cpp

#include <fstream>

#include <cstring>

#include <iostream>

#include <cmath>

#include "input_number.cpp"

using namespace std;

double a1, b1, c1, a, b;

int n,func_chose,type_input;

 

 

void start(){

cout << "****This program can help you calculate integral of Gauss-Legendre method****\n\

\n\

***Chose the function for next working***\n\

\n\

1.y = a*x^3 + b*x + c\n\

2.y = a *sin(x+b)+c\n\

3.y=a/(x+b)+c\n" << endl;

}

 

double function(double x){

double func_array[3] = {a1*pow(x,3)+b1*x+c1, a1*sin(x+b1)+c1, (a1/(x+b1))+c1};

return func_array[func_chose];

}

 

double primitive_function(double x){

double func_array[3] = {(a1*pow(x,4))/4 +(b1*pow(x,2))/2+c1*x, -a1*cos(b1+x)+c1*x, a1*log(abs(b1+x))+c1*x};

}

 

int main(){

start();

func_chose = (int)input_number("Input yor function => ",1,3);

type_input = (int)input_number("1. keyboard input\n or \n2. File input\n",1.0,2.0);

if (type_input == 1){

a1 = input_number("Input A coefficient => ",-1000,1000);

b1 = input_number("Input B coefficient => ",-1000,1000);

c1 = input_number("Input C coefficient => ",-1000,1000);

a = input_number("Low limit integration => ",-1000,1000);

b = input_number("High limit integration => ",-1000,1000);

n = (int)input_number("Separate interval from 2 to 5 => ",2,5);

}

else {

 

int file_flag = 1;

int allgood_flag = 1;

 

 

while (allgood_flag)

{

string file_name;

cout<< "Type file_name => ";

cin >>file_name;

ifstream file(file_name);

file>>a1;

file>>b1;

file>>c1;

file>>a;

file>>b;

file>>n;

file.close();

 

if (a1+b1+c1+a+b+n!= 0) file_flag=0;

else{

cout<<"File is not exixt"<<endl;

}

 

if (a1>=-1000 && a1<=1000 && b1>=-1000 && b1<=1000 && c1>=-1000 && c1<=1000 && a>=-1000 && a<=1000 && b>=-1000 && b<=1000 && n>=2 && n<=5) allgood_flag = 0;

else cout<<"Incorrect data in file " << endl;

 

 

}

 

}

 

double weight[4][5]={

{1,1},

{0.555555556, 0.888888889, 0.555555556},

{0.347854845, 0.652145155, 0.652145155, 0.347854845},

{0.236926885, 0.478628670, 0.568888889, 0.478628670, 0.236926885}

};

 

 

double sum = 0;

double step = (b-a)/n;

 

double Ig = 0;

double h=(b-a)/n;

double xi;

double Ei;

for (int i=1; i<=n; i++)

{

xi = a +i*h;

Ei = ((b+a)/2)+((b-a)/2)*xi;

Ig+=((b-a)/2)*weight[n-2][i-1]*function(Ei);

}

 

double Integral_of_gauss = Ig;

cout<< "\n\nThe approximate value of the integral: " << Integral_of_gauss <<endl;

 

double Integral_target=primitive_function(b)-primitive_function(a);

cout<< "The exact value of the integral: " << Integral_target <<endl;

 

double absolute_error=(abs(Integral_target) - abs(Integral_of_gauss));

cout<< "Absolute error: " << absolute_error <<endl;

 

double relative_error = (abs(absolute_error)/Integral_target) * 100;

cout<< "Relative error: " << relative_error << "%" <<endl;

 

return 0;

}

 

Файл input_number.cpp

#include <cstring>

using namespace std;

double input_number(char prompt[], double lowest, double biggest) {

double result;

do {

cout << prompt;

cin >> result;

if (cin.fail()) {

cin.clear();

cin.ignore(100500, '\n');

cout << "Bad number:(" << endl;

} else if (!(result >= lowest && result <= biggest)) {

cout << "Bad number:(" << endl;

}

} while (result < lowest or result > biggest);

 

return result;

}

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: