Группа Михайлова — различия между версиями
AM5800 (обсуждение | вклад) м (→6. String) |
AM5800 (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | == | + | ==Компиляция== |
Напишите псевдо код на основе ассемблерного кода в который разворачивается инструкция for: | Напишите псевдо код на основе ассемблерного кода в который разворачивается инструкция for: | ||
Строка 17: | Строка 17: | ||
Как работает линковка? Какую роль в ней играет relocation table | Как работает линковка? Какую роль в ней играет relocation table | ||
− | == | + | ==Сортировка слиянием== |
Реализуйте алгоритм merge sort | Реализуйте алгоритм merge sort | ||
− | == | + | ==Выделение памяти== |
Создайте двумерный массив двумя способами. | Создайте двумерный массив двумя способами. | ||
1) Используя N + 1 аллокацию | 1) Используя N + 1 аллокацию | ||
Строка 31: | Строка 31: | ||
Усложненное задание - сделать матрицы трегольными и написать процедуру, сливающие 2 такие матрицы в прямоугольную | Усложненное задание - сделать матрицы трегольными и написать процедуру, сливающие 2 такие матрицы в прямоугольную | ||
− | == | + | ==Расширяющийся массив== |
Реализуйте класс расширяющегося массива. | Реализуйте класс расширяющегося массива. | ||
Size - количество элементов в массиве. | Size - количество элементов в массиве. | ||
Строка 53: | Строка 53: | ||
size_t myCapacity; | size_t myCapacity; | ||
}; | }; | ||
− | == | + | ==Обертка над FILE== |
− | == | + | ==String== |
Реализовать класс String со следующими методами/требованиями | Реализовать класс String со следующими методами/требованиями | ||
String() | String() | ||
Строка 70: | Строка 70: | ||
Дополнительное задание - реализовать строку с таким же интерфейсом, но реализующую стратегию Copy On Write (COW) | Дополнительное задание - реализовать строку с таким же интерфейсом, но реализующую стратегию Copy On Write (COW) | ||
− | == | + | ==Smart FILE== |
Версия 21:28, 3 ноября 2012
Содержание
Компиляция
Напишите псевдо код на основе ассемблерного кода в который разворачивается инструкция for:
for (int i = 0; i < N; ++i) { //body }
Пример псевдокода:
if (a == 5) goto mark1 something mark1:
Чем плоха конструкция
#define MAX(a, b) a > b ? a : b
Приведите пример ее некорректного использования. (Возврат не максимального значения, побочные эффекты) Как можно ее улучшить?
Как работает линковка? Какую роль в ней играет relocation table
Сортировка слиянием
Реализуйте алгоритм merge sort
Выделение памяти
Создайте двумерный массив двумя способами. 1) Используя N + 1 аллокацию 2) Используя 2 аллокации Замерьте, при каких значениях размера массива происходит экстерминатус? (Компилируйте 32 разрядную версию. 64 может и не упасть) Какой вариант работает быстрее? Подумайте, почему это происходит. Обращаю внимание, что оба варианта созданных матриц должны иметь тип int**
Усложненное задание - сделать матрицы трегольными и написать процедуру, сливающие 2 такие матрицы в прямоугольную
Расширяющийся массив
Реализуйте класс расширяющегося массива. Size - количество элементов в массиве. Capacity - вместимость массива. Size <= Capacity Если при добавлении очередного элемента Size превышает Capacity, то Capacity следует увеличить вдвое
struct Array { Array(size_t capacity = 3); Array(Array & array); ~Array(); Array & operator=(Array & array); size_t Size(); size_t Capacity(); void Add(int value); int Get(size_t index); void Set(size_t index, int value); void Swap(Array & array); private: int* myData; size_t mySize; size_t myCapacity; };
Обертка над FILE
String
Реализовать класс String со следующими методами/требованиями
String() String(String &) String(char *) operator=(String &) operator=(char *) //реализовывать не нужно. Объясните, почему? append(String &) char ? at(size_t) // реализовать в двух версиях. Константную и не константную char * c_str() - возвращает обычную нуль-терминированную строку
Данные хранить как буффер для строки и ее размер. Строку хранить НЕ как нуль-терминированную. В приведенном выше ключевое слово const не используется умышленно.
Дополнительное задание - реализовать строку с таким же интерфейсом, но реализующую стратегию Copy On Write (COW)