овічного) пошуку), т.е. такі, які можуть викликатися для обробки елементів різних рівнів ієрархії.
Перевагами такої реалізації є те, що для забезпечення пошуку позиції вставки нового елемента в список або позиції вже доданого необхідна всього лише одна функція, яка буде викликатися з різними параметрами, у тому числі з покажчиком на різні функції порівняння. Це суттєво зменшує кількість підпрограм, які необхідно реалізувати для обробки мультіспісковой структури даних.
Таким чином, наявність в мові C ++ апарату змінних типу покажчик на функцію надає можливості за гнучким зміні.
Дійсно, пов'язуючи таку змінну з конкретною функцією, ми отримуємо можливість в одній і тій же точці програми, залежно від конкретних умов, звертатися до різних функцій.
Ще однією особливістю реалізації можна назвати структуру масиву покажчиків. Особливість полягає в тому, що перші два елементи масиву є службовими. У яких міститися значення розміру масиву і кількості елементів у ньому. Звернення до цих службовим елементами здійснюється за індексами - 1 і - 2, оскільки покажчик на початок масиву зміщений на два елементи «вниз». Під поняттям «вниз» слід розуміти, що до адресою покажчика додається подвоєний розмір покажчика (4байт * 2=8байт). Це можна здійснювати при допомогу адресної арифметики мови C ++ (наприклад, щоб виконати раніше описане дію достатньо написати list +=2, де list - це покажчик на початок масиву).
Таким чином, покажчик на початок масиву має індекс 0, але насправді є другим елементом у ньому. Перші два виділені як службові, значення яких використовуються для організації циклу проходу по всьому рівня або подуровню мультіспісковой структури. Наприклад, у функції виведення вмісту списку в QTreeWidget або QTableWidget (дерево і таблицю відповідно).
5. Проектування інформаційно-довідкової системи
. 1 Розробка структури даних
Для організації структури даних нам потрібно головний покажчик на масив покажчиків (це буде перший рівень ієрархії) на список вулиць. Кожна структура, крім структур, що використовуються на нижньому рівні ієрархії, повинна мати поле-покажчик на масив покажчиків (void **). Так, наприклад, кожна структура для вулиці повинна мати покажчик на масив, що зберігає покажчики на будинки. Однак, для структури, яка описує жителів, такі поля не потрібні, оскільки у неї немає підрівнів, і вона утворює останній четвертий рівень ієрархії в даній мультіспісковой структурі. Як вже було згадано раніше, кожен масив покажчиків повинен у собі містити два додаткових поля, одне з них вказує на реальну кількість елементів у масиві, а інше вказує на розмір масиву. Ці поля розташовуються на початку масиву на першій і другій позиції (проте, слід пам'ятати про те, що покажчик на початок масиву був зрушений, і звертатися до службових полях слід за індексами - 1 і - 2).
. 2 Проектування фізичної структури
Для реалізації поставленої задачі необхідно вибрати способи і структури реалізації списку і зберігання даних. Вибір масиву покажчиків має переваги в швидкості і простоті обробки перед звичайною лінійною структурою і по використанню пам'яті в порівнянні зі статичними структурами. Оскільки мультіспісковая структура включає сукупність масивів покажчиків, то зручно її зображати у вигляді ієрархічної структури, певним чином пов'язаних між собою.
Малюнок 5.1 - Фізична структура ІВС
Логічну структуру можна описати таким чином: 0-м рівнем є «Вулиця», пов'язана з «Домом», який, є 1-м рівнем ієрархії. «Дім» у свою чергу пов'язаний з 2-м рівнем «Квартира», який у свою чергу пов'язаний з 3-м рівнем - «Жителі».
5.3 Фізична структура даних для збереження у файл
У ході проектування було прийнято рішення зберігати структуру в двійковий файл формату .cml. Це зроблено для того, що б виключити можливість завантаження файлів неправильних вмісту. Операції збереження списку в файл і відновлення списку з файлу реалізовані згідно завдання обумовлено рядом причин, які описані нижче. В даний час формат XML (Extensible Markup Language, розширювана мова розмітки) - одна з найбільш активно використовуваних технологій.
XML розроблявся як мова з простим формальним синтаксисом, зручний для створення та обробки документів програмами і одночасно зручний для читання і створення документів людиною, з підкресленням націленості на використання в Інтернеті.
З логічної точки зору, документ складається з прологу і кореневого елемента. Кореневої елемент- обов'язкова частина документа, пролог, взагалі кажучи, може бути відсутнім.
Кореневий елемент може включ...