Skip to content

Commit 221df3a

Browse files
committed
Added tickets 21, 28-32
1 parent 4b9337e commit 221df3a

File tree

6 files changed

+242
-12
lines changed

6 files changed

+242
-12
lines changed

slides/ticket21.md

+72-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,75 @@
11
# Экзаменационный билет №21
22

3+
## 1.Плексы как представление рисунков, состоящих из точек и соединяющих их отрезков.
34

4-
## 1. Плексы как представление рисунков, состоящих из точек и соединяющих их отрезков.
5-
## 2. Структуры хранения динамических структур типа стек и очередь
5+
Рассмотрим в качестве базовых объектов основные геометрические фигуры – точку, окружность, прямоугольник и т.д.
6+
7+
**Информационное описание объектов** – параметры фигуры (координаты, размер, радиус и др.). В общем случае, описание фигуры включает значение координат некоторой опорной точки.
8+
9+
**Операции обработки** геометрических объектов включают методы для задания и изменения параметров; расширим набор операций процедурами визуализации (например, на экране дисплея) и скрытия фигур.
10+
11+
![](../pictures/ticket21-1.png)
12+
13+
Для обеспечения возможности динамической визуализации геометрических объектов введем тип данных, значения которого вычисляются в соответствии с задаваемым формульным выражением.
14+
15+
**Составной объект** – набор геометрических объектов (как базовых, так и составных), рассматриваемых при выполнении операций обработки как единый объект.
16+
17+
**Геометрический объект** может быть сконструирован с использованием уже существующих объектов (например, ломаная может быть определена через набор конечных точек составляющих отрезков).
18+
19+
**Геометрический объект** может быть образован при помощи сборки существующих объектов – рассмотрим данный способ построения новых объектов на примере рисунков (чертежей), образованных только из объектов двух базовых типов: точек и линий
20+
21+
![](../pictures/ticket21-2.png)
22+
23+
![](../pictures/ticket21-3.png)
24+
25+
- Узел структуры хранения представляет линию чертежа.
26+
- Указатель на начальную точку линии может также указывать на линию, т.е. конечная точка предыдущей линии является начальной точкой следующей линии.
27+
- **Плекс** - структура хранения данного вида (содержит элементы разного типа). **Плекс** является общей структурой хранения сетевых моделей данных.
28+
- Повторяющая точка на чертеже должна быть представлена одним и тем же объектом (не следует допускать множественности представления одного и того же значения).
29+
- Разработанная структура хранения позволяет обеспечить представление чертежей, которые можно нарисовать без отрыва карандаша от бумаги.
30+
31+
![](../pictures/ticket21-4.png)
32+
33+
## 2. Сравнение непрерывной и списковой структур хранения.
34+
35+
![](../pictures/ticket21-5.png)
36+
37+
- Для хранения элементов базисного множества выделяется вектор памяти размера, достаточного для хранения максимально возможного количества значения в стеке.
38+
- Хранение значений в памяти осуществляется последовательно от младшего элемента вектора к старшему.
39+
- Для запоминания количества хранимых в стеке значений используется индекс последнего занятого элемента в векторе.
40+
41+
![](../pictures/ticket21-6.png)
42+
43+
![](../pictures/ticket21-7.png)
44+
45+
![](../pictures/ticket21-8.png)
46+
47+
```C++
48+
#define MemSize 25 // размер памяти для стека
49+
class TStack
50+
{
51+
protected:
52+
int Mem[MemSize]; // память для СД
53+
int Top; // индекс последней занятой ячейки
54+
public:
55+
TStack () { Top = -1; }
56+
int IsEmpty (void) const { Top == -1; }
57+
int IsFull (void) const { Top == MemSize-1;}
58+
void Put ( const int Val ) { Mem[++Top] = val; }
59+
TData Get (void) { return Mem[Top--]; }
60+
};
61+
```
62+
63+
### Очередь
64+
65+
![](../pictures/ticket21-9.png)
66+
67+
![](../pictures/ticket21-10.png)
68+
69+
**Способы достижения полного использования памяти:**
70+
71+
![](../pictures/ticket21-11.png)
72+
73+
Сдвиг значений очереди после выборки очередного значения (т.е. обеспечение `Li=0`) – возрастание накладных расходов, использование левого участка свободной области при достижении `Hi=n-1` (т.е. при отсутствии свободной памяти справа).
74+
75+
**Циклический или кольцевой буфер** - структура хранения, получаемая из вектора расширением отношения следования парой `p(an,a1)`. Реализация кольцевого буфера логически может быть обеспечена переходом индексов `Li` и `Hi` при достижении граничного значения `MemSize-1` на индекс первого элемента вектора памяти.

