- •2. Первая нормальная форма (1nf)
- •3. Вторая нормальная форма (2nf)
- •4. Третья нормальная форма (3nf)
- •Использование спецификаторов доступа при наследовании классов.
- •Использование спецификаторов доступа при объявлении членов класса.
- •Конструкторы и деструкторы их назначение, объявление и использование при наследовании классов.
- •Виртуальные функции и абстрактные классы их определение, назначение.
- •Перегрузка операторов, для чего применяется, как осуществляется.
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Шаблоны классов их создание и причины использования.
- •Функции преобразования. Их создание и причины применения.
- •Текстовые и бинарные потоки их организация и отличия записи данных.
- •Передача объектов в функции. Как осуществляется, возникающие проблемы и методы их устранения.
- •Возвращение объектов из функций. Как осуществляется, возникающие проблемы и методы их устранения.
- •Перегрузка конструкторов как осуществляется и зачем применяется.
- •Библиотека стандартных шаблонов, для чего предназначена, что включает.
- •Контейнеры
- •Алгоритмы
- •Функциональные объекты
- •Итераторы
- •Дружественные функции для чего используются, как определяются.
- •Массивы объектов и их обработка.
- •Сортировка массивов (пузырьком, слиянием, подсчетом, быстрая сортировка Хоара)
- •Нахождение минимальных, максимальных элементов массива.
- •Задачи динамического программирование. Построение рекуррентных соотношений.
- •Алгоритмы нахождения палиндрома в строке.
- •Битовые операции в языках программирования.
- •Двоичный поиск.
Битовые операции в языках программирования.
Побитовое И
Побитовое
И используется для выключения битов.
Любой бит, установленный в
,
вызывает установку соответствующего
бита результата также в
.
& |
|
11001010 11100010 |
|
|
11000010 |
[править]Побитовое ИЛИ
Побитовое
ИЛИ используется для включения битов.
Любой бит, установленный в
,
вызывает установку соответствующего
бита результата также в
.
| |
|
11001010 11100010 |
|
|
11101010 |
[править]Побитовое НЕ
Побитовое НЕ инвертирует состояние каждого бита исходной переменной.
~ |
|
11001010 |
|
|
00110101 |
[править]Побитовое исключающее ИЛИ
Исключающее ИЛИ устанавливает значение бита результата в , если значения в соответствующих битах исходных переменных различны.
^ |
|
11001010 11100010 |
|
|
00101000 |
[править]Побитовые сдвиги
Операторы
сдвига
и
сдвигают
биты в переменной влево или вправо на
указанное число. При этом на освободившиеся
позиции устанавливаются нули (кроме
сдвига вправо отрицательного числа, в
этом случае на свободные позиции
устанавливаются единицы, так как числа
представляются в двоичном
дополнительном коде и
необходимо поддерживать знаковый бит).
Сдвиг влево может применяться для умножения числа на два, сдвиг вправо — для деления.
x = 7 // 00000111 (7)
x = x >> 1 // 00000011 (3)
x = x << 1 // 00000110 (6)
x = x << 5 // 11000000 (-64)
x = x >> 2 // 11110000 (-16)
В
языке программирования Java существует
также оператор беззнакового битового
сдвига вправо
.
При использовании этого оператора на
освободившиеся позиции всегда
устанавливаются нули.
x = 7 // 00000111 (7)
x = x << 5 // 11100000 (-32)
x = x >>> 2 // 00111000 (56)
Двоичный поиск.
int Search_Binary (int arr[], int left, int right, int key)
{
int midd = 0;
while (1)
{
midd = (left + right) / 2;
if (key < arr[midd]) // если искомое меньше значения в ячейке
right = midd - 1; // смещаем правую границу поиска
else if (key > arr[midd]) // если искомое больше значения в ячейке
left = midd + 1; // смещаем левую границу поиска
else // иначе (значения равны)
return midd; // функция возвращает индекс ячейки
if (left > right) // если границы сомкнулись
return -1;
}
}
int main()
{
setlocale (LC_ALL, "rus");
const int SIZE = 12;
int array[SIZE] = {};
int key = 0;
int index = 0; // индекс ячейки с искомым значением
for (int i = 0; i < SIZE; i++) // заполняем и показываем массив
{
array[i] = i + 1;
cout << array[i] << " | ";
}
cout << "\n\nВведите любое число: ";
cin >> key;
index = Search_Binary (array, 0, SIZE, key);
if (index >= 0)
cout << "Указанное число находится в ячейке с индексом: " << index << "\n\n";
else
cout << "В массиве нет такого числа!\n\n";
return 0;
}
