Лекции 1 семестр матанализ. лекции 1 семестр (1). Литература Герберт. Шилдт. С руководство для начинающих
Скачать 1.38 Mb.
|
Тема: Одномерные массивы (продолжение ) ( Т.М. Павловская С/C++ Программирование на языке высокого уровня Тема: Одномерные массивы (стр. 136) ) Задача Преобразовать массив таким образом, чтобы в первой половине располагались элементы, стоящие в нечетных позициях, а во второй половине - элементы, стоящие в четных позициях, //arb2016_pavlovskaya_var7 #include "stdafx.h" #include using namespace std; const int n=7; int main() { int i,temp;; int a[n]; cout<<"enter array a:"< for (i = 0; i { cout<<"a["< cin >> a[i]; } cout<<"array a:"< for (i = 0; i cout< cout< // if n is even number n=6 /* for(i=1;i { temp=a[i]; a[i]=a[n-1-i]; a[n-1-i]=temp; } */ // if n is odd number n=7 for(i=0;i { temp=a[i]; a[i]=a[n-i-2]; a[n-i-2]=temp; } cout<<" odd i in begin, even i in end a:"< for (i = 0; i cout< cout< system("pause"); return 0; } Задача Преобразовать массив таким образом, чтобы сначала располагались , элементы по модулю не превышающие 1 , а потом все остальные //arb2016_pavlovskaya_var8 #include "stdafx.h" #include #include using namespace std; const int n=7; int main() { int i,j,temp;; double a[n]; cout<<"enter array a:"< for (i = 0; i { cout<<"a["< cin >> a[i]; } cout<<"array a:"< for (i = 0; i cout< cout< i=0; j=n-1; while(i<=j) { for( ; fabs(a[i])<=1;i++); for( ; fabs(a[j])> 1;j--); if (i { temp=a[i]; a[i]=a[j]; a[j]=temp; } } cout<<"new array a:"< for (i = 0; i cout< cout< system("pause"); return 0; } Задача Преобразовать массив таким образом, чтобы элементы равные 0 располагались после всех остальных. //arb2016_pavlovskaya_var9 #include "stdafx.h" #include using namespace std; const int n=7; int main() { int i,j,temp;; double a[n]; cout<<"enter array a:"< for (i = 0; i { cout<<"a["< cin >> a[i]; } cout<<"array a:"< for (i = 0; i cout< cout< i=0; j=n-1; while(i<=j) { for( ; a[i]!=0;i++); for( ; a[j]==0 ;j--); if (i { temp=a[i]; a[i]=a[j]; a[j]=temp; } } cout<<"new array a:"< for (i = 0; i cout< cout< system("pause"); return 0; } /////////////////////////////////////////////////////////////// Дихотомический поиск числа в упорядоченном массиве #include using namespace std; int main() { const int n=10; int left,right, mid,x; int a[n]={1,2,3,4,5,6,7,8,9,10}; bool flag=false; left=0; right =n-1; cout<<"enter x="; cin>>x; while (!flag && left<=right) { mid=(left+right)/2; if(a[mid]==x) flag=true; if (x else left=mid+1; } if(flag) cout< else cout< array a!"< system("pause"); return 0; } ////////////////////////////////////// Лекция Двумерные массивы. В С++ можно использовать многомерные массивы. Двумерный массив представляет собой список одномерных массивов. Объявление двумерного массива, состоящего из целых чисел с размерностью 5*6: int a[5][6]. В двумерном массиве позиция любого элемента определяется двумя индексами. Если представить двумерный массив в виде таблицы данных, то один индекс означает строку, а второй индекс – столбец. Из этого следует, что если доступ к элементам массива представить в порядке , в котором они реально хранятся в памяти, то правый индекс будет изменяться быстрее , чем левый. Задачи с двумерными массивами Вычислить сумму произведений элементов y = ∑in-1 ∏jn-1aij #include "stdafx.h" # include using namespace std; const int n=5; int main() { int a[n] [n];; int i, j, y, p; //Ввод массива с клавиатуры cout<<"enter array a: "< for (i=0; i for (j=0; j cin>>a[i][j]; //Вывод массива на экран cout<<" array a:"< for (i=0; i { for (j=0; j cout< cout< } y=0; for (i=0; i { p=1; for (j=0; j y=y+p; } cout<<"y="< system("pause"); return 0; } Найти максимальную из построчных сумм Y= Max ∑ a[i][j] #include "stdafx.h" # include using namespace std; const int n=30; int main() { int a[n] [n]; int i, j, y, max; //Ввод массива с клавиатуры cout<<"enter array a: "< for (i=0; i for (j=0; j cin>>a[i][j]; //Вывод массива на экран cout<<"massive a:"< for (i=0; i { for (j=0; j cout< cout< } max=0; for (j=0; j max=max+a[0][j]; for (i=1; i { y=0; for (j=0;j y=y+a[i][j]; if(y> max) max =y; } cout<<"max="< system("pause"); return 0; } EA- и AE–предикаты AiEj( a[i][j]>0) В каждой строке матрицы существует хотя бы один положительный элемент. #include "stdafx.h" # include using namespace; const int n=30; int main() { int a[n] [n];; int i, j; //Ввод массива с клавиатуры cout<<"enter array a: "< for (i=0; i for (j=0; j cin>>a[i][j]; //Вывод массива на экран cout<<"array a: "< for (i=0; i { for (j=0; j cout< cout< } bool p=true; for (i=0;i { bool q=false; for (j=0; j if (a[i][j]>0) q=true; p=q; } cout<<"p="< system("pause"); return 0; } EiAj[ a[i][j]>0 ] Существует строка матрицы, состоящая из положительных элементов. #include "stdafx.h" # include using namespace std; const int n=3; int main() { int a[n] [n];; int i, j; //Ввод массива с клавиатуры cout<<"enter array a: "< for (i=0; i for (j=0; j cin>>a[i][j]; //Вывод массива на экран cout<<"array a: "< for (i=0; i { for (j=0; j cout< cout< } bool p=false; for (i=0;i { bool q=true; for (j=0; j if (a[i][j]<=0) q=false; p=q; } cout<<"p="< system("pause"); return 0; } AiAj[ a[i][j]>0] Все элементы матрицы положительны #include "stdafx.h" # include using namespace std; const int n=30; int main() { int a[n] [n];; int i, j; //Ввод массива с клавиатуры cout<<"enter array a: "< for (i=0; i for (j=0; j cin>>a[i][j]; //Вывод массива на экран cout<<"array a: "< for (i=0; i { for (j=0; j cout< cout< } bool p=true; for (i=0;i for (j=0; j if (a[i][j]<0) p= false; cout<<"p="< system("pause"); return 0; } EiEj[ a[i][j]>0] В матрице существует хотя бы один положительный элемент #include "stdafx.h" # include using namespace std; const int n=30; int main() { int a[n] [n];; int i, j; //Ввод массива с клавиатуры cout<<"enter array a: "< for (i=0; i for (j=0; j cin>>a[i][j]; //Вывод массива на экран cout<<”array a:”< for (i=0; i { for (j=0; j cout< cout< } bool p=false; for (i=0;i for (j=0; j if (a[i][j]>0) p= true; cout<<"p="< system("pause"); return 0; } Умножение матриц С=A*B #include "stdafx.h" # include # include using namespace std; const int n=3; int main() { int a[n] [n], b[n] [n], c[n] [n]; int i, j, k; //Ввод массива с клавиатуры cout<<"enter array a: "< for (i=0; i for (j=0; j { cout<<"a["< cin>>a[i][j]; } //Ввод массива с клавиатуры cout<<"enter array b: "< for (i=0; i for (j=0; j { cout<<"b["< cin>>b[i][j]; } //Вывод массива на экран cout<<"array a: "< for (i=0; i { for (j=0; j cout< cout< } //Вывод массива b на экран cout<<"array b: "< for (i=0; i { for (j=0; j cout< cout< } for (i=0; i for (j=0; j { c[i][j]=0; for (k=0; k c[i][j]=c[i][j]+a[i][k]*b[k][j]; } //Вывод массива на экран cout<<"array c: "< for (i=0; i { for (j=0; j cout< cout< } system("pause"); return 0; } Лекция Указатели. Указатель – это объект, который содержит некоторый адрес памяти. Этот адрес обозначает местоположение в памяти другого объекта, такого как переменная. Если x содержит адрес переменной y, то о переменной x говорят, что она «указывает» на y. Формат объявления переменной-указателя таков: Тип *имя переменной. Использование символа * перед именем переменной в инструкции объявления превращает эту переменную в указатель. int * x; x – указатель на int. Операторы, используемые с указателями. С указателями используются два оператора ”*” и “&”. Оператор “&”- унарный. Он возвращает адрес памяти, по которому расположен операнд. int * ptr; ptr= &total; В переменную ptr помещается адрес переменной total. Второй оперантор работы с указателями (“*”) служит дополнением к первому (“&”). Это также унарный оператор , но он обращается к значению переменной , расположенной по адресу , заданному его операндом. Другими словами, он ссылается на значение переменной , адресуемой заданным указателем. Если перменная ptr содержит адрес перменной total , то при выполнении инструкции val=*ptr; будет присвоено значение переменной total, на которую указывает переменная ptr. Все байты в памяти нумеруются. Номер байта - адрес. int х=5 – инициализация переменной int *p- объявление указателя; p- указатель( адрес) p=&x- взятие адреса *p=10 – изменение х через указатель *-операция разыменования (косвенное присвоение) #include "stdafx.h" #include using namespace std; int main() { int *a = new int; // Объявление указателя для переменной типа int int *b = new int(5); // Инициализацияуказателя *a = 10; *b = *a + *b; cout << "b is " << *b << endl; delete b; delete a; return 0; } Ссылки. В языке C ссылок нет. С точки зрения реализации, ссылка — это, по сути, указатель, который жестко привязан к области памяти, на которую он указывает, и который автоматически разыменовывается, когда мы обращаемся по имени ссылки int y=10; int & x=y; cout<<"x= "< * конкретные адреса переменных могут быть другими */ int a; //переменная с именем "a" типа int размещена по адресу 0xbfd86d6c int &ra = a; /* задано альтернативное имя (ra) для переменной по адресу 0xbfd86d6 символ "&" используемый для уже созданного объекта является операцией взятия адреса (и эта операция не есть ссылка), то есть &a тут означает получить адрес переменной к которому привязано имя "a" */ cout << &a << '\n' << &ra << '\n'; В stdout будет записано: 0xbfd86d6c 0xbfd86d6c То есть оба имени "a" и "ra" привязаны к одному и тому же адресу. Ссылки нельзя объявлять без привязки к переменной (то есть не инициализировав при объявлении). После объявления ссылки её невозможно привязать к другой переменной. Важно отличать ссылки от оператора взятия адреса & (address of). Оператор взятия адреса используется для уже созданного объекта с целью получить его адрес (то есть адрес области памяти, где хранятся значения), а ссылка это только задание альтернативного имени объекта (с точки зрения программиста, а не реализации). Например: int a; //переменная типа int размещена по адресу 0xbfd86d6c с именем "a" int b = 3; /* создан указатель с именем "p" по адресу 0xbf971c4c, значение этого указателя адрес объекта с именем "a" - 0xbfd86d6c (это значение можно будет менять) */ int *p = &a; p = &b; //присваиваем указателю новое значение Пример 1 #include "stdafx.h" # include using namespace std; int main() { int x=10; int *p; cout<<"x="< p=&x; cout<<"p="< //p=0X0012FF7C –адрес ячейки памяти, содержащей int x *p=20; cout<<"*p="<<*p< cout<<"x="< int & r=x; //& r-ссылка r=50; cout<<"r="< cout<<"x="< x=20; cout<<"r="< cout<<"*p="<<*p< return 0; } *Примечание Ссылка -2ое имя Х, r работает как указатель, автоматически разыменовывается. Память под r не выделяется Пример 2 #include "stdafx.h" # include using namespace std; int main() { int a[3]={1,2,3}; cout<<" array a: "< cout< cout<<"address a: "< // address a: 0x0012FF68 0x0012FF6C 0x0012FF70 //Косвенное изменение массива int *q=a; //q указатель на int cout<<"q="< // q= 0x0012FF68 0x0012FF6C 0x0012FF70 cout<<"*q="<<*q<<" "<<*(q+1)<< " "<<*(q+2)< //*q=1 2 3 *q=904; *(q+1)=905; *(q+2)=906; cout<<" array a: "< cout< // 904 905 906 a[0]=1; a[1]=2; a[2]=3; cout<<"*q= "<<*q<<" "<<*(q+1)<< " "<<*(q+2)< //*q=1 2 3 system("pause"); return 0; } Функции Основы использования функций. Функции – это подпрограммы , которые содержат одну или несколько инструкций. Функции называются строительными блоками С++, поскольку программа в С++ , как правило, представляет собой коллекцию функций. Общий формат С++ функций Все С++ функции имеют общий формат Тип_возвращаемого значения имя (список _параметров) { // тело функции } С помощью элемента тип_возвращаемого_значения указывается тип значения возвращаемого функцией. Это может быть любой тип , за исключением массива. Если функция не возвращает никакого значения , необходимо указать тип void. В качестве имени можно использовать любой допустимый идентификатор, который еще не был задействован в программе. После имени функции в круглых скобках указывается список параметров, который представляет собой список пар ( состоящих из типа данных и имени ), разделенных запятыми. Параметры – это по сути переменные, которые получают значения аргументов, передаваемых функции при вызове. Если функции не имеют параметров, то круглые скобки остаются пустыми. В фигурные скобки заключено тело функции. Тело функции составляют С++-инструкции, которые определяют действие функции. Функция завершается ( и управление передается вызывающей процедуре) при достижении закрывающейся скобки или инструкции return Создание функции. #include "stdafx.h" #include using namespace std; void myfunc();// прототип функции myfunc() int main() { cout<<"В функции main()."< myfunc(); cout<<"Снова в функции main()."< system("pause"); return 0; } // Определение функции myfunc() void myfunc() { cout<<"В функции myfunc()."< } Использользование аргументов Функции можно передать одно или несколько значений. Значение передаваемое функции называется аргументом. Таким образом, аргументы представляют собой средсьво передачи инициализации в функцию. При создании функции, которая принимает одно или несколько аргументов, необходимо объявить переменные, которые получат значения этих аргументов. Эти переменные называются параметрами функции. #include "stdafx.h" #include using namespace std; void box(int length, int width, int height);// прототип функции int main() { box(7,20,4); box(50,3,2); box(8,6,9); system("pause"); return 0; } // Определение функции box() void box(int length, int width, int height) { cout<<"Объем параллелепипеда равен "<< length* width* height < } Использользование инструкции return В предыдущих примерах возврат из функции к инициатору ее вызова происходил при обнаружении фигурной скобки. Однако это приемлимо не для всех функций. Возврат значений. Использование функции в выражениях Правила действия областей видимости функций. Локальная область видимости Локальные переменные можно объявлять внутри любого блока. Сокрытие имен Параметры функции Глобальная область видимости Передача указателей и массивов в качестве аргументов функций Передача функции указателя Передача функции массива Передача функциям строк Возвращение функциями указателей Оформление функции в С++ Тип имя функции (список формальных параметров); Типы функции int double char void (не возвращает значений) Функция - именованный набор операторов. Если р1 и р2 функции, и р1 вызывает р2, то р2 должна быть описана раньше р1. Если тело функции идет после main() , то перед main() должен стоять прототип функции. Пример 1 Функция плюс #include "stdafx.h" # include using namespace std; /////////////////////// void plus (int,int,int); // прототип функции plus, параметры переданы //по значению //////////////////// void plus1 (int,int,int&); // прототип функции plus1, последний // параметр передан по ссылке int plus2(int, int) //результат функции число типа int //////////////////// int main() { int a=4; int b=5; int c=10; cout<<"plus()"< plus(a,b,c); cout<<"c="< plus1(a,b,c); cout<<"c="< int c2=plus2(a,b); cout<<"c2="< // Возможен вариант cout<<"plus2()="< system("pause"); return 0; } ///////////////////////////////////// void plus (int x, int y, int z) { cout<<"x="< cout<<"y="< cout<<"z="< z=x+y; cout<<"z="< } ///////////////////////////////////// void plus1 (int x, int y, int &z) { cout<<"x="< cout<<"y="< cout<<"z="< z=x+y; cout<<"z="< } ///////////////////////////////////////// int plus2 (int x, int y) { cout<<"x="< cout<<"y="< cout<<"x+y= "< return x+y; } /////////////////////////////////////// Примечание При вызове функций plus2() на месте аргументов могут быть любые выражения данного типа. plus2(a+b*c,2*c); plus2(5,7); Передача массивов функции. Пример 2. #include "stdafx.h" #include using namespace std; const int n=10; ///////////////// void create ( int x[], int k); //возможный вариант void vvod ( int x[n]) void show ( int x[], int k); int max (int x[], int k); ///////////////////////// int main() { int a[n]; create(a,n); show ( a, n); cout<< "max(a,n)= "< system("pause"); return 0; } ////////////////////// void create ( int x[], int k) { int i; for (i=0; i { cout<<"x["< cin>>x[i];} } } /////////////////////// void show ( int x[], int k) { int i; for (i=0; i cout< cout< } //////////////////////////// int max(int x[], int k) { int i; int m; m=a[0]; for (i=0; i if (m return m; } ///////////////////////// Лекция №9 Динамические массивы Задание статического массива const int n=10; int a[n]; Задание динамического массива int n; cout<< “Enter n:”; cin>>n; int* b //указатель на первый элемент массива b= new int[n]; delete [] b - после работы программы необходимо освободить память «кучи» от b. В параметрах функций динамический массив задается так же, как и статический Выделение динамической памяти для двумерного массива c. c= new int*[n]; for (i=0;i c[i]=new int[n]; Особождение динамической памяти для двумерного массива c. for(i=0;i delete []c[i]; void vvod ( int x[], int n); Или void vvod ( int *x, int n); void vvod ( int x[n]) Примечание int*p; p=new int; *p=10; (косвенная динамическая память) delete p ; (возврат памяти) Задание двумерного динамического массива Память выделяется в 2 этапа: сначала под столбец указателей на строки, а затем в цикле под каждую строку. int colstr; colstb; cout<< "Enter colstr: "; cin>> colstr; cout<< "Enter colstb: "; cin>> colstb; int **b; b=new int*[colstr]; for (int i<0;i b[i]=new int[colstb]; В параметрах функций void create ( int **x, int n, int m); void show( int **x, int n, int m); Указатели на функции как параметры Указатель на функцию может передаваться в другую функцию в качестве параметра. Например: #include "stdafx.h" #include using namespace std; int add(int, int); int subtract(int, int); int operation(int(*)(int, int), int, int); int main() { int a = 10; int b = 5; int result; result = operation(add, a, b); cout << "result: " << result << endl; result = operation(subtract, a, b); cout << "result: " << result << endl; system("pause"); return 0; } int add(int x, int y) { return x + y; } int subtract(int x, int y) { return x - y; } int operation(int(*op)(int, int), int a, int b) { return op(a, b); } В данном случае первый параметр функции operation - int (*op)(int, int) - представляет указатель на функцию, которая возвращает значение типа int и принимает два параметра типа int. Результатом функции является вызов той функции, на которую указывает указатель. Определению указателя соответствуют две функции: add и subtract, поэтому их адрес можно передать в вызов функции operation: operation(add, a, b);. Результат работы программы: result: 15 result: 5 Другой пример - функция, которая может принимать в качестве параметра некоторое условие: #include "stdafx.h"
Первый параметр функции action - указатель int (*condition)(int) представляет функцию, которая принимает целое число и в зависимости от того, соответствует оно условию или нет, возвращает 1 (если соответствует) или 0. На момент определения функции action точное условие может быть неизвестно. В текущей программе условия представлены двумя функциями. Функция isEven() возвращает 1, если число четное, и 0, если число нечетное. А функция isPositive() возвращает 1, если число положительное, и 0, если отрицательное. При вызове функции action() в нее можно передать нужное условие: action(isEven, nums, n);. В итоге программа выведет на экран числа из массива nums, которые соответствуют переданному условию: Even numbers: -4 -2 0 2 4 Positive numbers: 1 2 3 4 5 Задача 1. Заданы два целочисленных мвссива размерноси n*n. A*B , если EiAj[ A[i][j] простое число] Вычислить С= A+B, прттивном случае #include "stdafx.h" # include # include # include using namespace std; void create ( int **, int); void show( int **, int); bool prime (int); bool EA( int **, int); void mult ( int **, int**, int**,int); void add ( int **, int**, int**,int); ///////////////////////////////////// int main() { int n; cout<<"enter size of array n="; cin>>n; int **a, **b, **c; a= new int*[n]; int i; for (i=0;i a[i]=new int[n]; b= new int*[n]; for (i=0;i b[i]=new int[n]; c= new int*[n]; for (i=0;i c[i]=new int[n]; cout<<"enter array a:"< create(a,n); cout<<"enter array b:"< create(b,n); cout<<" array a:"< show(a,n); cout<<" array b:"< show(b,n); if (EA(a,n)) mult(a,b,c,n); else add(a,b,c,n); cout<<"array c: "< show(c,n); for(i=0;i delete []a[i]; delete [] a; for(i=0;i delete []b[i]; delete []b; for(i=0;i delete []c[i]; delete []c; system("pause"); return 0; } //////////////////////////////// void create(int**x, int n) { int i,j; for (i=0; i for (j=0; j { cout<<"x["< cin>>x[i][j]; } } //////////////////////////// void show(int**x, int n) { int i,j; for (i=0; i { for (j=0; j cout< cout< } } ///////////////////////////////// bool prime(int x) { bool t; int i; if (x<=1) return false; if (x==2) return true; t=true; i=2; while (i<=sqrt(x)&&t) { if (x% i==0) t=false; i++; } return t; } /////////////////////// bool EA(int**x, int n) { bool p,q; int i,j; p=false; for (i=0;i { q=true; for (j=0; j if (!prime(x[i][j])) q=false; p=q; } return p; } ////////////////////////////// void mult ( int **x, int**y, int**z,int n) { int i, j, k; for (i=0; i for (j=0; j { z[i][j]=0; for (k=0; k z[i][j]=z[i][j]+x[i][k]*y[k][j]; } } ///////////////////////////// void add ( int **x, int**y, int**z, int n) { int i, j; for (i=0; i for (j=0; j z[i][j]= x[i][j]+y[i][j]; } //////////////////////// ALGEBRA OF SETS Алгебра множеств Пусть A,B,C ‘элементы P(Z). Z – множество целых чисел. P(Z) – множество всех подмножеств Z. Определить операции над множествами. C=A U B – объединение множеств C=A ^ B – пересечение множеств C= A-B – разность множеств C=(A-B)U(B-A) - симметрическая разность. #include "stdafx.h" #include using namespace std; ///////////////////////////////// void create_set(int* x,int n) { int i,m; for(i=0;i x[i]=0; char ch='y'; while (ch=='y'|| ch=='Y') { cout<<"enter element of set m="; cin>>m; x[m]=1; cout<<" continue enter element? – 'y'/'n' ch="; cin>>ch; } } //////////////////////////////// void show_set(int* x,int n ) { int i; cout<<"{ "; for(i=0;i if (x[i]) cout< cout< } //////////////////////////////////// void union(int* x,int* y,int* z, int n) { int i; for(i=0;i z[i]=x[i]||y[i]; } //////////////////////////////// void intersection(int* x,int* y,int* z, int n) { int i; for(i=0;i z[i]=x[i]&&y[i]; } //////////////////////////////// void substruction(int* x,int* y,int* z,int n) { int i; for(i=0;i z[i]=x[i] && !y[i]; } //////////////////////////////// void complement(int* x,int* y, int n) { int i; for(i=0;i y[i]=!x[i]; } //////////////////////////////// int main() { int n; cout<<" ALGEBRA OF SETS"< cout<<"enter size universal set n="; cin>>n; int* a=new int[n]; int* b =new int[n]; int* c=new int[n]; cout<<"enter elements of set a: "< create_set(a,n); cout<<"elements of set a: "< show_set(a,n); cout<<"enter elements of set b: "< create_set(b,n); cout<<" elements of set b: "< show_set(b,n); union(a,b,c,n); cout<<" elements of set c=aUb: "< show_set(c,n); intersection(a,b,c,n); cout<<" elements of set c=a*b: "< show_set(c,n); substruction(a,b,c,n); cout<<" elements of set c=a-b: "< show_set(c,n); complement(a,c,n); cout<<" elements of set c=!a: "< show_set(c,n); system("pause"); return 0; } Лекция Табулирование интегральной функции. Вычислить значение функции в заданных точках t1, …, tm с точностью . Входными данными программы являются числа m, a, b, и массив t[1: m]. Выходные данные – массив y[1: m], где . В программе предусмотреть: - функцию, вычисляющую значение F(x, t), с формальными параметрами x и t; - функцию вычисления интеграла по одной из квадратурных формул с формальными параметрами: границы интегрирования a, b, точность вычисления интеграла , функция F(x, t) и значение ее параметра t. |