Группа Михайлова — различия между версиями

Материал из SEWiki
Перейти к: навигация, поиск
(3. Выделение памяти)
м
Строка 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;
};

5. Обертка над FILE

6. String

7. Smart FILE