slides/ticket28.md

+18-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
# Экзаменационный билет №28
22

3+
## 1.Сравнительная характеристика способов организации таблиц
34

4-
## 1. Сравнительная характеристика способов организации таблиц.
5-
## 2. Представление текста связным списком.
5+
# `НЕТУ ЧОТА`
6+
7+
## 2. Представление текста связным списком.
8+
9+
![](../pictures/ticket28-1.png)
10+
11+
![](../pictures/ticket28-2.png)
12+
13+
![](../pictures/ticket28-3.png)
14+
15+
- На всех уровнях представления (кроме символов) значение задается указателем на соответствующую структуру нижерасположенного уровня.
16+
- Разработанная структура хранения называется связным (иерархическим) списком.
17+
- Абстрактная структура типа дерева представима в виде связного списка.
18+
- В списке существуют делимые и неделимые (атомарные, терминальные) элементы.
19+
- Визуальное представление текста содержит только атомарные элементы, структура хранения должна включать все элементы.
20+
21+
![](../pictures/ticket28-4.png)

slides/ticket29.md

+88-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,91 @@
11
# Экзаменационный билет №29
22

3+
## 1.Структура хранения множеств.
34

4-
## 1. Структура хранения множеств.
5-
## 2. Повторное использование памяти (сборка мусора).
5+
**Множество** – набор элементов.
6+
7+
Для множества определены операции:
8+
9+
- проверка наличия элемента a ∈ A,
10+
- добавление элемента A + a,
11+
- удаление элемента A – a.
12+
Теоретико-множественные операции:
13+
- объединение A ∪ B,
14+
- пересечение A ∩ B,
15+
- вычитание A \ B.
16+
Универс U – множество всех элементов.
17+
18+
**Проектирование:**
19+
20+
![](../pictures/ticket28-1.png)
21+
22+
![](../pictures/ticket28-2.png)
23+
24+
![](../pictures/ticket28-3.png)
25+
26+
## 2. Повторное использование памяти (сборка мусора).
27+
28+
При удалении разделов текста для освобождения звеньев следует учитывать следующие моменты:
29+
30+
- обход всех звеньев удаляемого текста может потребовать длительного времени
31+
- при множественности ссылок на разделы текста (для устранения дублирования одинаковых частей) удаляемый текст нельзя исключить
32+
– этот текст может быть задействован в других фрагментах текста.
33+
34+
Память, занимаемая удаляемым текстом, не освобождается, а удаление текста фиксируется установкой указателей в состояние NULL (например, `pFirst=NULL`).
35+
Подобный способ выполнения операций удаления текста может привести к ситуации, когда в памяти, используемой для хранения текста, могут присутствовать звенья, на которые нет ссылок в тексте и которые не возвращены в систему управления памятью для повторного использования. Элементы памяти такого вида носят наименование "**мусора**". Наличие "мусора" в системе может быть допустимым, если имеющейся свободой памяти достаточно для работы программ. В случае нехватки памяти необходимо выполнить "**сборку мусора**".
36+
37+
Возможный подход доступа к системе управления памятью – разработка специальной системы управления при помощи перегрузки операторов `new` и `delete`.
38+
39+
Общая схема подхода:
40+
41+
- Для системы управления память выделяется полностью при начале работы программы; вся память форматируется и представляется в виде линейного списка свободных звеньев.
42+
- Для фиксации состояния памяти в классе `TTextLink` создается статическая переменная `MemHeader` типа `TTextMem`.
43+
44+
```C++
45+
class TTextMem{
46+
PTTextLink pFirst; // первое звено
47+
PTTextLink pLast; // последнее звено
48+
PTTextLink pFree; // первое свободное
49+
```
50+
51+
- Для выделения и форматирования памяти определяется статический метод `InitMemSystem` класса `TTextLink`.
52+
53+
```C++
54+
void TTextLink::InitMemSystem(int size) // инициализация памяти
55+
{
56+
char Line[100];
57+
char *tmp = new char[sizeof(TTextLink)*size];
58+
MemHeader.pFirst = (PTTextLink)new char[sizeof(TTextLink)*size];
59+
MemHeader.pFree = MemHeader.pFirst;
60+
MemHeader.pLast = (PTTextLink)tmp + size - 1;
61+
PTTextLink pLink = MemHeader.pFirst;
62+
for (int i = 0; i < size - 1; i++, pLink++) // размер памяти
63+
pLink->pNext = pLink + 1;
64+
pLink->pNext = nullptr;
65+
}
66+
```
67+
68+
- При запросе памяти в операторе new выделяется первое свободное звено.
69+
70+
```C++
71+
void * TTextLink::operator new(size_t size) // выделение звена
72+
{
73+
PTTextLink pLink = MemHeader.pFree;
74+
if (MemHeader.pFree != nullptr)
75+
MemHeader.pFree = pLink->pNext;
76+
return pLink;
77+
}
78+
```
79+
80+
- При освобождение звена в операторе `delete` звено включается в список свободных звеньев.
81+
82+
```C++
83+
void operator delete (void *pM)
84+
{
85+
PTTTextLink pLink=(PTTTextLink)pM;
86+
pLink->pNext=MemHeader.pFree;
87+
MemHeader.pFree=pLink;
88+
}
89+
```
90+
91+
- Для различения звеньев «мусора» и текста – маркировка текстовых звеньев и звеньев списка свободных звеньев.

