игра брюс 2048
Главная / Программирование / Программирование / Тест 151

Программирование - тест 151

Упражнение 1:
Номер 1
Рассмотрим следующий фрагмент программы  на C++:

    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
после выполнения этого фрагмента?

Ответ:

 (1) n = 2  

 (2) n = 3  

 (3) n = 10  

 (4) n = 11  


Номер 2
Рассмотрим следующий фрагмент программы  на C++:

    double a[5][3];
    const double *p = &(a[0][0]);
    const double *q = &(a[2][2]);
    int n = q - p;

Чему равно значение n
после выполнения этого фрагмента?

Ответ:

 (1) n = 8  

 (2) n = 12  

 (3) n = 64  

 (4) n = 96  


Номер 3
Рассмотрим следующий фрагмент программы на C++:

    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
после выполнения этого фрагмента?

Ответ:

 (1) n = 3  

 (2) n = 13  

 (3) n = 21  

 (4) n = 22  


Упражнение 2:
Номер 1
Рассмотрим реализацию матрицы вещественных чисел,
размеры которой определяются
в процессе работы программы, через массив указателей на начала
строк, захватываемый в динамической памяти. Каждая строка
также представляет собой отдельный массив в
динамической памяти:

    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
уже находятся в регистрах процессора)?

Ответ:

 (1) одно обращение  

 (2) 2 обращения  

 (3) 3 обращения  


Номер 2
Рассмотрим реализацию матрицы вещественных чисел,
размеры которой определяются
в процессе работы программы, через массив указателей на начала
строк, захватываемый в динамической памяти. Каждая строка
также представляет собой отдельный массив в
динамической памяти:

    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-разрядной архитектуре
(без учета памяти, используемой под описатели фрагментов кучи)?

Ответ:

 (1) 1600 байтов  

 (2) 1640 байтов  

 (3) 1680 байтов  

 (4) 1760 байтов  


Номер 3
Рассмотрим реализацию матрицы целых чисел,
размеры которой определяются
в процессе работы программы, через массив указателей на начало
строк, захватываемый в динамической памяти. Каждая строка
также представляет собой отдельный массив в
динамической памяти:

    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)?

Ответ:

 (1) 800 байтов  

 (2) 840 байтов  

 (3) 880 байтов  

 (4) 960 байтов  


Упражнение 3:
Номер 1
Рассмотрим реализацию матрицы вещественных чисел
размера 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;
            }
        }
    }
}


Ответ:

 (1) Функция работает во всех случаях правильно.  

 (2) Функция работает правильно только для квадратных матриц.  

 (3) Функция работает правильно только для квадратных матриц и для матриц, в которых либо число строк, либо число столбцов равно единице.  


Номер 2
Рассмотрим реализацию матрицы вещественных чисел
размера 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 при этом останутся на своем месте?

Ответ:

 (1) 2 элемента  

 (2) 3 элемента  

 (3) 4 элемента  


Номер 3
Рассмотрим реализацию матрицы вещественных чисел
размера 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 при этом останутся на своем месте?

Ответ:

 (1) 2 элемента  

 (2) 3 элемента  

 (3) 4 элемента  

 (4) 5 элементов  


Упражнение 4:
Номер 1
Чему равен ранг следующей матрицы:

1  2  3  4
5  6  7  8
9 10 11 12


Ответ:

 (1) ранг равен 1  

 (2) ранг равен 2  

 (3) ранг равен 3  

 (4) ранг равен 4  


Номер 2
Чему равен ранг следующей матрицы:

1  1  1  1
1 -1  1 -1
1  1 -1 -1


Ответ:

 (1) ранг равен 1  

 (2) ранг равен 2  

 (3) ранг равен 3  

 (4) ранг равен 4  


Номер 3
Чему равен ранг следующей матрицы:

0 1 1 1
1 1 1 1
1 1 1 0


Ответ:

 (1) ранг равен 1  

 (2) ранг равен 2  

 (3) ранг равен 3  

 (4) ранг равен 4  


Упражнение 5:
Номер 1
Какова асимптотическая оценка времени работы
алгоритма Гаусса приведения матрицы
к ступенчатому виду
для случая квадратной матрицы размера n?

Ответ:

 (1) O(n)  

 (2) O(n2)  

 (3) O(n3)  


Номер 2
Какое максимальное число операций деления может
быть выполнено в алгоритме Гаусса в процессе приведения
к ступенчатому виду квадратной матрицы размера
4?

Ответ:

 (1) 5 операций деления  

 (2) 6 операций деления  

 (3) 7 операций деления  

 (4) 8 операций деления  


Номер 3
Какое максимальное число операций деления может
быть выполнено в алгоритме Гаусса в процессе приведения
к ступенчатому виду прямоугольной матрицы, содержащей
3 строки и 4 столбца?

Ответ:

 (1) 3 операции деления  

 (2) 4 операции деления  

 (3) 5 операций деления  

 (4) 6 операций деления  


Упражнение 6:
Номер 1
Сколько раз в алгоритме Гаусса будет выполнена операция
перестановки местами двух строк
(с изменением знака одной из них) при приведении к
ступенчатому виду следующей матрицы:

1  2  3  4
0  1  2  3
2  5  8 11


Ответ:

 (1) 1 раз  

 (2) 2 раза  

 (3) 3 раза  

 (4) 4 раза  


Номер 2
Сколько раз в алгоритме Гаусса будет выполнена операция
перестановки местами двух строк
(с изменением знака одной из них) при приведении к
ступенчатому виду следующей матрицы:

1  2  3  4
0  1  2  3
2  7 10 14


Ответ:

 (1) 1 раз  

 (2) 2 раза  

 (3) 3 раза  

 (4) 4 раза  


Номер 3
Сколько раз в алгоритме Гаусса будет выполнена операция
перестановки местами двух строк
(с изменением знака одной из них) при приведении к
ступенчатому виду следующей матрицы:

0 1 2 3
4 5 6 7
1 2 3 4


Ответ:

 (1) 1 раз  

 (2) 2 раза  

 (3) 3 раза  

 (4) 4 раза  




Главная / Программирование / Программирование / Тест 151