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

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

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

Рассмотрим реализацию матрицы вещественных чиселразмера 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Пусть эта функция применяется к прямоугольной матрице,содержащей 3 строки и 5 столбцов, элементы которой хранятсяв линейном массиве a. Сколько элементов массиваa при этом останутся на своем месте?

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

Варианты ответа
3 элемента (Верный ответ)
2 элемента
4 элемента
5 элементов
Похожие вопросы
Рассмотрим реализацию матрицы вещественных чиселразмера 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 при этом останутся на своем месте?
Рассмотрим реализацию матрицы вещественных чиселразмера m строк на n столбцовпри помощи линейного массива,в котором хранятся сначала элементы нулевой строки матрицы,затем первой, второй и т.д., в конце - элементы (m-1)-й строки:
    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;            }        }    }}
Рассмотрим реализацию матрицы вещественных чисел,размеры которой определяютсяв процессе работы программы, через массив указателей на началастрок, захватываемый в динамической памяти. Каждая строкатакже представляет собой отдельный массив вдинамической памяти:
    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уже находятся в регистрах процессора)?
Функция с прототипом
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);
Пусть дан массив a длины n,элементы которого нестрого возрастают, т.е. соседниеэлементы могут быть равными.Рассмотрим фрагмент программы бинарного поискаэлемента x в массивеa длины n, гдепосле отбрасывания особых ситуаций рассматриваетсяосновной случай:
        . . .        // Утверждение: 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?
Пусть дан массив a длины n,элементы которого нестрого возрастают, т.е. соседниеэлементы могут быть равными.Рассмотрим фрагмент программы бинарного поискаэлемента x в массивеa длины n, гдепосле отбрасывания особых ситуаций рассматриваетсяосновной случай:
        . . .        // Утверждение: 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?
Пусть дан массив a длины n,элементы которого нестрого возрастают, т.е. соседниеэлементы могут быть равными.Рассмотрим фрагмент программы бинарного поискаэлемента x в массивеa длины n, гдепосле отбрасывания особых ситуаций рассматриваетсяосновной случай:
        . . .        // Утверждение: 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?
Функция ln(z) (натуральный логарифм z) представляетсяв виде степенного ряда следующим образом:
    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?Укажите все правильные ответы из числа перечисленных ниже.
Какое максимальное число операций деления можетбыть выполнено в алгоритме Гаусса в процессе приведенияк ступенчатому виду прямоугольной матрицы, содержащей3 строки и 4 столбца?