Группа Михайлова — различия между версиями
AM5800 (обсуждение | вклад) (→3. Выделение памяти) |
AM5800 (обсуждение | вклад) м |
||
| Строка 2: | Строка 2: | ||
Напишите псевдо код на основе ассемблерного кода в который разворачивается инструкция for: | Напишите псевдо код на основе ассемблерного кода в который разворачивается инструкция for: | ||
| − | for (int i=0; i < N; ++i) { | + | for (int i = 0; i < N; ++i) { |
//body | //body | ||
} | } | ||
| Строка 30: | Строка 30: | ||
Усложненное задание - сделать матрицы трегольными и написать процедуру, сливающие 2 такие матрицы в прямоугольную | Усложненное задание - сделать матрицы трегольными и написать процедуру, сливающие 2 такие матрицы в прямоугольную | ||
| + | |||
| + | ==4. Расширяющийся массив== | ||
| + | Реализуйте класс расширяющегося массива. | ||
| + | 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; | ||
| + | }; | ||
| + | ==5. Обертка над FILE== | ||
| + | ==6. String== | ||
| + | ==7. Smart FILE== | ||
Версия 21:25, 3 ноября 2012
Содержание
1. Компиляция
Напишите псевдо код на основе ассемблерного кода в который разворачивается инструкция 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
2. Сортировка слиянием
Реализуйте алгоритм merge sort
3. Выделение памяти
Создайте двумерный массив двумя способами. 1) Используя N + 1 аллокацию 2) Используя 2 аллокации Замерьте, при каких значениях размера массива происходит экстерминатус? (Компилируйте 32 разрядную версию. 64 может и не упасть) Какой вариант работает быстрее? Подумайте, почему это происходит. Обращаю внимание, что оба варианта созданных матриц должны иметь тип int**
Усложненное задание - сделать матрицы трегольными и написать процедуру, сливающие 2 такие матрицы в прямоугольную
4. Расширяющийся массив
Реализуйте класс расширяющегося массива. 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;
};