Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
M1_5spPm.doc
Скачиваний:
1
Добавлен:
18.09.2019
Размер:
176.13 Кб
Скачать

3. Типи циклів та перевірка умов закінчення циклів лінійного пошуку на мові асемблера

За створення таблиць в SQL відповідає мова визначення даних (ММД), яка включає 3 основні операції: create – створення таб­лиць та інших об’єктів бази даних, alter – зміна форматів таблиць або інших об’єктів та drop – таблиць або інших об’єктів. Звичайно в сис­тем­них програмах немає потреби в оперативних змінах форматів запи­сів і ці формати визначаються в процесі розробки системної програми. Тому при роботі з таблицями системних програм за аналогією з об’єкт­но-орієнтованим програмуванням зручніше використовувати конструк­тори і деструктори таблиць.

Основними програмами застосування таблиць є системні програми та програми СУБД. Мова маніпуляції даними (ММД), що входить до складу базової мови реляційних СУБД, включає 4 основні операції: select – вибірка даних з таблиць бази даних, insert – занесення даних до таблиць, update – корекція даних за місцем збереження та delete – вилучення даних з таблиць. Якщо вибірка здійснюється за результатами аналізу ключів або аргументів пошуку необхідно мати в наявності підпрограми порівняння за визначеними відношення порядку ключових полів або універсальну програму порівняння з керуванням типами полів ключів.

В наших прикладах для простоти подальшого розгляду запинимось на таблицях, що визначаються масивами структур і мають фіксовані ключові поля в підпрограмах порівняння.

При обробці таблиць з використанням доступу за прямою адресою ключові поля пошуку звичайно не використовуються, а використовуються лише прямі адреси, номери або покажчики елементів. Шаблони розв’язання задач комп’ю­тер­но­го практикуму spLb1 включають відповідні заголовки та реалізації таких функцій. Базовою підпрограмою для всіх цих функцій є підпрограма вибірки, до якої звертаються при виконанні всіх підпрограм комплексу.

// обробка таблиць за прямою адресою

// вибірка за прямою адресою

struct recrd* selNmb(struct recrd* tb,

// покажчик на початок таблиці

int nElm) // номер елемента

{return &tb[nElm];

// повернення покажчика на обраний елемент

}

Істотним моментом в цих підпрограмах є обмеження кількості елементів сегменту таблиці з будь-якою організацію. Якщо виконувати обробку за межами пам’яті, виділеної для сегментів таблиці, можна одержати неправильні результати або особливі випадки роботи з пам’яттю. Тому при поверненні покажчика, що виходить за межі виділеного сегменту доцільно повертати значення, що відповідає невдалому пошуку. Додавши до списку аргументів граничну довжину або покажчик на неї, ми одержимо можливість перевіряти вихід за межі сегменту.

Завдання: вдосконалити функцію вибірки з врахуванням наявного розміру сегмента і відобразити її через вставку на мові Асемблера.

В підпрограмі включення 1-м аргументом є запис, що додається до таблиці, а 4-м аргументом є покажчик на змінну, що зберігає поточну кількість заповнених елементів таблиці, але він не обов’язково дорівнює розміру сегмента. Розмір сегмента таблиці може бути переданий до відповідної підпрограми як параметр, але в об’єктно-орієнтованому програмуванні його краще зберігати в одному з полів об’єкта таблиці.

// включення за прямою адресою

struct recrd* insNmb(struct recrd*pElm,

struct recrd*tb, // покажчик на початок таблиці

int nElm, // номер елемента

int*pQnElm) // кількість заповнених елементів

{int n=*pQnElm;

if(nElm<n)return NULL;

while(nElm<n)tb[nElm++]=emptyElm;

tb[nElm++]=*pElm;

*pQnElm=nElm;

return &tb[nElm-1];

}

Завдання: вдосконалити функцію включення з врахуванням наявного розміру сегменту і відобразити її через вставку на мові Асемблера.

В підпрограмі вилучення використовується ознака вилучення елемента, що записується в структурі.

// вилучення за прямою адресою

struct recrd* delNmb(struct recrd*, int nElm);

{tb[nElm]._del=-1;

return &tb[nElm];

}

Завдання: вдосконалити функцію вилучення з врахуванням наявного розміру сегменту і відобразити її через вставку на мові Асемблера.

В підпрограмі корекції за прямою адресою коригуються лише занесені елементи.

// корекція за прямою адресою

struct recrd* updNmb(struct recrd *pElm,

struct recrd*tb, int nElm, int*pQnElm);

{int n=*pQnElm;

if(nElm>=n)return NULL;

tb[nElm]=*pElm;

return &tb[nElm];

}

Завдання: вдосконалити функцію вилучення з врахуванням наявного розміру сегменту і відобразити її через вставку на мові Асемблера.

Системні програми в процесі свого виконання використовують власну вбудовану інформаційну базу (IБ), а також будує інформаційну базу про текст на заданій мові.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]