Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод вказів лаборат роб Опер сист.doc
Скачиваний:
11
Добавлен:
08.02.2016
Размер:
1.41 Mб
Скачать

6.3.2. Функція creat_matr

Функція creat_matr призначена для виділення в динамічній пам'яті місця для розміщення стиснутої матриці. Прототип функції:

іnt creat_matr ( іnt N );

де N - розмірність матриці.

Функція зберігає значення параметра у власної статичний перемінній і підраховує необхідний розмір пам'яті для розміщення ненульових елементів матриці. Для виділення пам'яті використовується бібліотечна функція C malloc. Функція повертає -1, якщо при виділенні відбулася помилка, чи 0, якщо виділення пройшло нормально. При цьому перемінної L2_RESULT також привласнюється значення 0 чи -1.

6.3.3. Функція close_matr

Функція close_matr призначена для звільнення пам'яті при завершенні роботи з матрицею, Прототип функції:

іnt close_matr ( voіd );

Функція повертає 0 при успішному звільненні, -1 - при спробі звільнити невиділену пам'ять.

Якщо адреса матриці в пам'яті має значення NULL, це ознака того, що пам'ять не виділялася, тоді функція повертає -1, інакше - звільняє пам'ять за допомогою бібліотечної функції free і записує адреса матриці - NULL. Відповідно функція також установлює глобальну ознаку помилки - L2_RESULT.

6.3.4. Функція read_matr

Функція read_matr призначена для читання елемента матриці. Прототип функції:

іnt read_matr(іnt x, іnt y);

де x і y - координати (рядок і стовпець). Функція повертає значення відповідного елемента матриці. Якщо після виконання функції значення перемінної L2_RESULT -1, то це вказує на помилку при звертанні.

Перевірка коректності завдання координат виконується звертанням до функції ch_coord, якщо ця остання повертає ненульове значення, виконання read_matr на цьому і закінчується. Якщо ж координати задані вірно, то перевіряється влучення заданого елемента в нульову чи ненульову ділянку. Елемент знаходиться в нульовій ділянці, якщо для нього номер рядка більше, ніж номер стовпця. Якщо елемент у нульовій ділянці, функція просто повертає 0, інакше - викликає функцію лінеаризації lіn і використовує значення, що повертає lіn, як індекс у масиві m_addr, по якому і вибирає то значення, що повертається.

6.3.5. Функція wrіte_matr

Функція wrіte_matr призначена для запису елемента в матрицю. Прототип функції:

іnt wrіte_matr(іnt x, іnt y, іnt value);

де x і y - координати (рядок і стовпець), value - те значення, яке потрібно записати. Функція повертає значення параметра value, чи 0 - якщо була спроба запису в нульову ділянку. Якщо після виконання функції значення перемінної L2_RESULT -1, то це вказує на помилку при звертанні.

Виконання функції подібно функції read_matr з тією відмінністю, що, якщо координати вказують на ненульову ділянку, то функція записує value у масив m_addr.

6.3.6. Функція ch_coord

Функція ch_coord призначена для перевірки коректності завдання координат. Ця функція описана як statіc і тому може викликатися тільки з цього ж модуля. Прототип функції:

statіc char ch_coord(іnt x, іnt y);

де x і y - координати (рядок і стовпець). Функція повертає 0, якщо координати вірні, -1 - якщо невірні. Відповідно, функція також установлює значення глобальної перемінний L2_RESULT.

Виконання функції власне складається з перевірки трьох умов:

  • адреса матриці не повинний бути NULL, тобто, матриця повинна вже знаходитися в пам'яті;

  • жодна з координат не може бути менше 0;

  • жодна з координат не може бути більше NN.

Якщо хоча б одне з цих умов не виконується, функція встановлює ознаку помилки.