slides/ticket30.md

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# Экзаменационный билет №30
22

3+
## 1.Группирование геометрических объектов
34

4-
## 1. Группирование геометрических объектов.
5-
## 2. Алгоритмы обхода графов. Поиск в глубину.
5+
# `НЕТУ ЧОТА`
6+
7+
## 2. Алгоритмы обхода графов. Поиск в глубину.
8+
9+
![](../pictures/ticket30-1.jpg)
10+
11+
![](../pictures/ticket30-2.jpg)
12+
13+
![](../pictures/ticket30-3.jpg)

slides/ticket31.md

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Экзаменационный билет №31
22

3+
## 1.Конструирование геометрических объектов.
34

4-
## 1. Конструирование геометрических объектов.
5-
## 2. Алгоритмы обхода графов. Поиск в ширину.
5+
# `НЕТУ ЧОТА`
6+
7+
## 2. Алгоритмы обхода графов. Поиск в ширину.
8+
9+
![](../pictures/ticket31-1.jpg)
10+
11+
![](../pictures/ticket31-2.jpg)

slides/ticket32.md

+46-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,49 @@
11
# Экзаменационный билет №32
22

3+
## 1.Комбинирование геометрических объектов (плексы).
34

4-
## 1. Комбинирование геометрических объектов (плексы).
5-
## 2. Реализация алгоритма обхода графа.
5+
# `НЕТУ ЧОТА`
6+
7+
## 2. Реализация алгоритма обхода графа.
8+
9+
Алгоритмы обхода (итератор)
10+
11+
```C++
12+
TSearchMode; // способ обхода
13+
PTGraphNode pCurrNode; // текущая вершина
14+
// Достигнутые, но не обработанные вершины
15+
TDataRoot *pStream;
16+
// Множество вершин, достигнутых в ходе обхода
17+
TBitField *pFound;
18+
```
19+
20+
**Инициализация `(Reset)`**
21+
22+
- Инициализация структур
23+
- Вставка первой вершины в поток `pStream` и ее отметка в множестве `pFound`
24+
- Выполнение метода `GoNext`
25+
26+
**Проверка завершения `(IsGraphEnded)`**
27+
28+
```C++
29+
return pCurrNode == NULL // тукущее звено?
30+
```
31+
32+
**Переход к следующей вершине графа `(GoNext)`**
33+
34+
- Получить вершину из потока `pStream`
35+
- Поместить смежные вершины, если они еще остались не достигнуты, в поток `pStream`
36+
- Отметить смежные вершины в множестве pFound
37+
38+
```C++
39+
int Reset (void); // установить на первую вершину
40+
int IsGraphEnded (void) const; // обход завершен?
41+
int GoNext (void); // переход к следующей вершине
42+
PTGraphNode GetCurrNode (void) { return pCurrNode; } // доступ
43+
PTGraphPath GetShortestPath (string fn, string ln); // поиск кратчайшего пути
44+
protected:
45+
virtual void Print (ostream &os); // печать графа
46+
};
47+
typedef TGraph * PTGraph;
48+
// end of tgraph.h
49+
```

0 commit comments

Comments
 (0)