Главная /
Программирование /
Пусть f(x) - вещественная функция функция от вещественного аргумента. Определить, содержит ли следующий фрагмент программы ошибку (т.е. действительно ли тело цикла сохраняет инвариант): // Программа корень функции double a, b, c; double eps = 0.000001; .
Пусть 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
вопрос
Правильный ответ:
Ошибки нет, фрагмент программы корректный.
Фрагмент программы содержит ошибку.
Сложность вопроса
74
Сложность курса: Программирование
84
Оценить вопрос
Комментарии:
Аноним
Я провалил экзамен, почему я не увидел данный сайт с решениями с тестами intuit в начале года
05 фев 2020
Аноним
Я завалил сессию, какого чёрта я не увидел данный сайт с всеми ответами по тестам интуит в начале сессии
18 янв 2017
Другие ответы на вопросы из темы программирование интуит.
- # Рассмотрим реализацию матрицы вещественных чисел размера m строк на n столбцов при помощи линейного массива, в котором хранятся сначала элементы нулевой строки матрицы, затем первой, второй и т.д., в конце - элементы (m-1)-й строки: int m, n; // Размеры матрицы: число строк, столбцов . . . double* a = new double[m*n]; // a[i*n + j] -- элемент i-й строки и j-го столбца Пусть функция с прототипом void transp(double* a, int m, int n); реализует транспонирование матрицы, при выполнении которого строки матрицы становятся столбцами, столбцы - строками, а матрица размера m на n превращается в матрицу размера n на m Пусть эта функция применяется к прямоугольной матрице, содержащей 2 строки и 4 столбца, элементы которой хранятся в линейном массиве a Сколько элементов массива a при этом останутся на своем месте?
- # Постановка задачи: в файле записана последовательность чисел неизвестной длины (возможно пустая). Между числами стоит разделитель - пробел. Требуется за один просмотр файла и без запомнинания последовательности чисел в массиве определить требуюмую характеристику последовательности. Программа должна содержать функцию, которая получает в качестве параметра имя файла и возвращает требуемое значение в файл (output.txt). Функция main открывает необходимые файлы, проверяет успешность открытия, обращается к функции для вычисления результата и выводит результат в соответствующий файл. Задание: определить количество возрастающих и убывающих участков в последовательности.
- # Мы хотим реализовать функцию product, которая находит произведение элементов вещественного массива a длины n. Отметьте, какие из возможных прототипов данной функции корректны.
- # Следующий фрагмент программы для последовательности вещественных чисел вычисляет количество n элементов, строго меньших предыдущего, причем самый первый элемент также учитывается (считается меньше предыдущего). Например, для последовательности {2, 1, 3, 5, 4} ответ n=3 (элементы 2, 1 и 4). n = 0 x0 = ... цикл пока в последовательности есть непрочитанные элементы |выполнять | прочесть очередной элемент посл-ти в <вых: x> | если x < x0 | | то n = n + 1 | конец если | x0 = x конец цикла Каким значением надо инициализировать переменную x0, чтобы программа работала правильно?
- # Пусть 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]