Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
решение интеграла методом левых прямоугольников...docx
Скачиваний:
7
Добавлен:
22.09.2019
Размер:
550.85 Кб
Скачать

5.Отображение трех графиков на одном экране.

Заключение.

Изучен теоретический материал для решения задачи создания программы вычисления интеграла методом левых прямоугольников. Разработан алгоритм решения поставленной задачи, разработана и протестирована программа на языке С++, выявленные ошибки в ходе тестирования устранены, контрольное тестирование ошибок не показала. Изучен и применен теоретический материал для работы с графикой на языке C++.

Использованная литература:

  1. Wikipedia. Метод прямоугольников.

http://ru.wikipedia.org/wiki/Метод_прямоугольников. Интернет ресурс. Вход свободный.

  1. Комбинаторика. http://webmath.exponenta.ru/s/c/algebra/content/chapter4/section3/paragraph9/theory.html. Интернет ресурс. Вход свободный.

Приложение а.

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);//отображаем графики этих уравнений

}