Есть код:
double func(double x)
{
return (sin(x) * cos(x)) / (x*x + x + 1);
}
int main()
{
int a = 0;
int b = 1;
int q, i;
double c, d;
cout << "q =";
cin >> q;
if (func(a) >= func(b))
{
c = func(a); //максимальное значение функции
d = func(b); //мин. значение ф-ции
}
else
{
c = func(b); //max
d = func(a); //min
}
double *x = new double[q];
double *y = new double[q];
srand(time(NULL));
int k =0;
for (i = 0; i<q; i++)
{
x[i] = a + (b - a)*rand(); //случайные точки
y[i] = d + (c - d)*rand();
if (y[i] < func(x[i]))
{
k++;
}
}
double integral = k*(b - a)*(c - d) / q;
cout << "I = " << integral;
system("pause");
return 0;
}
Заранее огромное спасибо всем кто помог!!!

Использование остатка от деления приводит к тому, что распределение случайных чисел становится [более] неравномерным. Что тоже не способствует точности вычислений.