База ответов ИНТУИТ

Программирование

<<- Назад к вопросам

Пусть f(x) - вещественная функция функцияот вещественногоаргумента. Определить,содержит ли следующий фрагмент программы ошибку(т.е. действительно ли тело цикла сохраняет инвариант):
// Программа корень функции    double a, b, c;    double eps = 0.000001;    . . .    // утверждение: a < b  && f(a)*f(b) <= 0.0    // Значения функции на концах отрезка [a, b] разных знаков    while (b - a > eps) {        // Invariant: f(a)*f(b) <= 0.0        // Делим отрезок [a, b] пополам        c = (a + b)/2.0; // c - середина отрезка [a, b]        if (f(a) * f(c) < 0.0) {            b = c;     // выбираем левую половину отрезка        } else {            a = c;     // выбираем правую половину        }    }    // утверждение: b - a <= eps  &&    //              f(a)*f(b) <= 0.0

(Отметьте один правильный вариант ответа.)

Варианты ответа
Фрагмент программы содержит ошибку. (Верный ответ)
Ошибки нет, фрагмент программы корректный.
Похожие вопросы
Пусть f(x) - целочисленная функция от целочисленногоаргумента. Определить,содержит ли следующий фрагмент программы ошибку(т.е. действительно ли тело цикла сохраняет инвариант):
// Программа корень функции    int a, b, c;    . . .    // утверждение: a < b  && f(a)*f(b) <= 0    // Значения функции на концах отрезка [a,b] разных знаков    while (b - a > 1) {        // Invariant: f(a)*f(b) <= 0        // Делим отрезок [a, b] пополам        c = (a + b)/2; // c - целая часть (a+b)/2        if (f(a) * f(c) < 0) {            b = c;     // выбираем левую половину отрезка        } else {            a = c;     // выбираем правую половину        }    }    // утверждение: a == b-1  &&    //              f(a)*f(b) <= 0
Пусть a - целочисленный массив размера n(индекс элементов меняется от 0 до n-1),элементы которого строго возрастают:a[0] < a[1] <... < a[n-1].Определить, содержит ли следующий фрагмент программы ошибку(т.е. действительно ли тело цикла сохраняет инвариант):
// Программа Поиск    int n; int *a;    . . .    // дано: целое n;    //       целочисленный массив a[n],    //           элементы которого строго возрастают    //           a[0] < a[1] < ... < a[n-1]    // надо: найти элемент x в массиве    int x;          // искомый элемент    . . .           // рассматриваются исключительные случаи    // общий случай    // утверждение: a[0] < x  &&  x <= a[n-1];    int b = 0; int e = n - 1;    while (e - b > 1) {        Invariant: a[b] < x  &&  x <= a[e]        int c := (a + b)/2; // c - целая часть (a+b)/2        if (x < a[c]) {            e = c;  // выбираем левую половину отрезка        } else {            b = c;  // выбираем правую половину        }    }    // утверждение: b == e - 1   &&    //              a[b] < x  &&  x <= a[e]
Функция с прототипом
double root(double a, double b, double eps);
находит корень фиксированной функции
double f(double x);
на отрезке [a, b] методом деления отрезка пополамс точностью eps.Пусть функция f(x) определена следующимобразом:
double f(double x) {    double p = 1.;    double r = 1.;    while (r < 5.5) {        p *= (x - r);        r += 1.;    }    return p;}
Каким будет приблизительное значение переменной xв результате выполнения следующего фрагмента программы:
    double x = root(0., 5.9, 0.000001);
Функция с прототипом
double root(double a, double b, double eps);
находит корень фиксированной функции
double f(double x);
на отрезке [a, b] методом деления отрезка пополамс точностью eps.Пусть функция f(x) определена следующимобразом:
double f(double x) {    return sin(x);}
Каким будет приблизительное значение переменной xв результате выполнения следующего фрагмента программы:
    double x = root(-1., 9., 0.000001);
Функция с прототипом
double root(double a, double b, double eps);
находит корень фиксированной функции
double f(double x);
на отрезке [a, b] методом деления отрезка пополамс точностью eps. Сколько примерно раз будет выполненотело цикла при поиске корня, когда используется следующий вызов:
    double x = root(1., 2., 0.001);
Для приближения функции, заданной на отрезке [a, b],применяется сплайн-интерполяция. Для этого отрезок разбиваетсяна n частей точкамиx0, x1, x2, ..., xn,в которых заданы значения функцииy0, y1, y2, ..., yn,На каждом из этих маленьких отрезков[xi, xi+1] функция приближаетсямногочленом степени d, который на концах отрезка принимаетзаданные значения. Пусть, помимо значений функции в узлах интерполяцииyi,заданы также и значения ее производнойy'i в узлах; производная каждого интерполяционногомногочлена также должна принимать заданные значенияна концах отрезка [xi, xi+1].Чему должна быть равнастепень d интерполяционных многочленов, из которыхсоставляется искомый сплайн?
Пусть неизвестная функция определена на отрезке [a, b],причем на концах отрезка заданы ее значенияy0=f(a),y1=f(b),а также значения ее производнойy'0=f'(a),y'1=f'(b).Всегда ли существует многочлен степени 2 такой, чтона концах отрезка его значения и значения его производнойсовпадают со значениями и производной функции?
Пусть неизвестная функция определена на отрезке [a, b],причем на концах отрезка заданы ее значенияy0=f(a),y1=f(b),а также значения ее производнойy'0=f'(a),y'1=f'(b).Нужно приблизить функцию многочленом так, чтобы на концах отрезкаего значения, а также значения его производной совпадали созначениями и производной функции. Какой должна бытьстепень такого многочлена? (Укажите минимальнуюстепень, достаточную для решения этой задачи.)
Формула Бинома Ньютона дает следующее разложение в ряддля функции "квадратный корень из z":
(1+x)0.5 = sqrt(1+x) =    1 + 0.5 x + 0.5(-0.5)/2! x2 + 0.5(-0.5)(-1.5)/3! x3 + 0.5(-0.5)(-1.5)(-2.5)/4! x4 + ...
(мы обозначили z=1+x). Рассмотрим реализованную на C/C++ функцию mySqrt(z),вычисляющую значение квадратного корня с точностью до одной миллионной:
static const double EPS = 1e-6;double mySqrt(double z) {    double x = z - 1.;    double s = 1;    double k = 0.5;    double n = 1.;    double a = k*x;    while (fabs(a) > eps) {        s += a;        k -= 1.;        n += 1.;        a *= (k/n)*x;    }    return s;}
Для каких значений z ее можно применять так,чтобы функция завершала работу за разумное время иошибка вычисления результата была бы не более 0.0001?Укажите все правильные ответы из числа перечисленных ниже.
Рассмотрим следующий фрагмент программы на C/C++:
    double x = 1.0;    double y = 1e-20;    double z = -x + x + y;    double t = x + y - x;
Равны ли значения переменныхz и t после его выполнения?