
- •Дані як основа, з якою працює програмне забезпечення. Модифікація даних. Вимоги до даних в частині швидкості пошуку та модифікації. Навести приклади із баз даних різного призначення.
- •Структура даних мови Object Pascal, коротка характеристика складених типів даних, приклади використання.
- •Масиви статичні та динамічні, переваги та недоліки. Використання масивів для організації роботи з даними. Заповнення масивів з файлу.
- •Формування типізованого файлу на базі таблиці Excel. Приклад програми.
- •Масиви статичні та динамічні. Додавання, видалення та модифікація даних (робота із даними). Приклад програмного коду.
- •Стек: призначення, приклади, застосування. Організація та робота стеку на базі масиву. Приклад програмного коду.
- •Черга: призначення, приклади , застосування. Організація та робота черги на базі масиву. Приклад програмного коду.
- •Пошук даних в масиві. Послідовний та бінарний методи пошуку. Переваги та недоліки. Приклад програмного коду.
- •Сортування масивів на місці, прості та складні алгоритми сортування. Приклад програмного коду (але не бульбашкою).
- •Сортування масивів на місці, метод вставок.
- •Сортування масивів на місці, метод простого вибору.
- •Сортування масивів на місці, метод Shaker (одночасний пошук мінімального та максимального елементів.
- •Динамічний список: призначення, організація, формування, ініціалізація, наприклад з файлу. Переваги та недоліки порівняно з масивами. Приклад програмного коду.
- •Лінійний динамічний список: додавання, видалення та модифікація даних (робота з даними, порівняти із масивами). Приклад програмного коду.
- •Кільцевий динамічний список: переваги та недоліки порівняно з лінійним. Додавання, видалення та модифікація даних (робота із даними). Порівняти з лінійним. Приклад програмного коду.
- •Сортування даних у динамічних списках по одному та декільком полях. Приклад програмного коду.
- •Стек: призначення, приклади , застосування. Організація стеку за допомогою лінійного динамічного списку. Приклад програмного коду.
- •Включення/забирання елемента до/з стеку. Приклад програмного коду.
- •Включення/забирання елемента до/з черги. Приклад програмного коду.
- •Черга: призначення, приклади застосування. Організація черги за допомогою лінійного динамічного списку. Приклад програмного коду.
- •Формування черги: принципи вставки заявок у чергу, використання приоритетів при формування черги. Позачерговий пріоритет (0).
- •Визначення характеристик черги: середня довжина черги, середній час виконання заявки.
- •Наведіть алгоритми додавання (insert) заявки у чергу.
- •Наведіть алгоритми обслуговування (service) заявки у черзі.
- •Робота із плоским файлом. Додавання, видалення та модифікація даних (робота із даними). Файли переповнення. Порівняти з масивами та списками. Приклад програмного коду.
- •Пошук даних у плоских файлах (послідовний та бінарний). Сортування файлів по одному та декільком полям. Приклад програмного коду.
- •Пошук даних у плоских декількох логічно зв’язаних файлах. Приклад програмного коду.
- •Індексні файли: призначення, створення та використання. Переваги та недоліки. Приклад програмного коду.
- •Сторінкова організація файлу: переваги та недоліки порівняно з плоским файлом. Файли переповнення.
- •Індексна організація файлу. Одно- та багаторівнева індексація. Переваги та недоліки порівняно з плоским файлом. Ознаки необхідності реорганізації файлу. Навести схему з поясненнями.
- •Динамічна організація при сторінковій організації файлу, організація файлів переповнення. Навести схему з поясненнями.
- •Файли прямого доступу. Визначення адрес в залежності від значення даних. Функції хешування. Файл переповнення. Загальні алгоритми.
- •Функції хешування: алгоритми ділення, складання.
- •Функції хешування: алгоритми зсуву розрядів, .
- •Функції хешування: алгоритми ділення, .
- •Колізії при хешуванні, шляхи (декілько) розв’язання цих проблем.
- •Дерева: загальна характеристика, структура вузла, приклади використання.
- •Бінарні дерева пошуку: приклади призначення, структура вузла, алгоритм формування.
- •Бінарні ідеально сбалансовані дерева: приклади призначення, структура вузла, алгоритм формування.
Стек: призначення, приклади, застосування. Організація та робота стеку на базі масиву. Приклад програмного коду.
Стек, це динамічний список, дані у який вставляються у «хвіст», вибір даних теж виконуються із «хвоста». Мнемонічна назва цієї структури: «останнім прийшов – першим вийшов». Якщо записати у стек якусь послідовність даних, а потім її вибрати із стеку, то отримаємо інвертовану структуру (переписану с кінця). Нижче наведено процедури додавання та вибору елементів із стеку.
const
M:Mas1=((p:3; q:2),(p:1; q:5),(p:1; q:2),(p:2; q:3),(p:2; q:1),
(p:4; q:4),(p:4; q:2),(p:3; q:1),(p:2; q:1),(p:4; q:5),(p:0; q:5));
procedure InsertNodeStack(var First:TNode; Info:Node);
{Вставка одного елемента у стек }
var
NewP:TNode;
begin
New(NewP); // формування елементу стеку і вставка його у стек
NewP^.q:=Info.q; NewP^.p:=Info.p; NewP^.Next:=nil;
if First=nil then
begin //якщо стек порожній
NewP^.Next:=nil; First:=NewP;
end
else
begin //якщо стек не порожній
NewP^.Next:=First First:=NewP;
end;;// procedure InsertNodeStack
Черга: призначення, приклади , застосування. Організація та робота черги на базі масиву. Приклад програмного коду.
Черга в програмуванні — динамічна структура даних, що працює за принципом "перший прийшов - перший пішов" Елемент, що додається до черги, опиняється в її хвості. Елемент, що видаляється з черги, знаходиться в її голові.
Процедура вставки чергового елементу у хвіст черги.
p
rocedure
InsertNodeLine(var:TNode; Info:Node);
{Додавання елементу у чергу, якщо черга порожня, то First:= nil
First – адреса «хвоста» списку, Info – інформаційна частина елементу списку, тип даних - record}
var
NewP:TNode;
begin
New(NewP); // виділення пам’яті під елемент черги
NewP^.q:=Info.q; // заповнення інформаційної частини елементу
NewP^.p:=Info.p;
NewP^.Next:=nil;
if First=nil then
begin // якщо черга порожня
NewP^.Next:=nil;
First:=NewP;
end
else
begin //якщо в черзі є хоча б один елемент
NewP^.Next:=First;
First:=NewP;
end;
end;// procedure InsertNodeLine
Пошук даних в масиві. Послідовний та бінарний методи пошуку. Переваги та недоліки. Приклад програмного коду.
Бинарный поиск:
Для того, чтобы найти нужную запись в таблице, в худшем случае требуется log2(N) сравнений. Это значительно лучше, чем при последовательном поиске.
BinarySeekMassiv(Left,Right, Number:integer;
var Index,Quant:integer;
M:group):boolean;
begin
BinarySeekMassiv:=false; Quant:=0;
while Left <= Right do
begin
Middle:=(Left+Right) div 2;
if M[Middle].NomKaf < Number then
begin
Left:=Middle+1;
Inc(Quant);
end
else
if M[Middle].NomKaf > Number then
begin
Right:=Middle-1;
Inc(Quant);
end
else
//інакше ми найшли елемент, що шукали
begin
BinarySeekMassiv:=true;
Index:=Middle;
//виходимо із процедури
Exit;
end;
end;
end;
Последовательный
Для последовательного поиска в среднем требуется (N+1)/2 сравнений. Таким образом, порядок алгоритма - линейный - O(N).
//шукаємо елемент із кодом 2 послідовним пошуком
J:=0;
while G[J].NomKaf <>2 do
Inc(J);