Программирование - ответы
Количество вопросов - 342
232, 102, 307, 901, 835, 215, 105, 301, 323, 811.Каким будет содержимое массива после выполнения первых двух шаговсортировки (т.е. после сортировки по младшей и средней цифрам)?
int k = (-2); int n; signed char *p = (signed char *) &k; n = *p;
double x = 1.0; double y = 1e-20; double z = x + y - x; double t = x - x + y;Равны ли значения переменныхz и t после его выполнения?
double *p, *q; int n;Отметьте, какие из перечисленных ниже выражений языка C/C++являются корректными:
void quickSort(double* a, int n) { if (n <= 1) { return; } else if (n == 2) { if (a[0] > a[1]) swap(&(a[0]), &(a[1])); return; } int beg = 0; int k = n; while (k > 1) { int m = k / 2; partition(a+beg, k, &m); int left = m; int right = k - left - 1; if (left <= right) { // Рекурсивно применяем алг. к левой части quickSort(a+beg, left); beg += left + 1; k -= left + 1; } else { // Рекурсивно применяем алг. к правой части quickSort(a+beg+m+1, right); k -= right + 1; } }}Алгоритм применяется к массиву размером 95. Какой может бытьмаксимальная глубина рекурсии?(Под глубиной рекурсии мы подразумеваем количесто раз,которое функция может вызвать сама себя в цепочке вызовов.Если рекурсивный вызов отсутствует, то мы считаем глубину рекурсиинулевой.)
int gcd1(int m, int n) { if (n == 0) return m; int r = m % n; return gcd1(n, r);}Укажите, какова будет глубина рекурсии (т.е. какое максимальноеколичество кадров локальных переменных функции gcd1будет размещено одновременно в аппаратном стеке) при следующемвызове функции:
int d = gcd1(7, 17);
. . . // Утверждение: a[0] < x && x <= a[n-1] int beg = 0; int end = n-1; while (end-beg > 1) { // Инвариант: a[beg] < x && x <= a[end] int c = (beg + end) / 2; if (a[c] < x) { beg = c; } else { end = c; } } *idx = end; . . .Пусть значение x содержится в массивев нескольких экземплярах. Индекс какого элементамассива a будет записан в переменную *idx?
double a[4][3]; int n, m; n = (int)(a+1); m = (int) a; n -= m;
void f(int x, int y);Чему равен адрес второго фактического аргументаy функции f относительно регистраFP (Frame Pointer - указатель кадра) во время выполнениятела функции?
void quickSort(double* a, int n) { if (n <= 1) { return; } else if (n == 2) { if (a[0] > a[1]) swap(&(a[0]), &(a[1])); return; } int beg = 0; int k = n; while (k > 1) { int m = k / 2; partition(a+beg, k, &m); int left = m; int right = k - left - 1; if (left <= right) { // Рекурсивно применяем алг. к левой части quickSort(a+beg, left); beg += left + 1; k -= left + 1; } else { // Рекурсивно применяем алг. к правой части quickSort(a+beg+m+1, right); k -= right + 1; } }}Сколько раз будет вызвана функция partition при выполненииалгоритма быстрой сортировки для массива размера 95?Дайте наиболее точную оценку снизу этого числа.
static int a[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};Пусть в программе задана функция суммирования массивас прототипом
int sum(const int *m, int n);где m - константный указатель на началомассива, n - число его элементов. Укажите,чему будет равно значение переменной s врезультате выполнения следующего фрагмента программы:
int s = sum(a+3, 4);
int x = 100;while (x >= 0) { . . . x = x-1;}
int x = 1;while () { . . . if () { x = 2; } else { x = 3; }}
int x = 1; while (x < 11) { x = -2*x + 11; }
int x = 1; while (x != 56) { x = (x * 11) % 253; }
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);
int gcd(int m, int n) { while (n != 0) { int r = m % n; m = n; n = r; } return m;}при следующих входных значениях аргументов:m=13, n=17?
int n=11, k, *p; p = &n; ++*p; k = 4-*p*2+n;
double *p = 1000; double *q = 2000; int n = q - p;
double *p, q[100];Отметьте, какие из перечисленных ниже выражений языка C/C++являются корректными:
int gcd1(int m, int n) { if (n == 0) return m; int r = m % n; return gcd1(n, r);}Укажите, какова будет глубина рекурсии (т.е. какое максимальноеколичество кадров локальных переменных функции gcd1будет размещено одновременно в аппаратном стеке) при следующемвызове функции:
int d = gcd1(25, 35);
static int a[] = { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5};Пусть в программе задана функция суммирования массивас прототипом
int sum(const int *m, int n);где m - константный указатель на началомассива, n - число его элементов. Укажите,чему будет равно значение переменной s врезультате выполнения следующего фрагмента программы:
int s = sum(a+5, 3);
double a[16]; double *p; const double *q; int n;Отметьте, какие из приведенных ниже операторов языка C/C++корректны.
static double *a = new double[10]; a[0] = 3.7;Где хранится значение выражения "a[0]" (т.е.число 3.7)?
double (*a)[4]; int n, m; n = (int)(a+1); m = (int) a; n -= m;
typedef void (*Callback)(char *);typedef void (*Action)(void *);
xmin = ...xmax = ...цикл пока в последовательности есть непрочитанные элементы|выполнять| прочесть очередной элемент посл-ти в <вых: x>| если x < xmin| | то xmin = x| конец если|| если x > xmax| | то xmax = x| конец есликонец циклаd = xmax - xminКакими значениями надо инициализировать переменныеxmin и xmax, чтобы программаработала правильно?
int f(int n) { int x = 1; int y = 4; while (y <= n) { // Invariant: y == (x+1)^2 ++x; y += 2*x+1; } return x;}
int f(int m, int n) { int a = m, b = n; int p = 0; while (b != 0) { if (b%2 == 0) { // b четное b /= 2; a *= 2; } else { // b нечетное --b; p += a; } } return p;}Какое условие является инвариантом цикла?
double r, x; int n; . . . r *= -x; r *= n/(n+1); ++n;
int gcd(int m, int n) { // дано: целые числа m, n, хотя бы одно отлично от нуля // надо: вычислить НОД пары (m, n) int a = m, b = n; while (b != 0) { // Invariant: НОД(a, b) == НОД(m, n) int r := a % b; // находим остаток от деления a на b a = b; b = r; // заменяем пару (a, b) на (b, r) } return a; // ответ = a}
// Программа Поиск 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]
. . . // Утверждение: a[0] <= x && x < a[n-1] int beg = 0; int end = n-1; while (end-beg > 1) { // Инвариант: a[beg] <= x && x < a[end] int c = (beg + end) / 2; if (a[c] <= x) { beg = c; } else { end = c; } } if (a[beg] == x) { *idx = beg; } else { *idx = end; } . . .Пусть значение x содержится в массивев нескольких экземплярах. Индекс какого элементамассива a будет записан в переменную *idx?
void partition(double* a, int n, int *m) { if (*m != 0) // Ставим медиану в начало swap(&(a[0]), &(a[*m])); double x = a[0]; // Значение медианы int i = 0; int j = n; while (j-i > 1) { // Инв: a[1], a[2], ..., a[i] <= x // a[j], a[j+1], ..., a[n-1] > x if (a[i+1] <= x) { ++i; } else if (a[j-1] > x) --j; } else { ++i; --j; swap(&(a[i]), &(a[j])); } } if (i > 0) swap(&(a[0]), &(a[i])); *m = i;}Правильна ли подобная реализация, или она может привестик катастрофическому замедлению алгоритма быстройсортировки в некоторых случаях?
void partition(double* a, int n, int *m) { if (*m != 0) // Ставим медиану в начало swap(&(a[0]), &(a[*m])); double x = a[0]; // Значение медианы int i = 0; int j = n; while (j-i > 1) { // Инв: a[1], a[2], ..., a[i] < x // a[j], a[j+1], ..., a[n-1] >= x if (a[i+1] < x) { ++i; } else if (a[j-1] >= x) --j; } else { ++i; --j; swap(&(a[i]), &(a[j])); } } if (i > 0) swap(&(a[0]), &(a[i])); *m = i;}Правильна ли подобная реализация, или она может привестик катастрофическому замедлению алгоритма быстройсортировки в некоторых случаях?
void quickSort(double* a, int n) { if (n <= 1) { return; } else if (n == 2) { if (a[0] > a[1]) swap(&(a[0]), &(a[1])); return; } int beg = 0; int k = n; while (k > 1) { int m = k / 2; partition(a+beg, k, &m); int left = m; int right = k - left - 1; if (left <= right) { // Рекурсивно применяем алг. к левой части quickSort(a+beg, left); beg += left + 1; k -= left + 1; } else { // Рекурсивно применяем алг. к правой части quickSort(a+beg+m+1, right); k -= right + 1; } }}Сколько раз будет вызвана функция partition при выполненииалгоритма быстрой сортировки для массива размера 47?Дайте наиболее точную оценку снизу этого числа.
void quickSort(double* a, int n) { if (n <= 1) { return; } else if (n == 2) { if (a[0] > a[1]) swap(&(a[0]), &(a[1])); return; } int beg = 0; int k = n; while (k > 1) { int m = k / 2; partition(a+beg, k, &m); int left = m; int right = k - left - 1; if (left <= right) { // Рекурсивно применяем алг. к левой части quickSort(a+beg, left); beg += left + 1; k -= left + 1; } else { // Рекурсивно применяем алг. к правой части quickSort(a+beg+m+1, right); k -= right + 1; } }}Алгоритм применяется к массиву размером 191. Какой может бытьмаксимальная глубина рекурсии?(Под глубиной рекурсии мы подразумеваем количесто раз,которое функция может вызвать сама себя в цепочке вызовов.Если рекурсивный вызов отсутствует, то мы считаем глубину рекурсиинулевой.)
122, 232, 171, 198, 401, 035, 077, 201, 199, 400.Каким будет содержимое массива после выполнения первых двух шаговсортировки (т.е. после сортировки по младшей и средней цифрам)?
100,001,010,110,111,101,011.Укажите восьмеричную запись этого числа.
n = ((16 << 3) | (1 << 4) | (3 << 2));
x = s 2e m,где s - знак числа, принимающий значениеплюс или минус единица,e - порядок, представляющий собойцелое число (положительное, 0 или отрицательное),m - мантисса, представляющая собойвещественное число в диапазоне1 m < 2.Чему равны порядок и мантисса для числа 0.1?
double x = 1.0; double y = 1e-20; double z = -x + x + y; double t = x + y - x;Равны ли значения переменныхz и t после его выполнения?
#include <stdio.h>#include <math.h>int main() { double x = pow(2., 1024.); double y = x / 2.; double z = pow(2., 1023.); if (y == z) { printf("y == z\n"); } else { printf("y != z\n"); } return 0;}(Функция pow(a, b) возводитчисло a в степень b.)Что будет напечатано в результате ее выполнения?
ln(1+x) = x - x2/2 + x3/3 - x4/4 + ...(мы обозначили z=1+x).Рассмотрим реализованную на C/C++ функцию myLog(z),вычисляющую значение логарифма с точностью до одной миллионной:
static const double EPS = 1e-6;double myLog(double z) { double x = z - 1.; double s = 0.; double p = x; double n = 1.; double a = x; while (fabs(a) > EPS) { s += a; p = (-p*x); n += 1.; a = p/n; } return s;}Для каких значений z ее можно применять так,чтобы функция завершала работу за разумное время иошибка вычисления результата была бы не более 0.0001?Укажите все правильные ответы из числа перечисленных ниже.
(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). Этот ряд сходится лишь для значений x, по абсолютной величине не превосходящих 1, а эффективно вычислятьего сумму можно только для еще более узкого интервала значений x. Каким свойством функции sqrt(z)удобнее всего воспользоваться, чтобы свести ее вычисление к суммированию ряда?
arctg(x) = x - x3/3 + x5/5 - x7/7 + ...Этот ряд сходится лишь для значений x, по модулю не превосходящихединицы, а эффективно вычислять его можно лишь для x, по модулюсущественно меньших единицы - например, |x|<0.5.Чтобы свести задачу вычисления функции arctg(x) ксуммированию ряда для малых значений x,можно воспользоваться формулой
arctg(x) = 2*arctg(y), где y = x/(1 + sqrt(1 + x*x)),заменив вычисление ряда для x вычислением для y.Например, arctg(1)=2*arctg(1/(1+sqrt(2))). При этом нам придетсявоспользоваться функцией sqrt, вычисляющей квадратный корень. Какоемаксимальное число раз ее придется вызвать, чтобы свести вычисление arctg(x) для произвольного x к суммированию ряда для x в интервале |x|<0.5?
double a[5][3]; const double *p = &(a[0][0]); const double *q = &(a[2][2]); int n = q - p;Чему равно значение nпосле выполнения этого фрагмента?
typedef int* intptr; int m, n; // Размеры матрицы: число строк, столбцов . . . intptr* a = new intptr[m]; for (int i = 0; i < m; ++i) { a[i] = new int[n]; } // a[i][j] -- элемент i-й строки и j-го столбцаСколько памяти требуется для хранения прямоугольнойматрицы размером в 10 строк и 20 столбцовв 64-разрядной архитектуре(без учета памяти, используемой под описатели фрагментов кучи;предполагаем, что размер элемента типа int равен 4)?
int m, n; // Размеры матрицы: число строк, столбцов . . . double* a = new double[m*n]; // a[i*n + j] -- элемент i-й строки и j-го столбцаПравильно ли работает следующая функция транспонированияматрицы, при выполнении которой строки матрицы должны статьстолбцами, столбцы - строками, а матрица размераm на nпревратиться в матрицу размераn на m?
void transp(double* a, int m, int n) { for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { int idx0 = i*n + j; int idx1 = j*m + i; if (idx0 < idx1) { // Меняем местами 2 элемента double tmp = a[idx0]; a[idx0] = a[idx1]; a[idx1] = tmp; } } }}
1 2 3 40 1 2 32 5 8 11
pn(x) = a0 + a1(x-x0) + a1(x-x0)(x-x1) + ... + an(x-x0)(x-x1)...(x-xn-1)Сколько действий нужно выполнить, чтобы вычислить все его коэффициентыa0, a1, ..., an?
n = (((3 << 4) | 3) & 0xF2);
int x = 64; while (x*x > 100) { x = -(x / 2); }
int gcd(int m, int n) { while (n != 0) { int r = m % n; m = n; n = r; } return m;}при следующих входных значениях аргументов:m=24, n=30?
int fastPow(double a, int n) { // дано: основание a и показатель степени n >= 0 // надо: вычислить a в степени n double b = a, p = 1.0; int k = n; while (k > 0) { // Invariant: b^k * p == a^n if (k%2 == 0) { // k четное k /= 2; b *= b; } else { // k нечетное --k; p *= b; } } return p;}
double a[10]; double *p; const double *q; int n;Отметьте, какие из приведенных ниже операторов языка C/C++корректны.
while (end-beg > 1) { int c = (beg+end)/2; if (a[c] <= x) beg = c; else end = c; } // ответ в переменной begКакое утверждение являетсяинвариантом этого цикла?
void partition(double* a, int n, int *m) { if (*m != 0) // Ставим медиану в начало swap(&(a[0]), &(a[*m])); double x = a[0]; // Значение медианы int i = 0; int j = n; while (j-i > 1) { // Инв: a[1], a[2], ..., a[i] <= x // a[j], a[j+1], ..., a[n-1] >= x if (a[i+1] <= x) { ++i; } else if (a[j-1] >= x) --j; } else { ++i; --j; swap(&(a[i]), &(a[j])); } } if (i > 0) swap(&(a[0]), &(a[i])); *m = i;}Правильна ли подобная реализация, или она может привестик катастрофическому замедлению алгоритма быстройсортировки в некоторых случаях?
static double *p = 0; . . . p = new double[100]; *p = 1.5;Где хранится значение выражения "*p" (т.е.число 1.5)?
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 при этом останутся на своем месте?
. . . // Утверждение: a[0] < x && x <= a[n-1] int beg = 0; int end = n-1; while (end-beg > 1) { // Инвариант: a[beg] < x && x <= a[end] int c = (beg + end) / 2; if (a[c] < x) { beg = c; } else if (a[c] > x) { end = c; } else { // Утверждение: x == a[c] *idx = c; return true; } } *idx = end; return (x >= a[end]); . . .Пусть значение x содержится в массивев нескольких экземплярах. Индекс какого элементамассива a будет записан в переменную *idx?
int x = 0;while (x < 1000) { . . . x = x+1;}
z := 0;while (x < y) { . . . if (z > 100) { z = 10; x = y; } else { z = 20; x = y - 1; }}
int x = 1; while (x != 144) { x = (x * 13) % 299; }
double root(double a, double b, double eps);находит корень фиксированной функции
double f(double x);на отрезке [a, b] методом деления отрезка пополамс точностью eps. Сколько примерно раз будет выполненотело цикла при поиске корня, когда используется следующий вызов:
double x = root(1., 2., 0.001);
int f(int x);которая вызывается часто в различных контекстахи должна работать быстро, нам требуется небольшой массив целых чисел размером в 16 элементов.Какое из перечисленных ниже решений являетсянаиболее правильным?
int n = (-5), k, *p; p = &n; --*p; k = 4-*p*5+n;
int gcd1(int m, int n) { if (n == 0) return m; int r = m % n; return gcd1(n, r);}Укажите, какова будет глубина рекурсии (т.е. какое максимальноеколичество кадров локальных переменных функции gcd1будет размещено одновременно в аппаратном стеке) при следующемвызове функции:
int d = gcd1(21, 56);
static int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};Пусть в программе задана функция суммирования массивас прототипом
int sum(const int *m, int n);где m - константный указатель на началомассива, n - число его элементов. Укажите,чему будет равно значение переменной s врезультате выполнения следующего фрагмента программы:
int s = sum(a+4, 4);
static int *p = NULL; . . . p = (int *) malloc(sizeof(int)); *p = 123;Где хранится значение выражения "*p" (т.е.число 123)?
n = 0x0 = ...цикл пока в последовательности есть непрочитанные элементы|выполнять| прочесть очередной элемент посл-ти в <вых: x>| если x < x0| | то n = n + 1| конец если| x0 = xконец циклаКаким значением надо инициализировать переменнуюx0, чтобы программа работала правильно?
int f(int n) { int s = 2; int k = 0; while (s <= n) { // Invariant: s == 2^(k+1) s *= 2; ++k; } return k;}
int f(int m, int n) { // дано: m >= 0 и n >= 0 int a = m; int b = n; int c = 1; while (a != 0 && b != 0) { if (a%2 == 0 && b%2 == 0) { // a и b четные a /= 2; b /= 2; c *= 2; } else if (a%2 == 0) { // a четное, b нечетное a /= 2; } else if (b%2 == 0) { // a нечетное, b четное b /= 2; } else { // a и b нечетные if (a > b) { a -= b; } else { b -= a; } } } // end while return c*(a + b);}Какое условие является инвариантом цикла?(Через НОД и НОК обозначены наибольший общий делитель инаименьшее общее кратное.)
1000,1010,0010,0110,1111,0101,0011.Укажите шестнадцатеричную запись этого числа.
x = s 2e m,где s - знак числа, принимающий значениеплюс или минус единица,e - порядок, представляющий собойцелое число (положительное, 0 или отрицательное),m - мантисса, представляющая собойвещественное число в диапазоне1 m < 2.Чему равны порядок и мантисса для числа 12?
arcsin(x) = x +(1/2)x3/3 + (1/2)(3/4)x5/5 + (1/2)(3/4)(5/6)x7/7 + ...Этот ряд сходится лишь для значений x, по модулю меньшихединицы, причем вблизи единицы сходится очень медленно и точность его вычисления низка. Поэтому эффективно вычислять сумму ряда можно лишь для x, по модулюсущественно меньших единицы - например, |x|<0.75. Каким свойством функции arcsin можно воспользоваться,чтобы свести ее вычисление к суммированию ряда для значеийx в интервале |x|<0.75? Укажите всевозможные правильные решения из числа перечисленных ниже.(Предполагается, что мы умеем быстро и точно вычислять квадратный кореньsqrt(z), а также знаем константу pi.)
int a[3][5]; const int *p = &(a[1][1]); int n; for (int i = 0; i < 3; ++i) { for (int j = 0; j < 5; ++j) { a[i][j] = 10*i + j; } } n = p[6];Чему равно значение nпосле выполнения этого фрагмента?
typedef double* doubleptr; int m, n; // Размеры матрицы: число строк, столбцов . . . doubleptr* a = new doubleptr[m]; for (int i = 0; i < m; ++i) { a[i] = new double[n]; } // a[i][j] -- элемент i-й строки и j-го столбцаСколько обращений к памяти необходимо сделать,чтобы прочесть элемент матрицы вi-й строке и j-м столбце(считая, что значения i и jуже находятся в регистрах процессора)?
0 1 2 34 5 6 71 2 3 4
1/6 * (y0 + 4*y1 + y2) * (b - a).
где y0 = f(a), y1 = f((a+b)/2), y2 = f(b).
Пусть f(x) - многочлен некоторой степени.Какова максимальная степень многочленов, для которых эта формулавсегда дает точное значение интеграла?pn(x) = a0 + a1(x-x0) + a1(x-x0)(x-x1) + ... + an(x-x0)(x-x1)...(x-xn-1)Сколько действий необходимо выполнить, чтобы вычислить его значениев некоторой точке x=t?
int a[2][3]; const int *p = (const int *) a; int n; for (int i = 0; i < 2; ++i) { for (int j = 0; j < 3; ++j) { a[i][j] = 10*i + j; } } n = p[4];Чему равно значение nпосле выполнения этого фрагмента?
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 a[10][2]; int n, m; n = (int)(a+1); m = (int) a; n -= m;
// Программа корень функции 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
(1+x)1/3 = croot(1+x) = 1 + (1/3)x + (1/3)(-2/3)/2! x2 + (1/3)(-2/3)(-5/3)/3! x3 + (1/3)(-2/3)(-5/3)(-8/3)/4! x4 + ...(мы сделали замену z=1+x). Этот ряд сходится лишь для значений x, по абсолютной величине не превосходящих 1, а эффективно вычислятьего сумму можно только для еще более узкого интервала значений x. Каким свойством функции croot(z)=z1/3удобнее всего воспользоваться, чтобы свести ее вычисление для положительных значений z к суммированию ряда?
int gcd(int m, int n) { while (n != 0) { int r = m % n; m = n; n = r; } return m;}при следующих входных значениях аргументов:m=17, n=22?
int x = 1;int y = 1;while (a(x)) { . . . if (y < 0) { x = 2; y = 10; } else { x = 1; y = 20; }}
int x = 1; while (x < 100) x = -(x * 2); }
int x = 1; while (x != 120) { x = (x * 7) % 490; }
double *p, q[100], *r; int n;Отметьте, какие из перечисленных ниже строк программы на C/C++являются корректными:
double a[10]; double *p; const double *q; int n;Отметьте, какие из приведенных ниже операторов языка C/C++корректны.
утверждение: A(x)цикл пока B(x)| инвариант: A(x)| x := T(x)конец циклаЗдесь через A(x) и B(x)обозначены условия, зависящие от переменной x.Какое условие выполняется по окончании цикла?
int n, k, c; . . . c *= (n+1); c /= (n+1-k); ++n;
double myLog(double x, double a, double eps) { // дано: x > 0, a > 1, eps > 0 // надо: вычислить log_a x с точностью eps double y = 0.0, z = x, t = 1.0; while ( fabs(t) > eps || x <= 1.0/a || z >= a ) { // Invariant: a^y * z^t == x if (z >= a) { z /= a; y += t; } else if (z <= 1.0/a) { z *= a; y -= t; } else { z *= z; t /= 2.0; } } return y;}
1201,1122,2111,2010.Укажите запись этого числав системе счисления с основанием 9.
n = ((127 >> 2) & (15 << 2));
int n; . . . double x = (double) n; n = (int) x;
double x = 1.0; double y = 1e-20; double z = y - x + x; double t = x - x + y;Равны ли значения переменныхz и t после его выполнения?
#include <stdio.h>#include <math.h>int main() { double x = pow(2., 1022.)*2.; double y = pow(2., 1024.)/2.; if (x == y) { printf("x == y\n"); } else { printf("x != y\n"); } return 0;}(Функция pow(a, b) возводитчисло a в степень b.)Что будет напечатано в результате ее выполнения?
arctg(x) = x - x3/3 + x5/5 - x7/7 + ...Рассмотрим реализованную на C/C++ функцию myAtan(x),вычисляющую значение arctg(x) с точностью до одной миллионной:
static const double EPS = 1e-6;double myAtan(double x) { double s = 0.; double p = x; double n = 1.; double a = x; while (fabs(a) > EPS) { s += a; p = (-p*x*x); n += 2.; a = p/n; } return s;}Для каких значений x ее можно применять?Укажите все правильные ответы из числа перечисленных ниже.
arctg(x) = x - x3/3 + x5/5 - x7/7 + ...Этот ряд сходится лишь для значений x, по модулю не превосходящихединицы, а эффективно вычислять его можно лишь для x, по модулюсущественно меньших единицы - например, |x|<0.5.(Для значений x, по модулю близких к единице и не превосходящихединицу, ряд сходится, но очень медленно, а точность вычисления его суммыневысока.)Какие способы вычисления функции arctan(x) для "плохих"значений x возможны? Укажите все разумные способы изчисла перечисленных ниже.(Предполагается, что мы умеем быстро и точно вычислять квадратный кореньsqrt(z), а также знаем константу pi.)
1 2 3 40 1 2 32 7 10 14
pn(x) = a0 + a1(x-x0) + a1(x-x0)(x-x1) + ... + an(x-x0)(x-x1)...(x-xn-1)Пусть коэффициентыa0, a1, ..., anмногочлена pn(x)уже вычислены. Мы добавляем новый узел xn+1,значение в котором должно быть равно yn+1,и строим новый многочлен Ньютона pn+1(x)на единицу большей степени по узламx0, x1, ..., xn, xn+1и значениямy0, y1, ..., yn, yn+1.Сколько действий нужно выполнить, чтобы вычислить всекоэффициенты нового многочлена?
h = (b-a)/4, xi = a+i*h, i = 0,1,2,3,4.
Обозначим yi = f(xi).
Чему равен интеграл функции f(x)по отрезку [a, b]? Отметьте все правильные ответы.(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?Укажите все правильные ответы из числа перечисленных ниже.
int n = (-7), k, *p; p = &n; ++*p; k = 3-*p*3+n;
double *p = 1000; p += 1000; int n = (int) p;
typedef double Matrix[3][3];typedef double Transform[3][3];
n = 0x0 = ...цикл пока в последовательности есть непрочитанные элементы|выполнять| прочесть очередной элемент посл-ти в <вых: x>| если x > x0| | то n = n + 1| конец если| x0 = xконец циклаКаким значением надо инициализировать переменнуюx0, чтобы программа работала правильно?
int f(int n) { int s = 10; int k = 0; while (s <= n) { // Invariant: s == 10*(k+1) s += 10; ++k; } return k;}
// дано: целые числа a >= 0, b > 0 int a, b; . . . int q = 0, r = a; int e = 1, m = b; while (r >= b) { if (2*m <= r) { e *= 2; m *= 2; } else if (m > r) { e /= 2; m /= 2; } else { // утверждение: m <= r && r < 2*m q += e; r -= m; } } // q и r - частное и остаток от деления a на bКакое условие является инвариантом цикла?
double r, x; int n; . . . r *= x*x; r /= ((n+1)*(n+2)); n += 2;
int k = (-256); int n; signed char *p = (signed char *) &k; n = *p;
ln(1+x) = x - x2/2 + x3/3 - x4/4 + ...(мы обозначили z=1+x). Этот ряд сходится лишь для значений x, по абсолютной величине не превосходящих 1, а эффективно вычислятьего сумму можно только для еще более узкого интервала значений x. Какими свойствами функции ln(z)удобнее всего воспользоваться, чтобы свести ее вычисление к суммированию ряда?
int x = 0;while (x <= 100) { . . . x = x + 2;}
// Программа корень функции 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
double *p = 10000; p -= 1000; int n = (int) p;
102, 232, 307, 901, 835, 215, 105, 301, 335, 811.Каким будет содержимое массива после выполнения первых двух шаговсортировки (т.е. после сортировки по младшей и средней цифрам)?
typedef double* doubleptr; int m, n; // Размеры матрицы: число строк, столбцов . . . doubleptr* a = new doubleptr[m]; for (int i = 0; i < m; ++i) { a[i] = new double[n]; } // a[i][j] -- элемент i-й строки и j-го столбцаСколько памяти требуется для хранения прямоугольнойматрицы размером в 10 строк и 20 столбцовв 32-разрядной архитектуре(без учета памяти, используемой под описатели фрагментов кучи)?
x = s 2e m,где s - знак числа, принимающий значениеплюс или минус единица,e - порядок, представляющий собойцелое число (положительное, 0 или отрицательное),m - мантисса, представляющая собойвещественное число в диапазоне1 m < 2.Чему равны порядок и мантисса для числа 20?
typedef double R3Point[3];typedef double R3Vector[3];typedef void (*PntAct)(R3Point);typedef void (*VectAct)(R3Vector);
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Пусть эта функция применяется к прямоугольной матрице,содержащей 3 строки и 5 столбцов, элементы которой хранятсяв линейном массиве a. Сколько элементов массиваa при этом останутся на своем месте?