- •2. Методические указания к выполнению лабораторных работ
- •Лабораторная работа №1 Следование
- •Варианты индивидуальных заданий Выполнить поразрядные логические операции над машинными кодами
- •Пример программы
- •Лабораторная работа №2 Операторы ветвления
- •Варианты индивидуальных заданий
- •Пример разработки математической модели и схемы алгоритма решения задачи для варианта задания вида:
- •Текст программы
- •Лабораторная работа №3 Операторы цикла
- •Варианты индивидуальных заданий
- •Пример программы
- •Лабораторная работа №4 Статические массивы
- •Варианты индивидуальных заданий
- •Пример программы на обработку одномерного массива
- •Пример программы на обработку двумерного массива (матрицы)
- •Лабораторная работа №5 Динамические массивы
- •Варианты индивидуальных заданий
- •Пример программы на обработку одномерного массива
- •Пример программы на обработку двумерного массива (матрицы)
- •Лабораторная работа №6 Методы сортировки
- •Варианты индивидуальных заданий Методы сортировки
- •Области сортировки элементов матриц
- •Примеры программ
- •Лабораторная работа №7 Передача имён функций в качестве параметров
- •Текст программы
- •Лабораторная работа №8 Строки и текстовые файлы
- •Варианты индивидуальных заданий
- •Пример программы
- •Лабораторная работа №9 Структуры и файлы структур
- •Пример программы
- •Лабораторная работа №10 Линейные списки
- •Варианты индивидуальных заданий
- •Пример программы
- •Лабораторная работа №11 Стек, дек, очередь
- •Варианты индивидуальных заданий
- •Пример программы
- •Лабораторная работа №12 Классы
- •Варианты индивидуальных заданий
- •Примеры программ
- •Литература
Текст программы
//Определение области на плоскости, в которую попадает точка,
//и площади этой области аналитическим и программным способом
//методом криволинейных трапеций (средних прямоугольников).
//Рекурсия. Передача имен функций в качестве параметров.
#include<iostream.h>
#include<math.h>
//using namespace std ;
typedef double(*Tfun)(double) ;
double integral(double, double, double, double, Tfun, double) ;
double fun1(double x) ;
double fun2(double x) ;
double fun3(double x) ;
double fun4(double x) ;
double fun5(double x) ;
double fun6(double x) ;
double fun7(double x) ;
double fun8(double x) ;
double fun9(double x) ;
double fun10(double x) ;
int main()
{int i = 0 ; //номер области
float x, y, //координаты точки
s1, s2, s3, s4, s5 ; //площади областей
float eps = .00001, //точность вычисления
shag= .001, //начальный шаг вычисления
s ; //значение определённого интеграла
cout << '\n' << "Введите координаты точки: x,y " ;
cin >> x >> y ;
if(y > 0 && y < 2 && x > 1 && x < 2 && x * x + (y - 1) * (y -1) >1)
{cout << "Точка в области M1. " << endl ;
i = 1 ;
}
else if(x > -2 && y < 1 && x < -1 && y > 0 &&
(x + 1) * (x + 1) + y * y > 1 )
{cout << "Точка в области М2. " << endl ;
i = 2 ;
}
else if((x+1) * (x+1) + y * y < 1 && x * x + y * y < 1 && y > 0)
{cout << "Точка в области М3. " << endl ;
i = 3 ;
}
else if(x * x + y * y > 1 && (x - 1) * (x - 1) + y * y < 1 &&
x * x + (y + 1) * (y + 1) < 1)
{cout << "Точка в области М4. " << endl ;
i = 4 ;
}
else if(y < -1 && y > -2 && x < 0 && x > -1 &&
x * x + (y + 1) * (y + 1) > 1)
{cout << "Точка в области М5. " << endl ;
i = 5 ;
}
else cout << "Точка вне выделенных областей";
cout.precision(4) ; //число знаков после дес. точки
switch(i)
{case 1: cout << "Formula: S1 = " << (s1 = 2 - M_PI / 4) << endl ;
cout << "Integral:S1 = " << (s1 = integral(1, 2, shag, eps, fun4, s)
- integral(1, 2, shag, eps, fun2, s)) ;
break ;
case 2: cout << "Formula: S2 = " << (s2 = 1 - M_PI / 4) << endl ;
cout << "Integral:S2 = " << (s2 = integral(-2, -1, shag, eps, fun7, s)
- integral(-2, -1, shag, eps, fun3, s)) ;
break ;
case 3: cout << "Formula: S3 = " << (s3 = M_PI / 3 - sqrt(3) / 4) << endl ;
cout << "Integral:S3 = " << (s3 = integral(-1, -.5, shag, eps, fun1, s)
+ integral(-.5, 0, shag, eps, fun3, s)) ;
break ;
case 4: cout << "Formula: S4 = " <<(s4 = sqrt(3)/2+M_PI/3-M_PI/4-1) << endl ;
cout << "Integral:S4 = " <<(s4 = fabs(integral(.5,1,shag,eps,fun10, s))
- fabs(integral(.5, sqrt(3) / 2, shag, eps, fun9, s))
- fabs(integral(sqrt(3) / 2, 1, shag, eps, fun6, s))) ;
break ;
case 5: cout << "Formula: S5 = " << (s5 = 1 - M_PI / 4) << endl ;
cout << "Integral:S5 = " << (s5 = fabs(integral(-1,0,shag,eps,fun8, s))
- fabs(integral(-1, 0, shag, eps, fun5, s))) ;
}
return 0 ;
}
//нахождение определенного интеграла методом трапеции
double integral(double a, double b, double h, double eps, Tfun fun, double s1)
{double x, s = 0 ;
int n, i ;
n = (b - a) / h ;
for (i = 0; i < n; i++)
{x = a + i * h + h / 2 ;
s += fun(x) ;
}
s *= h ;
if (fabs(s - s1) > eps)
s = integral(a, b, h / 2, eps, fun, s) ;
return s ;
}
//описание вида функции №1: x^2+y^2=1 (верхняя полуокружность)
double fun1(double x)
{return(sqrt(1 - x * x)) ;
}
//описание вида функции №2: (x-1)^2+y^2=1 (верхняя полуокружность)
double fun2(double x)
{return(sqrt(2 * x - x * x)) ;
}
//описание вида функции №3: (x+1)^2+y^2=1 (верхняя полуокружность)
double fun3(double x)
{return(sqrt(-2 * x - x * x)) ;
}
//описание вида функции №4: y=2
double fun4(double x)
{return 2 ;
}
//описание вида функции №5: x^2+(y+1)^2=1 (нижняя полуокружность)
double fun5(double x)
{return(-1 - sqrt(1 - x * x)) ;
}
//описание вида функции №5: x^2+(y+1)^2=1 (верхняя полуокружность)
double fun6(double x)
{return(sqrt(1 - x * x) - 1) ;
}
//описание вида функции №7: y=1
double fun7(double x)
{return 1 ;
}
//описание вида функции №8: y=-2
double fun8(double x)
{return -2 ;
}
//описание вида функции №1: x^2+y^2=1 (нижняя полуокружность)
double fun9(double x)
{return(-sqrt(1 - x * x)) ;
}
//описание вида функции №2: (x-1)^2+y^2=1 (нижняя полуокружность)
double fun10(double x)
{return(-sqrt(2 * x - x * x)) ;
}
