Лабораторна робота 4
Тема: Алгебра многочленів. Скінчені множини та розріджені матриці. Керування купою
Завдання.
1) Написати функції, що реалізують основні операції та предикати булевої алгебри множин цілих чисел: введення/виведення, об’єднання, перетин, різницю, симетричну різницю, включення, рівність, приналежність елемента множині.
Написати функції, що:
а) реалізують основні операції алгебри многочленів від однієї змінної з цілими коефіцієнтами: введення/виведення, додавання, множення на одночлен та многочлен, ділення двох многочленів (з остачею та часткою у вигляді многочленів);
б) знаходить множину всіх цілих коренів многочлена;
в) знаходить локальний мінімум многочлена на заданій множині цілих чисел.
Написати функції, що реалізують основні операції над розрідженими квадратними матрицями дійсних чисел: введення/виведення, додавання, віднімання, множення, множення на вектор, обернення, обчислення сліду, тріангуляція.
4) Керування купою. Реалізувати фунції для виділення блока вільної динамічної пам'яті (купи) заданого розміру (результатом роботи процедури повинна бути -1, якщо блок такого розміру виділений бути не може) та для звільнення місця в купі (повторного долучення в список вільної пам'яті блоку, виділеного раніше).
Подання.
Числові множини:
- лінійний список елементів;
- циклічний список елементів;
- двонаправлений список.
Многочлени від однієї змінної з цілими коефіцієнтами:
- лінійний список пар <коефіцієнт, степінь змінної>;
- циклічний список пар;
- двонаправлений список пар.
Розріджені числові матриці : списками, вузли яких подають ненульові елементи рядків та стовпчиків матриці (кожен вузол – це 5-ка , де - відповідно номер рядка, - номер стовпчика, - сам ненульовий елемент матриці, - покажчик на наступний не нульовий елемент в -му рядку, - покажчик на наступний не нульовий елемент в -му словачку) та двома масивами довжини , що задають голови цих списків.
4) Алгоритмами динамічного розподілу пам'яті називають алгоритми, що дозволяють виділяти і звільняти різні за розміром блоки пам'яті, беручи їх з однієї великої області пам'яті (купи). Тут і далі використовуються терміни блок і область, що позначають сукупність суміжних комірок пам'яті. Будемо вважати, що вся наявна вільна пам'ять подана у виді списку вільних блоків. У початковий момент у списку тільки один блок, що містить усю вільну пам'ять (=купу). Кожний блок містить заголовок із розмірами блока і покажчиком на наступний блок. Виділення вільної пам'яті на запит часто виконується або за методом “оптимального за розміром”, або за методом “першого прийнятного”. Перший метод полягає в тому, що серед усіх блоків, що мають розмір, не менший необхідного, вибирається блок із найменшим розміром. Другий метод полягає в тому, що виділенню підлягає перший у порядку перегляду елементів списку блок, розмір котрого не менше необхідного. Якщо блок, обраний за одним з двох зазначених методів, має розмір, що перевищує зазначений при запиті, він розщеплюється на два: перший блок має необхідний розмір і дається у відповідь на запит, другий блок (залишок) залишається в списку вільної пам'яті. При звільненні блока суміжні блоки склеюються.
Вказівки:
виконати аналіз та проектування ЖЦП;
провести автономне тестування та відлагодження всіх процедур і функцій та комплексне тестування всієї програми;
операції та процедури оформити у вигляді модуля;
підготувати Звіт про виконання Лабораторної роботи .